/******************************************************************************\ * * $Workfile: PRECOMP.H $ * * Contents: * Common headers used throughout the display driver. This entire include file * will typically be pre-compiled. * * Copyright (c) 1996 Cirrus Logic, Inc. * * $Log: X:/log/laguna/nt35/displays/cl546x/PRECOMP.H $ * * Rev 1.10 Feb 16 1998 15:54:18 frido * Removed rx.h from NT 5.0 headers. * * Rev 1.9 29 Aug 1997 17:14:46 RUSSL * Added overlay support * * Rev 1.8 08 Aug 1997 16:05:10 FRIDO * * Added mMCore.h file. * * Rev 1.7 26 Feb 1997 13:20:20 noelv * * disable MCD code for NT 3.5x * * Rev 1.6 26 Feb 1997 09:24:14 noelv * * Added MCD include files. * * Rev 1.5 20 Jan 1997 14:48:32 bennyn * * Added ddinline.h * * Rev 1.4 16 Jan 1997 11:41:22 bennyn * * Added pwrmgr.h & lgddmsg.h * * Rev 1.3 01 Nov 1996 09:24:12 BENNYN * * Added shareable DD blt include files * * Rev 1.2 20 Aug 1996 11:05:22 noelv * Bugfix release from Frido 8-19-96 * * Rev 1.1 15 Aug 1996 11:38:56 frido * First revision. * \******************************************************************************/ #include #include #include #ifdef WINNT_VER40 #include #include #include #else #include #endif #include #include #include #include #include #include #include #if _WIN32_WINNT < 0x0500 #include #endif #include #include #ifndef WINNT_VER35 #include // OpenGL MCD ddk supplied header #endif #include "bltp.h" #include "l2d.h" #include "l3system.h" #if DRIVER_5465 && defined(OVERLAY) #include "overlay.h" #include "5465bw.h" #endif #include "driver.h" #include "HDtable.h" #include "lines.h" #include "Optimize.h" #include "ddinline.h" #include "lgddmsg.h" #include "pwrmgr.h" #include "mmCore.h" /// Define the A vector polynomial bits // // Each bit corresponds to one of the terms in the polynomial // // Rop(D,S,P) = a + a D + a S + a P + a DS + a DP + a SP + a DSP // 0 d s p ds dp sp dsp #define AVEC_NOT 0x01 #define AVEC_D 0x02 #define AVEC_S 0x04 #define AVEC_P 0x08 #define AVEC_DS 0x10 #define AVEC_DP 0x20 #define AVEC_SP 0x40 #define AVEC_DSP 0x80 #define AVEC_NEED_SOURCE (AVEC_S | AVEC_DS | AVEC_SP | AVEC_DSP) #define AVEC_NEED_PATTERN (AVEC_P | AVEC_DP | AVEC_SP | AVEC_DSP) #define AVEC_NEED_DEST (AVEC_D | AVEC_DP | AVEC_DS | AVEC_DSP) // This is Laguna specific or 3 OP ROP specific #define ROP3MIX(fg, bg) ((fg & 0xCC) | (bg & 0x33)) // SWAP - Swaps the value of two variables, using a temporary variable #define SWAP(a, b, tmp) { (tmp) = (a); (a) = (b); (b) = (tmp); } #if defined(i386) #define QUOTIENT_REMAINDER(ulNumerator, ulDenominator, ulQuotient, ulRemainder) \ { \ __asm mov eax, ulNumerator \ __asm sub edx, edx \ __asm div ulDenominator \ __asm mov ulQuotient, eax \ __asm mov ulRemainder, edx \ } #else #define QUOTIENT_REMAINDER(ulNumerator, ulDenominator, ulQuotient, ulRemainder) \ { \ ulQuotient = (ULONG) ulNumerator / (ULONG) ulDenominator; \ ulRemainder = (ULONG) ulNumerator % (ULONG) ulDenominator; \ } #endif #define BD_OP1_IS_SRAM_MONO (BD_OP1 * IS_SRAM_MONO) #ifdef DEBUG #define ASSERTDD(x, y) if (!(x)) RIP (y) #else #define ASSERTDD(x, y) #endif typedef VOID (FNFILL)(PDEV*, LONG, RECTL*, ULONG, ULONG, BRUSHOBJ*, POINTL*); // // File Prototypes BOOL bIntersect(RECTL* prcl1, RECTL* prcl2, RECTL* prclResult); BOOL bSetMask(PPDEV ppdev, BRUSHOBJ *pbo, POINTL *pptlBrush, ULONG *bltdef); BOOL bMmFastFill( PDEV* ppdev, LONG cEdges, // Includes close figure edge POINTFIX* pptfxFirst, ULONG ulHwForeMix, ULONG ulHwBackMix, ULONG iSolidColor, BRUSHOBJ* pbo); VOID vMmFillSolid( // Type FNFILL PDEV* ppdev, LONG c, // Can't be zero RECTL* prcl, // List of rectangles to be filled, in relative // coordinates ULONG ulHwForeMix, // Hardware mix mode ULONG ulHwBackMix, // Not used BRUSHOBJ* pbo, // Drawing colour is pbo->iSolidColor POINTL* pptlBrush); // Not used VOID vMmFillPatFast( // Type FNFILL PDEV* ppdev, LONG c, // Can't be zero RECTL* prcl, // List of rectangles to be filled, in relative // coordinates ULONG ulHwForeMix, // Hardware mix mode (foreground mix mode if // the brush has a mask) ULONG ulHwBackMix, // Not used (unless the brush has a mask, in // which case it's the background mix mode) BRUSHOBJ* pbo, // pbo POINTL* pptlBrush); // Pattern alignment