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;
 | |
| }
 | |
| 
 |