windows-nt/Source/XPSP1/NT/multimedia/directx/dxg/d3d8/fw/ddithunk.h
2020-09-26 16:20:57 +08:00

168 lines
7.2 KiB
C

/*==========================================================================;
*
* 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__