diff options
Diffstat (limited to 'iplan2p4/iplmergerop.h')
-rw-r--r-- | iplan2p4/iplmergerop.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/iplan2p4/iplmergerop.h b/iplan2p4/iplmergerop.h new file mode 100644 index 000000000..fa537d3a7 --- /dev/null +++ b/iplan2p4/iplmergerop.h @@ -0,0 +1,142 @@ +/* $XFree86: xc/programs/Xserver/iplan2p4/iplmergerop.h,v 3.1 2001/07/25 15:05:09 dawes Exp $ */ +#ifndef _IPLANMERGEROP_H_ +#define _IPLANMERGEROP_H_ + +/* Modified nov 94 by Martin Schaller (Martin_Schaller@maus.r.de) for use with +interleaved planes */ + +/* defines: + INTER_MROP_NAME + INTER_MROP_DECLARE_REG() + INTER_MROP_INITIALIZE(alu, pm) + INTER_MROP_SOLID(src1, src2, dst) + INTER_MROP_MASK(src1, src2, mask, dst) + INTER_MROP_PREBUILD(src) + INTER_MROP_PREBUILT_DECLARE() + INTER_MROP_PREBUILT_SOLID(src,dst) + INTER_MROP_PREBUILT_MASK(src,dst,mask) +*/ + +#ifndef GXcopy +#include "X.h" +#endif + +typedef struct _mergeRopBits { + unsigned long ca1, cx1, ca2, cx2; +} mergeRopRec, *mergeRopPtr; + +extern mergeRopRec mergeRopBits[16]; + +#define INTER_DeclareMergeRop() \ + INTER_DECLAREGP(_ca1); \ + INTER_DECLAREGP(_cx1); \ + INTER_DECLAREGP(_ca2); \ + INTER_DECLAREGP(_cx2); + +#define INTER_DeclarePrebuiltMergeRop() \ + INTER_DECLAREGP(_cca); \ + INTER_DECLAREGP(_ccx); + +#define INTER_InitializeMergeRop(alu,pm) { \ + INTER_DECLAREGP(_pm); \ + mergeRopPtr _bits; \ + INTER_PFILL(pm, _pm); \ + _bits = &mergeRopBits[alu]; \ + INTER_ANDMSK(_pm, _bits->ca1, _ca1); \ + INTER_ANDMSK(_pm, _bits->ca2, _ca2); \ + INTER_ANDMSK(_pm, _bits->cx2, _cx2); \ + INTER_NOT(_pm, _pm); \ + INTER_ORMSK(_pm, _bits->cx1, _cx1); \ +} + +#define INTER_DoMergeRop(src1, src2, dst) \ + INTER_CPLX(src1, src2, _ca1, _cx1, _ca2, _cx2, dst) + +#define INTER_DoMaskMergeRop(src1, src2, mask, dst) \ + INTER_CPLXM(src1, src2, _ca1, _cx1, _ca2, _cx2, mask, dst) + +#define INTER_DoPrebuiltMergeRop(src, dst) \ + INTER_DoRRop(src, _cca, _ccx, dst) + +#define INTER_DoMaskPrebuiltMergeRop(src, mask, dst) \ + INTER_DoMaskRRop(src, _cca, _ccx, mask, dst) + +#define INTER_PrebuildMergeRop(src) \ + INTER_DoRRop(src, _ca1, _cx1, _cca); \ + INTER_DoRRop(src, _ca2, _cx2, _ccx); + +#ifndef MROP +#define MROP 0 +#endif + +#define Mclear (1<<GXclear) +#define Mand (1<<GXand) +#define MandReverse (1<<GXandReverse) +#define Mcopy (1<<GXcopy) +#define MandInverted (1<<GXandInverted) +#define Mnoop (1<<GXnoop) +#define Mxor (1<<GXxor) +#define Mor (1<<GXor) +#define Mnor (1<<GXnor) +#define Mequiv (1<<GXequiv) +#define Minvert (1<<GXinvert) +#define MorReverse (1<<GXorReverse) +#define McopyInverted (1<<GXcopyInverted) +#define MorInverted (1<<GXorInverted) +#define Mnand (1<<GXnand) +#define Mset (1<<GXset) + +#if (MROP) == Mcopy +#define INTER_MROP_NAME(prefix) INTER_MROP_NAME_CAT(prefix,Copy) +#define INTER_MROP_DECLARE_REG() +#define INTER_MROP_INITIALIZE(alu,pm) +#define INTER_MROP_SOLID(src,dst,dst2) INTER_COPY(src, dst2) +#define INTER_MROP_MASK(src,dst,mask, dst2) INTER_COPYM(src,dst,mask,dst2) +#endif + +#if (MROP) == Mxor +#define INTER_MROP_NAME(prefix) INTER_MROP_NAME_CAT(prefix,Xor) +#define INTER_MROP_DECLARE_REG() +#define INTER_MROP_INITIALIZE(alu,pm) +#define INTER_MROP_SOLID(src,dst,dst2) INTER_XOR(src,dst,dst2) +#define INTER_MROP_MASK(src,dst,mask,dst2) INTER_XORM(src,dst,mask,dst2) +#endif + +#if (MROP) == Mor +#define INTER_MROP_NAME(prefix) INTER_MROP_NAME_CAT(prefix,Or) +#define INTER_MROP_DECLARE_REG() +#define INTER_MROP_INITIALIZE(alu,pm) +#define INTER_MROP_SOLID(src,dst,dst2) INTER_OR(src,dst,dst2) +#define INTER_MROP_MASK(src,dst,mask,dst2) INTER_ORM(src,dst,mask,dst2) +#endif + +#if (MROP) == 0 +#define INTER_MROP_NAME(prefix) INTER_MROP_NAME_CAT(prefix,General) +#define INTER_MROP_DECLARE_REG() INTER_DeclareMergeRop() +#define INTER_MROP_INITIALIZE(alu,pm) INTER_InitializeMergeRop(alu,pm) +#define INTER_MROP_SOLID(src,dst,dst2) INTER_DoMergeRop(src, dst, dst2) +#define INTER_MROP_MASK(src,dst,mask,dst2) \ + INTER_DoMaskMergeRop(src, dst, mask, dst2) +#define INTER_MROP_PREBUILD(src) INTER_PrebuildMergeRop(src) +#define INTER_MROP_PREBUILT_DECLARE() INTER_DeclarePrebuiltMergeRop() +#define INTER_MROP_PREBUILT_SOLID(src,dst, dst2) \ + INTER_DoPrebuiltMergeRop(dst,dst2) +#define INTER_MROP_PREBUILT_MASK(src,dst,mask,dst2) \ + INTER_DoMaskPrebuiltMergeRop(dst,mask, dst2) +#endif + +#ifndef INTER_MROP_PREBUILD +#define INTER_MROP_PREBUILD(src) +#define INTER_MROP_PREBUILT_DECLARE() +#define INTER_MROP_PREBUILT_SOLID(src,dst,dst2) INTER_MROP_SOLID(src,dst,dst2) +#define INTER_MROP_PREBUILT_MASK(src,dst,mask,dst2) \ + INTER_MROP_MASK(src,dst,mask,dst2) +#endif + +#if !defined(UNIXCPP) || defined(ANSICPP) +#define INTER_MROP_NAME_CAT(prefix,suffix) prefix##suffix +#else +#define INTER_MROP_NAME_CAT(prefix,suffix) prefix/**/suffix +#endif + +#endif /* _IPLANMERGEROP_H_ */ |