187 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
/* $XFree86$ */
 | 
						|
 | 
						|
#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;
 | 
						|
}
 | 
						|
 |