/* $XFree86: xc/programs/Xserver/iplan2p4/iplmergerop.h,v 3.0 1996/08/18 01:54:53 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<