262 lines
11 KiB
C
262 lines
11 KiB
C
|
/******************************Module*Header*******************************\
|
||
|
* Module Name: mcd.h
|
||
|
*
|
||
|
* Common data structures for MCD driver interface.
|
||
|
*
|
||
|
* Copyright (c) 1996 Microsoft Corporation
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
|
||
|
#ifndef _MCD_H
|
||
|
#define _MCD_H
|
||
|
|
||
|
//
|
||
|
// Maximum MCD scanline size assumed by OpenGL generic implementation.
|
||
|
//
|
||
|
#define MCD_MAX_SCANLINE 4096
|
||
|
|
||
|
#define MCD_MEM_READY 0x0001
|
||
|
#define MCD_MEM_BUSY 0x0002
|
||
|
#define MCD_MEM_INVALID 0x0003
|
||
|
|
||
|
#define MCD_MAXMIPMAPLEVEL 12
|
||
|
|
||
|
typedef struct _MCDCONTEXT {
|
||
|
HDC hdc;
|
||
|
MCDHANDLE hMCDContext;
|
||
|
LONG ipfd;
|
||
|
LONG iLayer;
|
||
|
ULONG_PTR dwMcdWindow;
|
||
|
} MCDCONTEXT;
|
||
|
|
||
|
typedef struct _MCDRCINFOPRIV {
|
||
|
MCDRCINFO mri;
|
||
|
ULONG_PTR dwMcdWindow;
|
||
|
} MCDRCINFOPRIV;
|
||
|
|
||
|
typedef struct _GENMCDSWAP
|
||
|
{
|
||
|
struct GLGENwindowRec *pwnd;
|
||
|
WGLSWAP *pwswap;
|
||
|
} GENMCDSWAP;
|
||
|
|
||
|
typedef struct _GENMCDSTATE_ GENMCDSTATE;
|
||
|
|
||
|
//
|
||
|
// Shared memory allocated/freed via MCDAlloc and MCDFree, respectively.
|
||
|
//
|
||
|
|
||
|
typedef struct _GENMCDBUF_ {
|
||
|
PVOID pv;
|
||
|
ULONG size;
|
||
|
HANDLE hmem;
|
||
|
} GENMCDBUF;
|
||
|
|
||
|
//
|
||
|
// The GENMCDSURFACE retains information about the state of the MCD buffers
|
||
|
// or surface. It exists per-WNDOBJ (window).
|
||
|
//
|
||
|
|
||
|
typedef struct _GENMCDSURFACE_ {
|
||
|
GENMCDBUF McdColorBuf; // Color and depth span buffers used to
|
||
|
GENMCDBUF McdDepthBuf; // read/write MCD buffers if not directly
|
||
|
// accessible.
|
||
|
|
||
|
ULONG *pDepthSpan; // Interchange buffer to present z-span in
|
||
|
// generic format. If McdDepthBuf is 32-bit,
|
||
|
// then this points to it (reformatted in
|
||
|
// place). If 16-bit, then the interchange
|
||
|
// buffer is allocated separately.
|
||
|
|
||
|
ULONG depthBitMask;
|
||
|
|
||
|
struct GLGENwindowRec *pwnd; // WNDOBJ this surface is bound to.
|
||
|
|
||
|
} GENMCDSURFACE;
|
||
|
|
||
|
//
|
||
|
// The GENMCDSTATE retains information about the state of the MCD context.
|
||
|
// It exists per-context.
|
||
|
//
|
||
|
|
||
|
typedef struct _GENMCDSTATE_ {
|
||
|
MCDCONTEXT McdContext; // Created via MCDCreateContext.
|
||
|
// NOTE: This must be the first field.
|
||
|
|
||
|
GENMCDSURFACE *pMcdSurf; // pointer to MCD surface
|
||
|
|
||
|
GENMCDBUF *pMcdPrimBatch; // Current shared memory window for batching
|
||
|
// primitives
|
||
|
|
||
|
GENMCDBUF McdCmdBatch; // Used to pass state to MCD driver.
|
||
|
|
||
|
ULONG mcdDirtyState; // Set of flags that tracks when MCD state
|
||
|
// is out of sync (i.e., "dirty") with respect
|
||
|
// to generic state.
|
||
|
|
||
|
ULONG *pDepthSpan; // Cached copy of the one in GENMCDSURFACE.
|
||
|
|
||
|
// Fallback z-test span function.
|
||
|
void *softZSpanFuncPtr;
|
||
|
|
||
|
GENMCDBUF McdBuf1; // If using DMA, we swap pMcdPrimBatch
|
||
|
GENMCDBUF McdBuf2; // between these two buffers. Otherwise,
|
||
|
// only McdBuf1 is initialized.
|
||
|
|
||
|
MCDRCINFO McdRcInfo; // Cache a copy of the MCD RC info structure.
|
||
|
|
||
|
MCDRECTBUFFERS McdBuffers; // Describes accessibility of MCD buffers.
|
||
|
|
||
|
ULONG mcdFlags; // Misc. other state flags.
|
||
|
|
||
|
MCDPIXELFORMAT McdPixelFmt; // Cache a copy of the MCD pixel format.
|
||
|
|
||
|
HANDLE hDdColor; // Kernel-mode handles for DirectDraw
|
||
|
HANDLE hDdDepth;
|
||
|
} GENMCDSTATE;
|
||
|
|
||
|
//
|
||
|
// Misc. flags for GENMCDSTATE.mcdFlags:
|
||
|
//
|
||
|
|
||
|
#define MCD_STATE_FORCEPICK 0x00000001
|
||
|
#define MCD_STATE_FORCERESIZE 0x00000002
|
||
|
|
||
|
//
|
||
|
// Dirty state flags for GENMCDSTATE.mcdDirtyState:
|
||
|
//
|
||
|
|
||
|
#define MCD_DIRTY_ENABLES 0x00000001
|
||
|
#define MCD_DIRTY_TEXTURE 0x00000002
|
||
|
#define MCD_DIRTY_FOG 0x00000004
|
||
|
#define MCD_DIRTY_SHADEMODEL 0x00000008
|
||
|
#define MCD_DIRTY_POINTDRAW 0x00000010
|
||
|
#define MCD_DIRTY_LINEDRAW 0x00000020
|
||
|
#define MCD_DIRTY_POLYDRAW 0x00000040
|
||
|
#define MCD_DIRTY_ALPHATEST 0x00000080
|
||
|
#define MCD_DIRTY_DEPTHTEST 0x00000100
|
||
|
#define MCD_DIRTY_BLEND 0x00000200
|
||
|
#define MCD_DIRTY_LOGICOP 0x00000400
|
||
|
#define MCD_DIRTY_FBUFCTRL 0x00000800
|
||
|
#define MCD_DIRTY_LIGHTMODEL 0x00001000
|
||
|
#define MCD_DIRTY_HINTS 0x00002000
|
||
|
#define MCD_DIRTY_VIEWPORT 0x00004000
|
||
|
#define MCD_DIRTY_SCISSOR 0x00008000
|
||
|
#define MCD_DIRTY_CLIPCTRL 0x00010000
|
||
|
#define MCD_DIRTY_STENCILTEST 0x00020000
|
||
|
#define MCD_DIRTY_PIXELSTATE 0x00040000
|
||
|
#define MCD_DIRTY_TEXENV 0x00080000
|
||
|
#define MCD_DIRTY_TEXTRANSFORM 0x00100000
|
||
|
#define MCD_DIRTY_TEXGEN 0x00200000
|
||
|
#define MCD_DIRTY_MATERIAL 0x00400000
|
||
|
#define MCD_DIRTY_LIGHTS 0x00800000
|
||
|
#define MCD_DIRTY_COLORMATERIAL 0x01000000
|
||
|
|
||
|
#define MCD_DIRTY_RENDERSTATE 0x0003ffff
|
||
|
#define MCD_DIRTY_ALL 0x01ffffff
|
||
|
|
||
|
|
||
|
// Internal driver information structure
|
||
|
typedef struct _MCDDRIVERINFOI {
|
||
|
MCDDRIVERINFO mcdDriverInfo;
|
||
|
MCDDRIVER mcdDriver;
|
||
|
} MCDDRIVERINFOI;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Return values for MCDLock.
|
||
|
// Zero must be used for the system error because it may be returned
|
||
|
// from ExtEscape if the system is unable to make the escape call.
|
||
|
//
|
||
|
#define MCD_LOCK_SYSTEM_ERROR 0
|
||
|
#define MCD_LOCK_BUSY 1
|
||
|
#define MCD_LOCK_TAKEN 2
|
||
|
|
||
|
BOOL APIENTRY MCDGetDriverInfo(HDC hdc, struct _MCDDRIVERINFOI *pMCDDriverInfo);
|
||
|
LONG APIENTRY MCDDescribeMcdPixelFormat(HDC hdc, LONG iPixelFormat,
|
||
|
MCDPIXELFORMAT *pMcdPixelFmt);
|
||
|
LONG APIENTRY MCDDescribePixelFormat(HDC hdc, LONG iPixelFormat,
|
||
|
LPPIXELFORMATDESCRIPTOR ppfd);
|
||
|
BOOL APIENTRY MCDCreateContext(MCDCONTEXT *pMCDContext,
|
||
|
MCDRCINFOPRIV *pDrvRcInfo,
|
||
|
struct _GLSURF *pgsurf,
|
||
|
int ipfd,
|
||
|
ULONG flags);
|
||
|
BOOL APIENTRY MCDDeleteContext(MCDCONTEXT *pMCDContext);
|
||
|
UCHAR * APIENTRY MCDAlloc(MCDCONTEXT *pMCDContext, ULONG numBytes, MCDHANDLE *pMCDHandle,
|
||
|
ULONG flags);
|
||
|
BOOL APIENTRY MCDFree(MCDCONTEXT *pMCDContext, VOID *pMCDMem);
|
||
|
VOID APIENTRY MCDBeginState(MCDCONTEXT *pMCDContext, VOID *pMCDMem);
|
||
|
BOOL APIENTRY MCDFlushState(VOID *pMCDMem);
|
||
|
BOOL APIENTRY MCDAddState(VOID *pMCDMem, ULONG stateToChange,
|
||
|
ULONG stateValue);
|
||
|
BOOL APIENTRY MCDAddStateStruct(VOID *pMCDMem, ULONG stateToChange,
|
||
|
VOID *pStateValue, ULONG stateValueSize);
|
||
|
BOOL APIENTRY MCDSetViewport(MCDCONTEXT *pMCDContext, VOID *pMCDMem,
|
||
|
MCDVIEWPORT *pMCDViewport);
|
||
|
BOOL APIENTRY MCDSetScissorRect(MCDCONTEXT *pMCDContext, RECTL *pRect,
|
||
|
BOOL bEnabled);
|
||
|
ULONG APIENTRY MCDQueryMemStatus(VOID *pMCDMem);
|
||
|
PVOID APIENTRY MCDProcessBatch(MCDCONTEXT *pMCDContext, VOID *pMCDMem,
|
||
|
ULONG batchSize, VOID *pMCDFirstCmd,
|
||
|
int cExtraSurfaces,
|
||
|
struct IDirectDrawSurface **pddsExtra);
|
||
|
BOOL APIENTRY MCDReadSpan(MCDCONTEXT *pMCDContext, VOID *pMCDMem,
|
||
|
ULONG x, ULONG y, ULONG numPixels, ULONG type);
|
||
|
BOOL APIENTRY MCDWriteSpan(MCDCONTEXT *pMCDContext, VOID *pMCDMem,
|
||
|
ULONG x, ULONG y, ULONG numPixels, ULONG type);
|
||
|
BOOL APIENTRY MCDClear(MCDCONTEXT *pMCDContext, RECTL rect, ULONG buffers);
|
||
|
BOOL APIENTRY MCDSwap(MCDCONTEXT *pMCDContext, ULONG flags);
|
||
|
BOOL APIENTRY MCDGetBuffers(MCDCONTEXT *pMCDContext,
|
||
|
MCDRECTBUFFERS *pMCDBuffers);
|
||
|
BOOL APIENTRY MCDAllocBuffers(MCDCONTEXT *pMCDContext, RECTL *pWndRect);
|
||
|
BOOL APIENTRY MCDBindContext(MCDCONTEXT *pMCDContext, HDC hdc,
|
||
|
struct GLGENwindowRec *pwnd);
|
||
|
BOOL APIENTRY MCDSync(MCDCONTEXT *pMCDContext);
|
||
|
MCDHANDLE APIENTRY MCDCreateTexture(MCDCONTEXT *pMCDContext,
|
||
|
MCDTEXTUREDATA *pTexData,
|
||
|
ULONG flags,
|
||
|
VOID *pSurface);
|
||
|
BOOL APIENTRY MCDDeleteTexture(MCDCONTEXT *pMCDContext, MCDHANDLE hTex);
|
||
|
BOOL APIENTRY MCDUpdateSubTexture(MCDCONTEXT *pMCDContext,
|
||
|
MCDTEXTUREDATA *pTexData, MCDHANDLE hTex,
|
||
|
ULONG lod, RECTL *pRect);
|
||
|
BOOL APIENTRY MCDUpdateTexturePalette(MCDCONTEXT *pMCDContext,
|
||
|
MCDTEXTUREDATA *pTexData, MCDHANDLE hTex,
|
||
|
ULONG start, ULONG numEntries);
|
||
|
BOOL APIENTRY MCDUpdateTexturePriority(MCDCONTEXT *pMCDContext,
|
||
|
MCDTEXTUREDATA *pTexData,
|
||
|
MCDHANDLE hTex);
|
||
|
BOOL APIENTRY MCDUpdateTextureState(MCDCONTEXT *pMCDContext,
|
||
|
MCDTEXTUREDATA *pTexData,
|
||
|
MCDHANDLE hTex);
|
||
|
ULONG APIENTRY MCDTextureStatus(MCDCONTEXT *pMCDContext, MCDHANDLE hTex);
|
||
|
ULONG APIENTRY MCDTextureKey(MCDCONTEXT *pMCDContext, MCDHANDLE hTex);
|
||
|
BOOL APIENTRY MCDDescribeMcdLayerPlane(HDC hdc, LONG iPixelFormat,
|
||
|
LONG iLayerPlane,
|
||
|
MCDLAYERPLANE *pMcdPixelFmt);
|
||
|
BOOL APIENTRY MCDDescribeLayerPlane(HDC hdc, LONG iPixelFormat,
|
||
|
LONG iLayerPlane,
|
||
|
LPLAYERPLANEDESCRIPTOR ppfd);
|
||
|
LONG APIENTRY MCDSetLayerPalette(HDC hdc, LONG iLayerPlane, BOOL bRealize,
|
||
|
LONG cEntries, COLORREF *pcr);
|
||
|
ULONG APIENTRY MCDDrawPixels(MCDCONTEXT *pMCDContext, ULONG width, ULONG height,
|
||
|
ULONG format, ULONG type, VOID *pPixels, BOOL packed);
|
||
|
ULONG APIENTRY MCDReadPixels(MCDCONTEXT *pMCDContext, LONG x, LONG y, ULONG width, ULONG height,
|
||
|
ULONG format, ULONG type, VOID *pPixels);
|
||
|
ULONG APIENTRY MCDCopyPixels(MCDCONTEXT *pMCDContext, LONG x, LONG y, ULONG width, ULONG height,
|
||
|
ULONG type);
|
||
|
ULONG APIENTRY MCDPixelMap(MCDCONTEXT *pMCDContext, ULONG mapType, ULONG mapSize,
|
||
|
VOID *pMap);
|
||
|
void APIENTRY MCDDestroyWindow(HDC hdc, ULONG_PTR dwMcdWindow);
|
||
|
int APIENTRY MCDGetTextureFormats(MCDCONTEXT *pMCDContext, int nFmts,
|
||
|
struct _DDSURFACEDESC *pddsd);
|
||
|
ULONG APIENTRY MCDLock(MCDCONTEXT *pMCDContext);
|
||
|
VOID APIENTRY MCDUnlock(MCDCONTEXT *pMCDContext);
|
||
|
|
||
|
#ifdef MCD95
|
||
|
typedef LPCRITICAL_SECTION (APIENTRY *MCDGETMCDCRITSECTFUNC)(void);
|
||
|
#endif
|
||
|
|
||
|
#endif
|