/*==========================================================================; * * 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__ typedef struct _CACHEENTRY { LPDDRAWI_DDRAWSURFACE_INT pSurface; DWORD UsageStamp; } CACHEENTRY; typedef struct _DEFERREDCREATE { D3D8_CREATESURFACEDATA CreateData; struct _DEFERREDCREATE *pNext; } DEFERREDCREATE, *PDEFERREDCREATE; typedef struct _DDDEVICEHANDLE { LPDDRAWI_DIRECTDRAW_INT pDD; LPDDRAWI_DIRECTDRAW_INT pSwDD; DWLIST SurfaceHandleList; char szDeviceName[MAX_DRIVER_NAME]; BOOL bDeviceLost; D3DFORMAT DisplayFormatWithAlpha; D3DFORMAT DisplayFormatWithoutAlpha; UINT DriverLevel; struct _DDCONTEXT* pContext; struct _DDSURFACE* pSurfList; struct _DDDEVICEHANDLE* pLink; struct _PALETTEINFO** pPaletteHandleTable; DWORD NumPaletteHandleEntries; LPDIRECTDRAWPALETTE pDefaultPalette; BOOL bCanTextureSysmem; DWORD PID; DWORD PCIID; DWORD DriverVersionHigh; DWORD DriverVersionLow; CACHEENTRY* pCachedSurfaceTable; int NumCachedSurfaces; DWORD CacheUsageStamp; DWORD ForceFlagsOn; DWORD ForceFlagsOff; BOOL bLightweight; VOID* pSwInitFunction; BOOL bDP2Error; PDEFERREDCREATE pDeferList; D3DDEVTYPE DeviceType; } DDDEVICEHANDLE, * PDDDEVICEHANDLE; typedef struct _DDSURFACE { // NOTE: dwCookie must be the first element // since we need easy access to it from the // client and the thunk layer itself. DWORD dwCookie; DWORD dwFlags; union { LPDDRAWI_DDRAWSURFACE_INT pHeavy; struct _LIGHTWEIGHTSURFACE* pLight; } Surface; union { BYTE* fpVidMem; LPDDRAWI_DDRAWSURFACE_INT pTempHeavy; }; int Pitch; D3DPOOL Pool; D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Height; LPVOID pBits; DWORD LockFlags; RECT LockRect; PDDDEVICEHANDLE pDevice; struct _DDSURFACE* pNext; struct _DDSURFACE* pPrevious; int iSlicePitch; } DDSURFACE, * PDDSURFACE; #define DDSURFACE_LIGHTWEIGHT 0x00000001 #define DDSURFACE_HEAVYWEIGHT 0x00000002 #define DDSURFACE_ROOT 0x00000004 #define DDSURFACE_LOCKRECT 0x00000008 #define DDSURFACE_SOFTWARE 0x00000010 #define DDSURFACE_HAL 0x00000020 #define DDSURFACE_DX6HANDLE 0x00000040 #define DDSURFACE_CREATECOMPLETE 0x00000080 #define DDSURFACE_CREATEEX 0x00000100 #define DDSURFACE_SYSMEMALLOCATED 0x00000200 #define DDSURFACE_SYSMEMLOCK 0x00000400 #define DDSURFACE_DEFERCREATEEX 0x00000800 #define DDSURFACE_DEFERCREATETEXHANDLE 0x00001000 #define DDSURFACE_DUMMY 0x00002000 #define DDSURFACE_TREATASVIDMEM 0x00004000 // Flag to indicate that surf should // be treated as vid-mem for the // "do vid-mem surfaces exist" case typedef struct _DDCONTEXT { DWORD Context; void* pDPBuffer; // This is used to cache the pointer allocated at // context-create time // Clear emulation cache DWORD red_mask; DWORD red_scale; DWORD red_shift; DWORD green_mask; DWORD green_scale; DWORD green_shift; DWORD blue_mask; DWORD blue_scale; DWORD blue_shift; DWORD zmask_shift, stencilmask_shift; BOOL bDDSTargetIsPalettized; // true if 4 or 8 bit rendertarget DDDEVICEHANDLE* pDevice; // Used for defered creates DWORD dwFlags; DWORD dwTempContext; DWORD dwPID; DWORD ddrval; } DDCONTEXT, * PDDCONTEXT; #define DDCONTEXT_DEFER 0x00000001 #define DDCONTEXT_DEFEREDTEXTUREHANDLES 0x00000002 typedef struct _LIGHTWEIGHTSURFACE { // Members that go to the Lcl DWORD LclFlags; DWORD LclCaps1; ULONG_PTR LclReserved1; DWORD LclModeCreatedIn; DWORD LclBackBufferCount; // Members that go to the Gbl DWORD GblFlags; LONG GblPitch; DWORD GblWidth; ULONG_PTR GblReserved1; D3DFORMAT GblFormat; LPVMEMHEAP pGblVidMemHeap; FLATPTR fpGblVidMem; // Members that go to the More DWORD MoreCaps2; DWORD MoreCaps3; DWORD MoreCaps4; VOID* MoreRgjunc; // Members that go to the GblMore ULONG_PTR GblMoreDriverReserved; DWORD GblMoreContentsStamp; LPVOID pGblMoreUnswappedDriverReserved; FLATPTR fpGblMoreAliasOfVidMem; DWORD cGblMorePageUnlocks; // Unions to save memory union { FLATPTR fpGblMorePhysicalVidMem; // non-local vidmem FLATPTR fpGblMoreAliasedVidMem; // local vidmem DWORD MoreBytesAllocated; // sys mem }; union { DWORD MoreMipMapCount; // Mipmaps DWORD MoreFVF; // Exe buffers }; UINT CachedIndex; // ORed with INDEX_IN_USE if in use } LIGHTWEIGHTSURFACE, * PLIGHTWEIGHTSURFACE; #define INDEX_IN_USE 0x80000000 typedef struct _PALETTEINFO { DDSURFACE* pSurface; LPDIRECTDRAWPALETTE pDDPalette; PALETTEENTRY ColorTable[256]; } PALETTEINFO, * PPALETTEINFO; #define EXTRA_PALETTE_PADDING 25 #define IS_SOFTWARE_DRIVER(x) \ (((PDDDEVICEHANDLE)(x))->pSwDD != NULL) #define IS_SOFTWARE_DRIVER_SURFACE(x) \ (((PDDSURFACE)(x))->dwFlags & DDSURFACE_SOFTWARE) #define IS_SURFACE_LOOSABLE(x) \ (!IS_SOFTWARE_DRIVER_SURFACE(x) && \ ((((PDDSURFACE)(x))->Pool == D3DPOOL_LOCALVIDMEM) || \ (((PDDSURFACE)(x))->Pool == D3DPOOL_NONLOCALVIDMEM) || \ (((PDDSURFACE)(x))->Pool == D3DPOOL_MANAGED))) #define INDEX_ENTRY(x) \ ((x) & ~INDEX_IN_USE) #define GET_CACHED_ENTRY(x) \ (&((x)->pDevice->pCachedSurfaceTable[INDEX_ENTRY((x)->Surface.pLight->CachedIndex)])) #define GET_CACHED_LIGHTWEIGHT_INT(x) \ ((x)->pDevice->pCachedSurfaceTable[INDEX_ENTRY((x)->Surface.pLight->CachedIndex)].pSurface) // Function protoptypes extern void ConvertToOldFormat(LPDDPIXELFORMAT pOldFormat, D3DFORMAT NewFormat); extern void ConvertFromOldFormat(LPDDPIXELFORMAT pOldFormat, D3DFORMAT *pNewFormat); extern LPDDRAWI_DIRECTDRAW_INT SwDDICreateDirectDraw(void); extern void SwDDIMungeCaps (HINSTANCE hLibrary, HANDLE hDD, PD3D8_DRIVERCAPS pDriverCaps, PD3D8_CALLBACKS pCallbacks, LPDDSURFACEDESC, UINT*, VOID*); extern HRESULT SwDDICreateSurface(PD3D8_CREATESURFACEDATA pCreateSurface, DDSURFACEDESC2* pSurfDesc); extern void SwDDIAttachSurfaces (LPDDRAWI_DDRAWSURFACE_LCL pFrom, LPDDRAWI_DDRAWSURFACE_LCL pTo); extern void SwDDICreateSurfaceEx (LPDDRAWI_DIRECTDRAW_LCL pDrv, LPDDRAWI_DDRAWSURFACE_LCL pLcl); extern DWORD SwDDIDestroySurface (HANDLE hDD, PDDSURFACE pSurf, LPDDRAWI_DDRAWSURFACE_LCL pLcl); extern HRESULT SwDDILock (HANDLE hDD, PDDSURFACE pSurf, PD3D8_LOCKDATA pLockData, LPDDRAWI_DDRAWSURFACE_LCL pLcl); extern HRESULT SwDDIUnlock( HANDLE hDD, PDDSURFACE pSurf, D3D8_UNLOCKDATA* pUnlockData, LPDDRAWI_DDRAWSURFACE_LCL pLcl ); extern LPDDRAWI_DDRAWSURFACE_INT MapLightweightSurface(DDSURFACE* pSurf); extern void UnmapLightweightSurface(DDSURFACE* pSurf); extern HRESULT MapLegacyResult(HRESULT hr); #endif