#ifndef FFBRCACHE_H
#define FFBRCACHE_H
#define FFB_WRITE_PPC(__fpriv, __ffb, __val, __chg_mask) \
do { unsigned int oldval = (__fpriv)->ppc_cache; \
unsigned int __t; \
__t = (oldval & (__chg_mask)) ^ (__val); \
if (__t) { \
unsigned int newval = oldval & ~(__chg_mask); \
newval |= (__val); \
(__fpriv)->ppc_cache = newval; \
FFBFifo((__fpriv), 1); \
(__ffb)->ppc = (__val); \
} \
} while(0)
#define FFB_WRITE_PMASK(__fpriv, __ffb, __val) \
do { if((__fpriv)->pmask_cache != (__val)) { \
(__fpriv)->pmask_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->pmask = (__val); \
} \
} while(0)
#define FFB_WRITE_ROP(__fpriv, __ffb, __val) \
do { if((__fpriv)->rop_cache != (__val)) { \
(__fpriv)->rop_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->rop = (__val); \
} \
} while(0)
#define FFB_WRITE_DRAWOP(__fpriv, __ffb, __val) \
do { if((__fpriv)->drawop_cache != (__val)) { \
(__fpriv)->drawop_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->drawop = (__val); \
} \
} while(0)
#define FFB_WRITE_FG(__fpriv, __ffb, __val) \
do { if((__fpriv)->fg_cache != (__val)) { \
(__fpriv)->fg_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->fg = (__val); \
} \
} while(0)
#define FFB_WRITE_BG(__fpriv, __ffb, __val) \
do { if((__fpriv)->bg_cache != (__val)) { \
(__fpriv)->bg_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->bg = (__val); \
} \
} while(0)
#define FFB_WRITE_FONTW(__fpriv, __ffb, __val) \
do { if((__fpriv)->fontw_cache != (__val)) { \
(__fpriv)->fontw_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->fontw = (__val); \
} \
} while(0)
#define FFB_WRITE_FONTINC(__fpriv, __ffb, __val) \
do { if((__fpriv)->fontinc_cache != (__val)) { \
(__fpriv)->fontinc_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->fontinc = (__val); \
} \
} while(0)
#define FFB_WRITE_FBC(__fpriv, __ffb, __val) \
do { if((__fpriv)->fbc_cache != (__val)) { \
(__fpriv)->fbc_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->fbc = (__val); \
} \
} while(0)
#define FFB_WRITE_WID(__fpriv, __ffb, __val) \
do { if((__fpriv)->wid_cache != (__val)) { \
(__fpriv)->wid_cache = (__val); \
FFBFifo((__fpriv), 1); \
(__ffb)->wid = (__val); \
} \
} while(0)
extern void __FFB_Attr_Raw(FFBPtr pFfb,
unsigned int ppc,
unsigned int ppc_mask,
unsigned int pmask,
unsigned int rop,
int drawop, int fg,
unsigned int fbc,
unsigned int wid);
#define FFB_ATTR_RAW(__fpriv, __ppc, __ppc_mask, __pmask, __rop, __drawop, __fg, __fbc, __wid) \
if((((__fpriv)->ppc_cache & (__ppc_mask)) != (__ppc)) || \
((__fpriv)->pmask_cache != (__pmask)) || \
((__fpriv)->rop_cache != (__rop)) || \
(((__drawop) != -1) && ((__fpriv)->drawop_cache != (__drawop))) || \
((__fpriv)->fg_cache != (__fg)) || \
((__fpriv)->fbc_cache != (__fbc)) || \
((__fpriv)->wid_cache != (__wid))) \
__FFB_Attr_Raw((__fpriv), (__ppc), (__ppc_mask), (__pmask), \
(__rop), (__drawop), (__fg), (__fbc), (__wid))
#define FFB_PPC_GCMASK (FFB_PPC_APE_MASK | FFB_PPC_CS_MASK)
extern void __FFB_Attr_GC(FFBPtr pFfb, GCPtr pGC, WindowPtr pWin,
unsigned int ppc, int drawop);
#define FFB_ATTR_GC(__fpriv, __pgc, __pwin, __ppc, __drawop) \
do { CreatorPrivWinPtr __winpriv = CreatorGetWindowPrivate(__pwin); \
unsigned int __rop = ((__pgc)->alu | FFB_ROP_EDIT_BIT); \
unsigned int __fbc = ((__winpriv)->fbc_base); \
__fbc &= ~FFB_FBC_XE_MASK; \
__fbc |= FFB_FBC_XE_OFF; \
__rop |= (FFB_ROP_NEW << 8); \
if ((((__fpriv)->ppc_cache & FFB_PPC_GCMASK) != (__ppc))|| \
((__fpriv)->pmask_cache != ((__pgc)->planemask)) || \
((__fpriv)->rop_cache != (__rop)) || \
((__fpriv)->drawop_cache != (__drawop)) || \
((__fpriv)->fg_cache != ((__pgc)->fgPixel)) || \
((__fpriv)->fbc_cache != __fbc)) \
__FFB_Attr_GC(__fpriv, __pgc, __pwin, __ppc, __drawop); \
} while(0)
#define FFB_PPC_WINMASK (FFB_PPC_APE_MASK | FFB_PPC_CS_MASK | FFB_PPC_XS_MASK)
extern void __FFB_Attr_FastfillWin(FFBPtr pFfb, WindowPtr pWin,
unsigned int ppc, unsigned int pixel);
#define FFB_ATTR_FFWIN(__fpriv, __pwin, __ppc, __pixel) \
do { CreatorPrivWinPtr __winpriv = CreatorGetWindowPrivate(__pwin); \
unsigned int ___ppc = (__ppc) | FFB_PPC_XS_WID; \
unsigned int fbc = (__winpriv)->fbc_base; \
unsigned int rop = (FFB_ROP_NEW|(FFB_ROP_NEW<<8)); \
if((__fpriv)->has_double_buffer) { \
fbc &= ~FFB_FBC_WB_MASK; \
fbc |= FFB_FBC_WB_AB; \
} \
fbc &= ~(FFB_FBC_XE_MASK | FFB_FBC_RGBE_MASK); \
fbc |= FFB_FBC_XE_ON | FFB_FBC_RGBE_ON; \
if (pFfb->ffb_res == ffb_res_high) \
fbc |= FFB_FBC_WB_B; \
if ((((__fpriv)->ppc_cache & FFB_PPC_WINMASK) != (___ppc))|| \
((__fpriv)->pmask_cache != 0x00ffffff) || \
((__fpriv)->rop_cache!= rop) || \
((__fpriv)->drawop_cache != FFB_DRAWOP_FASTFILL) || \
((__fpriv)->fg_cache != (__pixel)) || \
((__fpriv)->fbc_cache != fbc) || \
((__fpriv)->wid_cache != ((__winpriv)->wid))) \
__FFB_Attr_FastfillWin(__fpriv, __pwin, ___ppc, __pixel);\
} while (0)
#define FFB_PPC_WINCOPY (FFB_PPC_APE_DISABLE | FFB_PPC_XS_VAR | FFB_PPC_CS_VAR)
#define FFB_PPC_WINCOPY_MASK (FFB_PPC_APE_MASK | FFB_PPC_XS_MASK | FFB_PPC_CS_MASK)
#define FFB_FBC_WINCOPY (FFB_FBC_WB_A | FFB_FBC_WM_COMBINED | FFB_FBC_WE_FORCEON | \
FFB_FBC_RB_A | FFB_FBC_SB_BOTH | FFB_FBC_XE_ON | \
FFB_FBC_ZE_OFF | FFB_FBC_YE_OFF | FFB_FBC_RGBE_ON)
#define FFB_ATTR_SFB_VAR_WINCOPY(__fpriv) \
do { unsigned int ppc = FFB_PPC_WINCOPY; \
unsigned int ppc_mask = FFB_PPC_WINCOPY_MASK; \
unsigned int rop = FFB_ROP_NEW|(FFB_ROP_NEW<<8); \
unsigned int fbc = FFB_FBC_WINCOPY; \
if((__fpriv)->has_double_buffer) { \
fbc &= ~FFB_FBC_WB_MASK; \
fbc |= FFB_FBC_WB_AB; \
} \
if (((__fpriv)->ppc_cache & ppc_mask) != ppc || \
(__fpriv)->fbc_cache != fbc || \
(__fpriv)->rop_cache != rop || \
(__fpriv)->pmask_cache != 0xffffffff) { \
ffb_fbcPtr __ffb = (__fpriv)->regs; \
(__fpriv)->ppc_cache &= ~ppc_mask; \
(__fpriv)->ppc_cache |= ppc; \
(__fpriv)->fbc_cache = fbc; \
(__fpriv)->rop_cache = rop; \
(__fpriv)->pmask_cache = 0xffffffff; \
(__fpriv)->rp_active = 1; \
FFBFifo(__fpriv, 4); \
(__ffb)->ppc = ppc; \
(__ffb)->fbc = fbc; \
(__ffb)->rop = rop; \
(__ffb)->pmask = 0xffffffff; \
(__fpriv)->rp_active = 1; \
} \
} while(0)
extern void __FFB_Attr_SFB_VAR(FFBPtr pFfb, unsigned int ppc, unsigned int ppc_mask, unsigned int fbc,
unsigned int wid, unsigned int rop, unsigned int pmask);
#define FFB_ATTR_SFB_VAR_WIN(__fpriv, __pmask, __alu, __pwin) \
do { unsigned int ppc = FFB_PPC_APE_DISABLE | FFB_PPC_CS_VAR | FFB_PPC_XS_WID; \
unsigned int ppc_mask = FFB_PPC_APE_MASK | FFB_PPC_CS_MASK | FFB_PPC_XS_MASK; \
unsigned int rop = (FFB_ROP_EDIT_BIT | (__alu))|(FFB_ROP_NEW<<8); \
unsigned int fbc = FFB_FBC_WIN(__pwin); \
if((__fpriv)->has_double_buffer) { \
fbc &= ~FFB_FBC_WB_MASK; \
fbc |= FFB_FBC_WB_AB; \
} \
if(((__fpriv)->ppc_cache & ppc_mask) != ppc || \
(__fpriv)->fbc_cache != fbc || \
(__fpriv)->wid_cache != FFB_WID_WIN(__pwin) || \
(__fpriv)->rop_cache != rop || \
(__fpriv)->pmask_cache != (__pmask)) \
__FFB_Attr_SFB_VAR(__fpriv, ppc, ppc_mask, fbc, \
FFB_WID_WIN(__pwin), rop, (__pmask)); \
} while(0)
#define FFB_ATTR_VSCROLL_WINCOPY(__fpriv) \
do { unsigned int rop = (FFB_ROP_OLD | (FFB_ROP_OLD << 8)); \
unsigned int fbc = FFB_FBC_WINCOPY; \
if((__fpriv)->has_double_buffer) { \
fbc &= ~FFB_FBC_WB_MASK; \
fbc |= FFB_FBC_WB_AB; \
} \
if((__fpriv)->fbc_cache != fbc || \
(__fpriv)->rop_cache != rop || \
(__fpriv)->pmask_cache != 0xffffffff || \
(__fpriv)->drawop_cache != FFB_DRAWOP_VSCROLL) { \
ffb_fbcPtr __ffb = (__fpriv)->regs; \
(__fpriv)->fbc_cache = fbc; \
(__fpriv)->rop_cache = rop; \
(__fpriv)->pmask_cache = 0xffffffff; \
(__fpriv)->drawop_cache = FFB_DRAWOP_VSCROLL; \
(__fpriv)->rp_active = 1; \
FFBFifo(__fpriv, 4); \
(__ffb)->fbc = fbc; \
(__ffb)->rop = rop; \
(__ffb)->pmask = 0xffffffff; \
(__ffb)->drawop = FFB_DRAWOP_VSCROLL; \
(__fpriv)->rp_active = 1; \
} \
} while(0)
#define FFB_ATTR_VSCROLL_WIN(__fpriv, __pmask, __pwin) \
do { unsigned int rop = (FFB_ROP_OLD | (FFB_ROP_OLD << 8)); \
unsigned int fbc = FFB_FBC_WIN(__pwin); \
if((__fpriv)->has_double_buffer) { \
fbc &= ~FFB_FBC_WB_MASK; \
fbc |= FFB_FBC_WB_AB; \
} \
if((__fpriv)->fbc_cache != fbc || \
(__fpriv)->rop_cache != rop || \
(__fpriv)->pmask_cache != (__pmask) || \
(__fpriv)->drawop_cache != FFB_DRAWOP_VSCROLL) { \
ffb_fbcPtr __ffb = (__fpriv)->regs; \
(__fpriv)->fbc_cache = fbc; \
(__fpriv)->rop_cache = rop; \
(__fpriv)->pmask_cache = (__pmask); \
(__fpriv)->drawop_cache = FFB_DRAWOP_VSCROLL; \
(__fpriv)->rp_active = 1; \
FFBFifo(__fpriv, 4); \
(__ffb)->fbc = fbc; \
(__ffb)->rop = rop; \
(__ffb)->pmask = (__pmask); \
(__ffb)->drawop = FFB_DRAWOP_VSCROLL; \
} \
} while(0)
#define FFB_FBC_WIN(pWin) CreatorGetWindowPrivate(pWin)->fbc_base
#define FFB_WID_WIN(pWin) CreatorGetWindowPrivate(pWin)->wid
#endif