|
|
/*==========================================================================;
* * Copyright (C) 1994-1999 Microsoft Corporation. All Rights Reserved. * * File: ddithunk.h * Content: header file used by the NT DDI thunk layer * History: * Date By Reason * ==== == ====== * 03-Dec-99 smac Created it * ***************************************************************************/
#ifndef __DDITHUNK_INCLUDED__
#define __DDITHUNK_INCLUDED__
// Entire file should not be used in Win9x builds
#ifndef WIN95
#define MAX_ZSTENCIL_FORMATS 40
typedef struct _DDSURFHANDLE *PDDSURFHANDLE; typedef struct _DEFERREDCREATE *PDEFERREDCREATE;
typedef struct _D3DCONTEXTHANDLE { HANDLE dwhContext; DWORD dwFlags; struct _DDDEVICEHANDLE* pDevice; DWORD dwPID; HANDLE hDeferHandle; struct _DDSURFHANDLE* pSurface; struct _DDSURFHANDLE* pDDSZ; } D3DCONTEXTHANDLE, * PD3DCONTEXTHANDLE;
#define D3DCONTEXT_DEFERCREATE 0x00000001
typedef struct _DDDEVICEHANDLE { HANDLE hDD; DWLIST SurfaceHandleList; char szDeviceName[MAX_DRIVER_NAME]; LPDDRAWI_DIRECTDRAW_LCL pDD; // Used by Refrast and RGB HEL
BOOL bDeviceLost; UINT DisplayUniqueness; PDDSURFHANDLE pSurfList; PD3DCONTEXTHANDLE pContext; D3DFORMAT DisplayFormatWithoutAlpha; D3DFORMAT DisplayFormatWithAlpha; UINT DisplayPitch; DWORD DriverLevel; RECT rcMonitor; HWND hLastWnd; LPRGNDATA pClipList; //result from pOrigClipList
LPRGNDATA pOrigClipList; //ClipList before ClipRgnToRect
VOID* pSwInitFunction; BOOL bIsWhistler; DWORD PCIID; DWORD DriverVersionHigh; DWORD DriverVersionLow; DWORD ForceFlagsOff; DWORD ForceFlagsOn; DWORD dwFlags; DWORD DDCaps; DWORD SVBCaps; HANDLE hLibrary; PDEFERREDCREATE pDeferList; D3DDEVTYPE DeviceType; } DDDEVICEHANDLE, * PDDDEVICEHANDLE; #define DDDEVICE_SUPPORTD3DBUF 0x01 //this device has D3DBuf callbacks
#define DDDEVICE_DP2ERROR 0x02 //A DP2 call failed
#define DDDEVICE_SUPPORTSUBVOLUMELOCK 0x04 //this device supports sub-volume texture lock
#define DDDEVICE_READY 0x08 //All vidmem surfs have been destroyed for this device
#define DDDEVICE_GETDRIVERINFO2 0x10 // Driver support the GetDriverInfo2 call
#define DDDEVICE_INITIALIZED 0x20 // The device has been initialized
#define DDHANDLE(x) \
(((PDDDEVICEHANDLE)(x))->hDD)
typedef struct _DDSURFHANDLE { // NOTE: dwCookie must be the first element
// since we need easy access to it from the
// client and the thunk layer itself.
DWORD dwCookie; // CreateSurfaceEx handle
HANDLE hSurface; // Kernel mode surface handle
D3DPOOL Pool; // Location of surface
D3DFORMAT Format; D3DRESOURCETYPE Type; // What kind of surface it is
ULONG_PTR fpVidMem; DWORD dwLinearSize; LONG lPitch; LPDDRAWI_DDRAWSURFACE_LCL pLcl; PDDDEVICEHANDLE pDevice; DWORD dwFlags; DWORD dwHeight; LONG lSlicePitch; // Offset to next slice for volume texture
struct _DDSURFHANDLE* pNext; struct _DDSURFHANDLE* pPrevious; UINT LockRefCnt; } DDSURFHANDLE, * PDDSURFHANDLE;
typedef struct _DEFERREDCREATE { D3D8_CREATESURFACEDATA CreateData; struct _DEFERREDCREATE *pNext; } DEFERREDCREATE, *PDEFERREDCREATE;
#define DDSURF_SYSMEMALLOCATED 0x00000001
#define DDSURF_DEFERCREATEEX 0x00000002
#define DDSURF_HAL 0x00000004
#define DDSURF_SOFTWARE 0x00000008
#define DDSURF_CREATECOMPLETE 0x00000010
#define DDSURF_TREATASVIDMEM 0x00000020 // Flag to indicate that surf should
// be treated as vid-mem for the
// "do vid-mem surfaces exist" case
#define IS_SOFTWARE_DRIVER(x) \
(((PDDDEVICEHANDLE)(x))->pDD != NULL)
#define IS_SOFTWARE_DRIVER_SURFACE(x) \
(((PDDSURFHANDLE)(x))->dwFlags & DDSURF_SOFTWARE)
#define IS_SURFACE_LOOSABLE(x) \
(!IS_SOFTWARE_DRIVER_SURFACE(x) && \ ((((PDDSURFHANDLE)(x))->Pool == D3DPOOL_LOCALVIDMEM) || \ (((PDDSURFHANDLE)(x))->Pool == D3DPOOL_NONLOCALVIDMEM)))
__inline HANDLE GetSurfHandle(HANDLE hSurface) { if(hSurface) { return(((PDDSURFHANDLE)hSurface)->hSurface); } return NULL; }
__inline D3DRESOURCETYPE GetSurfType(HANDLE hSurface) { if(hSurface) { return(((PDDSURFHANDLE)hSurface)->Type); } return (D3DRESOURCETYPE) 0; }
// Function protoptypes
extern LPDDRAWI_DIRECTDRAW_LCL SwDDICreateDirectDraw( void); extern void ConvertToOldFormat(LPDDPIXELFORMAT pOldFormat, D3DFORMAT NewFormat); extern void SwDDIMungeCaps (HINSTANCE hLibrary, HANDLE hDD, PD3D8_DRIVERCAPS pDriverCaps, PD3D8_CALLBACKS pCallbacks, LPDDSURFACEDESC, UINT*, VOID* pSwInitFunction); extern LPDDRAWI_DDRAWSURFACE_LCL SwDDIBuildHeavyWeightSurface (LPDDRAWI_DIRECTDRAW_LCL, PD3D8_CREATESURFACEDATA pCreateSurface, DD_SURFACE_LOCAL* pSurfaceLocal, DD_SURFACE_GLOBAL* pSurfaceGlobal, DD_SURFACE_MORE* pSurfaceMore, DWORD index); extern void SwDDICreateSurfaceEx(LPDDRAWI_DIRECTDRAW_LCL pDrv, LPDDRAWI_DDRAWSURFACE_LCL pLcl); extern void SwDDIAttachSurfaces (LPDDRAWI_DDRAWSURFACE_LCL pFrom, LPDDRAWI_DDRAWSURFACE_LCL pTo); extern HRESULT SwDDICreateSurface( PD3D8_CREATESURFACEDATA pCreateSurface, DD_SURFACE_LOCAL* pDDSurfaceLocal, DD_SURFACE_GLOBAL* pDDSurfaceGlobal, DD_SURFACE_MORE* pDDSurfaceMore); extern void AddUnknownZFormats( UINT NumFormats, DDPIXELFORMAT* pFormats, UINT* pNumUnknownFormats, D3DFORMAT* pUnknownFormats); extern DWORD SwDDILock( HANDLE hDD, PDDSURFHANDLE pSurf, DD_LOCKDATA* pLockData); extern DWORD SwDDIUnlock( HANDLE hDD, PDDSURFHANDLE pSurf, DD_UNLOCKDATA* pUnlockData); extern DWORD SwDDIDestroySurface( HANDLE hDD, PDDSURFHANDLE pSurf); extern HRESULT MapLegacyResult(HRESULT hr);
#endif // !WIN95
#endif // __DDITHUNK_INCLUDED__
|