#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,
ROP_DSa,
ROP_SDna,
ROP_S,
ROP_DSna,
ROP_D,
ROP_DSx,
ROP_DSo,
ROP_DSon,
ROP_DSxn,
ROP_Dn,
ROP_SDno,
ROP_Sn,
ROP_DSno,
ROP_DSan,
ROP_1
};
int XAACopyROP_PM[16] =
{
ROP_0,
ROP_DSPnoa,
ROP_DPSnaon,
ROP_DPSDxax,
ROP_DPSana,
ROP_D,
ROP_DPSax,
ROP_DPSao,
ROP_DPSaon,
ROP_DPSaxn,
ROP_Dn,
ROP_DPSanan,
ROP_PSDPxox,
ROP_DPSnao,
ROP_DSPnoan,
ROP_1
};
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,
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;
}