static void TridentSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir, int ydir, int rop, unsigned int planemask, int transparency_color) { TRIDENTPtr pTrident = TRIDENTPTR(pScrn); int dst = 0; pTrident->BltScanDirection = 0; if (xdir < 0) pTrident->BltScanDirection |= XNEG; if (ydir < 0) pTrident->BltScanDirection |= YNEG; REPLICATE(transparency_color); if (transparency_color != -1) { if (pTrident->Chipset == PROVIDIA9685 || pTrident->Chipset == CYBER9388) { dst |= 1<<16; } else { TGUI_OPERMODE(pTrident->EngineOperation | DST_ENABLE); } TGUI_CKEY(transparency_color); } TGUI_DRAWFLAG(pTrident->DrawFlag | pTrident->BltScanDirection | SCR2SCR | dst); TGUI_FMIX(XAAGetCopyROP(rop)); }
static void XP4SetupForCPUToScreenColorExpandFill( ScrnInfoPtr pScrn, int fg, int bg, int rop, unsigned int planemask ){ TRIDENTPtr pTrident = TRIDENTPTR(pScrn); ropcode = XAAGetCopyROP(rop); #if 0 TGUI_FMIX(XAACopyROP[rop]); #endif if (bg == -1) { TGUI_DRAWFLAG(SRCMONO | 1<<12); REPLICATE(fg); TGUI_FCOLOUR(fg); } else { TGUI_DRAWFLAG(SRCMONO); REPLICATE(fg); REPLICATE(bg); TGUI_FCOLOUR(fg); TGUI_BCOLOUR(bg); } }
static void XP4SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2, int w, int h) { TRIDENTPtr pTrident = TRIDENTPTR(pScrn); if (pTrident->BltScanDirection & YNEG) { y1 = y1 + h - 1; y2 = y2 + h - 1; } if (pTrident->BltScanDirection & XNEG) { x1 = x1 + w - 1; x2 = x2 + w - 1; } MMIO_OUT32(pTrident->IOBase, 0x2138, x2<<16 | y2); MMIO_OUT32(pTrident->IOBase, 0x213C, x1<<16 | y1); MMIO_OUT32(pTrident->IOBase, 0x2140, w<<16 | h); XP4Sync(pScrn); MMIO_OUT32(pTrident->IOBase, 0x2124, XAAGetCopyROP(ropcode) << 24 | bpp << 8 | 1); }
static void XPSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir, int ydir, int rop, unsigned int planemask, int transparency_color) { TRIDENTPtr pTrident = TRIDENTPTR(pScrn); int dst = 0; pTrident->BltScanDirection = 0; if (xdir < 0) pTrident->BltScanDirection |= XNEG; if (ydir < 0) pTrident->BltScanDirection |= YNEG; REPLICATE(transparency_color); if (transparency_color != -1) { dst |= 3<<16; MMIO_OUT32(pTrident->IOBase, 0x2134, transparency_color); } TGUI_DRAWFLAG(pTrident->BltScanDirection | SCR2SCR | dst); TGUI_FMIX(XAAGetCopyROP(rop)); }
static void TridentSetupForScanlineCPUToScreenColorExpandFill( ScrnInfoPtr pScrn, int fg, int bg, int rop, unsigned int planemask ){ TRIDENTPtr pTrident = TRIDENTPTR(pScrn); int drawflag = SRCMONO; REPLICATE(fg); TGUI_FCOLOUR(fg); if (bg == -1) { drawflag |= 1<<12; TGUI_BCOLOUR(~fg); } else { REPLICATE(bg); TGUI_BCOLOUR(bg); } TGUI_SRC_XY(0,0); TGUI_DRAWFLAG(drawflag); TGUI_FMIX(XAAGetCopyROP(rop)); }