windows-nt/Source/XPSP1/NT/drivers/video/ms/modex/disp/driver.h
2020-09-26 16:20:57 +08:00

129 lines
5.8 KiB
C

/******************************Module*Header*******************************\
* Module Name: driver.h
*
* Contains prototypes for the display driver.
*
* Copyright (c) 1992-1995 Microsoft Corporation
\**************************************************************************/
typedef struct _PDEV PDEV; // Handy forward declaration
//////////////////////////////////////////////////////////////////////
// Miscellaneous shared stuff
#define DLL_NAME L"modex" // Name of the DLL in UNICODE
#define STANDARD_DEBUG_PREFIX "ModeX: " // All debug output is prefixed
// by this string
#define ALLOC_TAG 'xdmD' // Dmdx
// Four byte tag (characters in
// reverse order) used for
// memory allocations
#define DRIVER_EXTRA_SIZE 0 // Size of the DriverExtra information in the
// DEVMODE structure
#define NUM_FLIP_BUFFERS 5 // Total number of flip buffers that we'll tell
// DirectDraw we have, including the primary
// surface buffer
/////////////////////////////////////////////////////////////////////////
// Palette stuff
BOOL bEnablePalette(PDEV*);
VOID vDisablePalette(PDEV*);
VOID vAssertModePalette(PDEV*, BOOL);
BOOL bInitializePalette(PDEV*, DEVINFO*);
VOID vUninitializePalette(PDEV*);
#define MAX_CLUT_SIZE (sizeof(VIDEO_CLUT) + (sizeof(ULONG) * 256))
/////////////////////////////////////////////////////////////////////////
// DirectDraw stuff
typedef struct _FLIPRECORD
{
FLATPTR fpFlipFrom; // Surface we last flipped from
LONGLONG liFlipTime; // Time at which last flip
// occured
LONGLONG liFlipDuration; // Precise amount of time it
// takes from vblank to vblank
BOOL bHaveEverCrossedVBlank; // True if we noticed that we
// switched from inactive to
// vblank
BOOL bWasEverInDisplay; // True if we ever noticed that
// we were inactive
BOOL bFlipFlag; // True if we think a flip is
// still pending
} FLIPRECORD;
BOOL bEnableDirectDraw(PDEV*);
VOID vDisableDirectDraw(PDEV*);
VOID vAssertModeDirectDraw(PDEV*, BOOL);
////////////////////////////////////////////////////////////////////////
// The Physical Device data structure
typedef struct _PDEV
{
ULONG iBitmapFormat; // BMF_8BPP (our current colour depth)
UCHAR* pjBase; // Mapped IO port base for this PDEV
LONG lVgaDelta; // VGA screen stride
BYTE* pjVga; // Points to VGA's base screen address
ULONG cjVgaOffset; // Offset from pjVga to current flip
// buffer
ULONG iVgaPage; // Page number of current flip buffer
ULONG cVgaPages; // Count of flip buffers
ULONG cjVgaPageSize; // Size of a flip buffer
BYTE* pjScreen; // Points to shadow buffer
LONG lScreenDelta; // Shadow buffer stride
FLATPTR fpScreenOffset; // Offset to current DirectDraw flip
// buffer; if zero, primary GDI
// surface is visible
LONG cxScreen; // Visible screen width
LONG cyScreen; // Visible screen height
LONG cxMemory; // Shadow buffer width
LONG cyMemory; // Shadow buffer height
HANDLE hDriver; // Handle to \Device\Screen
HDEV hdevEng; // Engine's handle to PDEV
HSURF hsurfScreen; // Engine's handle to screen surface
HSURF hsurfShadow; // Engine's handle to our shadow buffer
FLONG flHooks; // What we're hooking from GDI
ULONG ulMode; // Mode the mini-port driver is in.
SURFOBJ* pso; // DIB copy of our shaodw surface to
// which we have GDI draw everything
LONG cLocks; // Number of current DirectDraw
// locks
RECTL rclLock; // Bounding box of all current Direct-
// Draw locks
////////// Palette stuff:
PALETTEENTRY* pPal; // The palette if palette managed
HPALETTE hpalDefault; // GDI handle to the default palette.
FLONG flRed; // Red mask for 16/32bpp bitfields
FLONG flGreen; // Green mask for 16/32bpp bitfields
FLONG flBlue; // Blue mask for 16/32bpp bitfields
ULONG cPaletteShift; // number of bits the 8-8-8 palette must
// be shifted by to fit in the hardware
/////////// DirectDraw stuff:
FLIPRECORD flipRecord; // Used to track vertical blank status
ULONG cDwordsPerPlane; // Total number of dwords per plane
} PDEV, *PPDEV;
/////////////////////////////////////////////////////////////////////////
// Miscellaneous prototypes:
VOID vUpdate(PDEV*, RECTL*, CLIPOBJ*);
BOOL bAssertModeHardware(PDEV*, BOOL);
BOOL bEnableHardware(PDEV*);
VOID vDisableHardware(PDEV*);