183 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
#ifdef HAVE_XORG_CONFIG_H
 | 
						|
#include <xorg-config.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#include <X11/X.h>
 | 
						|
#include "misc.h"
 | 
						|
#include "xf86.h"
 | 
						|
#include "xf86_OSproc.h"
 | 
						|
 | 
						|
#include "scrnintstr.h"
 | 
						|
#include "xf86str.h"
 | 
						|
#include "xaarop.h"
 | 
						|
#include "xaa.h"
 | 
						|
#include "xaalocal.h"
 | 
						|
 | 
						|
int XAACopyROP[16] = {
 | 
						|
    ROP_0,                      /* GXclear */
 | 
						|
    ROP_DSa,                    /* GXand */
 | 
						|
    ROP_SDna,                   /* GXandReverse */
 | 
						|
    ROP_S,                      /* GXcopy */
 | 
						|
    ROP_DSna,                   /* GXandInverted */
 | 
						|
    ROP_D,                      /* GXnoop */
 | 
						|
    ROP_DSx,                    /* GXxor */
 | 
						|
    ROP_DSo,                    /* GXor */
 | 
						|
    ROP_DSon,                   /* GXnor */
 | 
						|
    ROP_DSxn,                   /* GXequiv */
 | 
						|
    ROP_Dn,                     /* GXinvert */
 | 
						|
    ROP_SDno,                   /* GXorReverse */
 | 
						|
    ROP_Sn,                     /* GXcopyInverted */
 | 
						|
    ROP_DSno,                   /* GXorInverted */
 | 
						|
    ROP_DSan,                   /* GXnand */
 | 
						|
    ROP_1                       /* GXset */
 | 
						|
};
 | 
						|
 | 
						|
int XAACopyROP_PM[16] = {
 | 
						|
    ROP_0,                      /* not used */
 | 
						|
    ROP_DSPnoa,
 | 
						|
    ROP_DPSnaon,
 | 
						|
    ROP_DPSDxax,
 | 
						|
    ROP_DPSana,
 | 
						|
    ROP_D,                      /* not used */
 | 
						|
    ROP_DPSax,
 | 
						|
    ROP_DPSao,
 | 
						|
    ROP_DPSaon,
 | 
						|
    ROP_DPSaxn,
 | 
						|
    ROP_Dn,                     /* not used */
 | 
						|
    ROP_DPSanan,
 | 
						|
    ROP_PSDPxox,                /* is that correct ? */
 | 
						|
    ROP_DPSnao,
 | 
						|
    ROP_DSPnoan,
 | 
						|
    ROP_1                       /* not used */
 | 
						|
};
 | 
						|
 | 
						|
int XAAPatternROP[16] = {
 | 
						|
    ROP_0,
 | 
						|
    ROP_DPa,
 | 
						|
    ROP_PDna,
 | 
						|
    ROP_P,
 | 
						|
    ROP_DPna,
 | 
						|
    ROP_D,
 | 
						|
    ROP_DPx,
 | 
						|
    ROP_DPo,
 | 
						|
    ROP_DPon,
 | 
						|
    ROP_PDxn,
 | 
						|
    ROP_Dn,
 | 
						|
    ROP_PDno,
 | 
						|
    ROP_Pn,
 | 
						|
    ROP_DPno,
 | 
						|
    ROP_DPan,
 | 
						|
    ROP_1
 | 
						|
};
 | 
						|
 | 
						|
int XAAPatternROP_PM[16] = {
 | 
						|
    ROP_DPna,
 | 
						|
    ROP_DPSnoa,
 | 
						|
    ROP_DSPnaon,
 | 
						|
    ROP_DSPDxax,
 | 
						|
    ROP_DPSana,
 | 
						|
    ROP_D,
 | 
						|
    ROP_DPSax,
 | 
						|
    ROP_DPSao,
 | 
						|
    ROP_DPSaon,
 | 
						|
    ROP_DPSaxn,
 | 
						|
    ROP_DPx,
 | 
						|
    ROP_DPSanan,
 | 
						|
    ROP_SPDSxox,                /* is that correct ? */
 | 
						|
    ROP_DSPnao,
 | 
						|
    ROP_DPSnoan,
 | 
						|
    ROP_DPo
 | 
						|
};
 | 
						|
 | 
						|
int
 | 
						|
XAAGetCopyROP(int i)
 | 
						|
{
 | 
						|
    return XAACopyROP[i];
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
XAAGetCopyROP_PM(int i)
 | 
						|
{
 | 
						|
    return XAACopyROP_PM[i];
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
XAAGetPatternROP(int i)
 | 
						|
{
 | 
						|
    return XAAPatternROP[i];
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
XAAGetPatternROP_PM(int i)
 | 
						|
{
 | 
						|
    return XAAPatternROP_PM[i];
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
XAAHelpPatternROP(ScrnInfoPtr pScrn, int *fg, int *bg, int pm, int *rop)
 | 
						|
{
 | 
						|
    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
 | 
						|
    int ret = 0;
 | 
						|
 | 
						|
    pm &= infoRec->FullPlanemasks[pScrn->depth - 1];
 | 
						|
 | 
						|
    if (pm == infoRec->FullPlanemasks[pScrn->depth - 1]) {
 | 
						|
        if (!NO_SRC_ROP(*rop))
 | 
						|
            ret |= ROP_PAT;
 | 
						|
        *rop = XAAPatternROP[*rop];
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        switch (*rop) {
 | 
						|
        case GXnoop:
 | 
						|
            break;
 | 
						|
        case GXset:
 | 
						|
        case GXclear:
 | 
						|
        case GXinvert:
 | 
						|
            ret |= ROP_PAT;
 | 
						|
            *fg = pm;
 | 
						|
            if (*bg != -1)
 | 
						|
                *bg = pm;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            ret |= ROP_PAT | ROP_SRC;
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        *rop = XAAPatternROP_PM[*rop];
 | 
						|
    }
 | 
						|
 | 
						|
    return ret;
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
XAAHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop)
 | 
						|
{
 | 
						|
    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
 | 
						|
    int ret = 0;
 | 
						|
 | 
						|
    pm &= infoRec->FullPlanemasks[pScrn->depth - 1];
 | 
						|
 | 
						|
    if (pm == infoRec->FullPlanemasks[pScrn->depth - 1]) {
 | 
						|
        if (!NO_SRC_ROP(*rop))
 | 
						|
            ret |= ROP_PAT;
 | 
						|
        *rop = XAAPatternROP[*rop];
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        switch (*rop) {
 | 
						|
        case GXnoop:
 | 
						|
            break;
 | 
						|
        case GXset:
 | 
						|
        case GXclear:
 | 
						|
        case GXinvert:
 | 
						|
            ret |= ROP_PAT;
 | 
						|
            *fg = pm;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            ret |= ROP_PAT | ROP_SRC;
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        *rop = XAAPatternROP_PM[*rop];
 | 
						|
    }
 | 
						|
 | 
						|
    return ret;
 | 
						|
}
 |