|
|
/******************************Module*Header*******************************\
* Module Name: patblt.hxx * * This contains the prototypes for pattern blt to DIB special case. * * Created: 01-Mar-1991 22:15:02 * Author: Patrick Haluptzok patrickh * * Copyright (c) 1990-1999 Microsoft Corporation \**************************************************************************/
typedef struct _ROW { LONG left; LONG right; } ROW, *PROW;
VOID vDIBSolidBlt( SURFACE *pdioDst, RECTL *prclDst, CLIPOBJ *pco, ULONG iColor, BOOL bCopy);
typedef VOID (*PFN_SOLIDBLT)(PRECTL,ULONG,PBYTE,LONG,ULONG,ULONG); typedef VOID (*PFN_SOLIDBLTROW)(PROW,ULONG,LONG,PBYTE,ULONG,LONG,ULONG);
VOID vSolidFillRect1(PRECTL,ULONG,PBYTE,LONG,ULONG,ULONG); VOID vSolidFillRect24(PRECTL,ULONG,PBYTE,LONG,ULONG,ULONG);
VOID vSolidXorRect1(PRECTL,ULONG,PBYTE,LONG,ULONG,ULONG); VOID vSolidXorRect24(PRECTL,ULONG,PBYTE,LONG,ULONG,ULONG);
VOID vSolidFillRow1(PROW,ULONG,LONG,PBYTE,ULONG,LONG,ULONG); VOID vSolidFillRow24(PROW,ULONG,LONG,PBYTE,ULONG,LONG,ULONG);
VOID vSolidXorRow1(PROW,ULONG,LONG,PBYTE,ULONG,LONG,ULONG); VOID vSolidXorRow24(PROW,ULONG,LONG,PBYTE,ULONG,LONG,ULONG);
VOID vDIBPatBlt( SURFACE *pdioDst, CLIPOBJ *pco, RECTL *prclDst, BRUSHOBJ *pbo, POINTL *pptlBrush, ULONG iMode);
#define DPA_PATCOPY 0
#define DPA_PATNOT 1
#define DPA_PATXOR 2
typedef struct _PATBLTFRAME { PVOID pvTrg; PVOID pvPat; LONG lDeltaTrg; LONG lDeltaPat; PVOID pvObj; // RECTL * or TRAPEZOID *
LONG xPat; LONG yPat; ULONG cxPat; ULONG cyPat; ULONG cMul; } PATBLTFRAME, *PPATBLTFRAME;
typedef VOID (*PFN_PATBLT)(PATBLTFRAME *); typedef VOID (*PFN_PATBLT2)(PATBLTFRAME *, INT); typedef VOID (*PFN_PATBLTROW)(PATBLTFRAME *, LONG, INT);
VOID vPatCpyRect8(PATBLTFRAME *); // Handles 8, 16, 24 and 32 bpp cases
VOID vPatNotRect8(PATBLTFRAME *); // Handles 8, 16, 24 and 32 bpp cases
VOID vPatXorRect8(PATBLTFRAME *); // Handles 8, 16, 24 and 32 bpp cases
VOID vPatCpyRow8(PATBLTFRAME *, LONG, INT); // Handles 8, 16, 24 and 32 bpp cases
VOID vPatNotRow8(PATBLTFRAME *, LONG, INT); // Handles 8, 16, 24 and 32 bpp cases
VOID vPatXorRow8(PATBLTFRAME *, LONG, INT); // Handles 8, 16, 24 and 32 bpp cases
typedef struct _FETCHFRAME { PVOID pvTrg; PVOID pvPat; ULONG xPat; ULONG cxPat; ULONG culFill; ULONG culWidth; ULONG culFillTmp; } FETCHFRAME, *PFETCHFRAME;
extern "C" VOID vFetchShiftAndCopy(FETCHFRAME *pff); // P, Aligned
extern "C" VOID vFetchAndCopy(FETCHFRAME *pff); // P, Non-Aligned
extern "C" VOID vFetchShiftNotAndCopy(FETCHFRAME *pff); // Pn, Aligned
extern "C" VOID vFetchNotAndCopy(FETCHFRAME *pff); // Pn, Non-Aligned
extern "C" VOID vFetchShiftAndMerge(FETCHFRAME *pff); // DPx, Aligned
extern "C" VOID vFetchAndMerge(FETCHFRAME *pff); // DPx, Non-Aligned
#if defined(_AMD64_) || defined(_X86_)
#define FETCHMISALIGNED(pff) *((ULONG *) ((PBYTE) (pff)->pvPat + (pff)->xPat))
#elif defined(_IA64_)
#define FETCHMISALIGNED(pff) *((ULONG UNALIGNED *) ((PBYTE) (pff)->pvPat + (pff)->xPat))
#else
//#error "No target Architecture"
#endif
VOID vDIBnPatBltSrccopy6x6(SURFACE*, CLIPOBJ *, RECTL *, BRUSHOBJ *, POINTL *, PFN_PATBLT2 ); VOID vPatCpyRect1_6x6 (PATBLTFRAME *, INT); VOID vDIBPatBltSrccopy8x8(SURFACE*, CLIPOBJ *, RECTL *, BRUSHOBJ *, POINTL *, PFN_PATBLT2); VOID vPatCpyRect1_8x8(PATBLTFRAME *, INT); VOID vPatCpyRect4_8x8(PATBLTFRAME *, INT); VOID vPatCpyRect8_8x8(PATBLTFRAME *, INT);
VOID vPatCpyRow4_8x8(PATBLTFRAME *, LONG,INT); VOID vPatCpyRow8_8x8(PATBLTFRAME *, LONG,INT);
PVOID pvGetEngRbrush(BRUSHOBJ *pbo);
enum { // various copy loop types
LEFT_MIDDLE_RIGHT = 0, LEFT_MIDDLE, MIDDLE_RIGHT, MIDDLE, LEFT_MIDDLE_RIGHT_SHORT, LEFT_MIDDLE_SHORT, MIDDLE_RIGHT_SHORT, MIDDLE_SHORT, LEFT_RIGHT, LEFT, };
VOID vPatternCopyLoop( PRECTL prcl, ULONG *pulTrgBase, PATBLTFRAME *ppbf, int ulFillType, ULONG ulRightPatMask, ULONG ulLeftPatMask, ULONG ulRightDestMask, ULONG ulLeftDestMask, LONG lMiddleDwords, LONG lDelta, LONG lDeltaX8, PULONG pulBasePat, PULONG pulPatMax );
|