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

726 lines
31 KiB
C

/*==========================================================================;
*
* Copyright (C) 1994-1999 Microsoft Corporation. All Rights Reserved.
*
* File: D3D8ddi.h
* Content: Defines the interface between DirectDraw / Direct3D and the
* OS specific layer (win32k.sys on NT and ddraw.dll on Win9X).
*@@BEGIN_MSINTERNAL
* History:
* Date By Reason
* ==== == ======
* 04-nov-99 smac initial implementation
*@@END_MSINTERNAL
*
***************************************************************************/
#ifndef __D3D8DDI_INCLUDED__
#define __D3D8DDI_INCLUDED__
/*
* These definitions are required to allow polymorphic structure members (i.e. those
* that are referred to both as DWORDs and as pointers) to resolve into a type
* of correct size to hold the largest of those two types (i.e. pointer) on 64 bit
* systems. For 32 bit environments, ULONG_PTR resolves to a DWORD.
*/
#ifndef MAXULONG_PTR
#define ULONG_PTR DWORD
#define PULONG_PTR LPDWORD
#endif //MAXULONG_PTR
// Caps:
// Note this struct is identical in content to D3DHAL_GLOBALDRIVERDATA.
// The only thing that has changed is the name of the texture list, reflecting
// the fact that this struct holds a list of DX8-style pixel format operations.
typedef struct _D3DD8_GLOBALDRIVERDATA {
DWORD dwSize; // Size of this structure
D3DDEVICEDESC_V1 hwCaps; // Capabilities of the hardware
DWORD dwNumVertices; // see following comment
DWORD dwNumClipVertices; // see following comment
DWORD GDD8NumSupportedFormatOps;
DDSURFACEDESC *pGDD8SupportedFormatOps;
} D3D8_GLOBALDRIVERDATA;
typedef struct _D3D8_DRIVERCAPS
{
D3DCAPS8 D3DCaps;
DWORD DisplayWidth; // Current display width
DWORD DisplayHeight; // Current display height
D3DFORMAT DisplayFormatWithoutAlpha; // Current display format
D3DFORMAT DisplayFormatWithAlpha; // Current display format
DWORD DisplayFrequency; // Current refresh rate
DWORD NLVCaps; // AGP->Video blt caps
DWORD SVBCaps; // Sys->Video blt caps
DWORD VSBCaps; // Video->Sys blt caps
DWORD SVBCaps2; // More Sys->Video blt caps
DWORD dwFlags;
DWORD GDD8NumSupportedFormatOps;
DDSURFACEDESC *pGDD8SupportedFormatOps;
DWORD KnownDriverFlags;
} D3D8_DRIVERCAPS, * PD3D8_DRIVERCAPS;
// Flags
#define DDIFLAG_D3DCAPS8 0x00000001
// Known driver flags
#define KNOWN_LIGHTWEIGHT 0x00000001 // Device can support lightweight surfaces
#define KNOWN_HWCURSOR 0x00000002 // Device can support hardware cursors in Hi-Res
#define KNOWN_MIPPEDCUBEMAPS 0x00000004 // Device can support mipped cubemaps
#define KNOWN_ZSTENCILDEPTH 0x00000010 // Device cannot support Z/Stencil depths different than the render target
#define KNOWN_HWCURSORLOWRES 0x00000020 // Device can support hardware cursors in LowRes
#define KNOWN_NOTAWINDOWEDBLTQUEUER 0x00000040 // Device has no drivers known to over-queue windowed presentation blts
#define KNOWN_D16_LOCKABLE 0x00000080 // Device supports lockable D16 format correctly
#define KNOWN_RTTEXTURE_R5G6B5 0x00000100 // RT+Tex formats that are supported
#define KNOWN_RTTEXTURE_X8R8G8B8 0x00000200
#define KNOWN_RTTEXTURE_A8R8G8B8 0x00000400
#define KNOWN_RTTEXTURE_A1R5G5B5 0x00000800
#define KNOWN_RTTEXTURE_A4R4G4B4 0x00001000
#define KNOWN_RTTEXTURE_X1R5G5B5 0x00002000
#define KNOWN_CANMISMATCHRT 0x00004000 // All given RT+Tex formats can be used regardless of current display depth.
// (If this bit is not set, then any known RT+Tex formats must match bitdepth of display)
/****************************************************************************
*
* D3D8 structures for Surface Object callbacks
*
***************************************************************************/
typedef struct _D3D8_BLTDATA
{
HANDLE hDD; // driver struct
HANDLE hDestSurface;// dest surface
RECTL rDest; // dest rect
HANDLE hSrcSurface; // src surface
RECTL rSrc; // src rect
DWORD dwFlags; // blt flags
DWORD dwROPFlags; // ROP flags (valid for ROPS only)
DDBLTFX bltFX; // blt FX
union
{
BOOL IsClipped; // clipped blt?
HWND hWnd; // Window Handle to clip against
};
RECTL rOrigDest; // unclipped dest rect
// (only valid if IsClipped)
RECTL rOrigSrc; // unclipped src rect
// (only valid if IsClipped)
DWORD dwRectCnt; // count of dest rects
// (only valid if IsClipped)
LPRECT prDestRects; // array of dest rects
DWORD dwAFlags; // DDABLT_ flags (for AlphaBlt DDI)
DDARGB ddargbScaleFactors; // RGBA scaling factors (AlphaBlt)
DWORD msLastPresent; // Time of last blt with DDBLT_COPYVSYNC
DWORD threshold; // Display Frequency related for adapter need
// for DDBLT_COPYVSYNC
HRESULT ddRVal; // return value
} D3D8_BLTDATA, * PD3D8_BLTDATA;
typedef struct _D3D8_LOCKDATA
{
HANDLE hDD; // driver struct
HANDLE hSurface; // surface struct
DWORD bHasRange; // range is valid
D3DRANGE range; // range for locking
DWORD bHasRect; // rArea is valid
RECTL rArea; // area being locked
DWORD bHasBox; // box is valid
D3DBOX box; // sub-box locking for volumes
LPVOID lpSurfData; // pointer to screen memory (return value)
long lPitch; // row pitch
long lSlicePitch;// slice pitch for volumes
DWORD dwFlags; // DDLOCK flags
} D3D8_LOCKDATA, * PD3D8_LOCKDATA;
typedef struct _D3D8_UNLOCKDATA
{
HANDLE hDD; // driver struct
HANDLE hSurface; // surface struct
} D3D8_UNLOCKDATA, * PD3D8_UNLOCKDATA;
typedef struct _D3D8_FLIPDATA
{
HANDLE hDD; // driver struct
HANDLE hSurfCurr; // current surface
HANDLE hSurfTarg; // target surface (to flip to)
HANDLE hSurfCurrLeft; // current surface
HANDLE hSurfTargLeft; // target surface (to flip to)
DWORD dwFlags; // flags
HRESULT ddRVal; // return value
} D3D8_FLIPDATA, * PD3D8_FLIPDATA;
typedef struct _D3D8_DESTROYSURFACEDATA
{
HANDLE hDD; // driver struct
HANDLE hSurface; // surface struct
HRESULT ddRVal; // return value
} D3D8_DESTROYSURFACEDATA, * PD3D8_DESTROYSURFACEDATA;
typedef struct _D3D8_ADDATTACHEDSURFACEDATA
{
HANDLE hDD; // driver struct
HANDLE hSurface; // surface struct
HANDLE hSurfAttached; // surface to attach
HRESULT ddRVal; // return value
} D3D8_ADDATTACHEDSURFACEDATA, * PD3D8_ADDATTACHEDSURFACEDATA;
typedef struct _D3D8_GETBLTSTATUSDATA
{
HANDLE hDD; // driver struct
HANDLE hSurface; // surface struct
DWORD dwFlags; // flags
HRESULT ddRVal; // return value
} D3D8_GETBLTSTATUSDATA, * PD3D8_GETBLTSTATUSDATA;
typedef struct _D3D8_GETFLIPSTATUSDATA
{
HANDLE hDD; // driver struct
HANDLE hSurface; // surface struct
DWORD dwFlags; // flags
HRESULT ddRVal; // return value
} D3D8_GETFLIPSTATUSDATA, * PD3D8_GETFLIPSTATUSDATA;
typedef struct _DDSURFACEINFO
{
DWORD cpWidth; // For linear, surface and volume
DWORD cpHeight; // For surface and volume
DWORD cpDepth; // For volumes
BYTE *pbPixels; // Pointer to Memory for sys-mem surface
LONG iPitch; // Row Pitch for sys-mem surface
LONG iSlicePitch; // Slice Pitch for sys-mem volume
HANDLE hKernelHandle; // Handle returned by the kernel
} DDSURFACEINFO, *LPDDSURFACEINFO;
typedef struct _D3D8_CREATESURFACEDATA
{
HANDLE hDD; // driver struct
LPDDSURFACEINFO pSList; // list of created surface objects
DWORD dwSCnt; // number of surfaces in SList
D3DRESOURCETYPE Type; // Type: MipMap, CubeMap, MipVolume, VertexBuffer, IndexBuffer, CommandBuffer
DWORD dwUsage; // Usage: Texture or RenderTarget
D3DPOOL Pool; // SysMem/VidMem/NonLocal
D3DFORMAT Format; // Format
D3DMULTISAMPLE_TYPE MultiSampleType;
DWORD dwFVF; // FVF format for vertex buffers
BOOL bTreatAsVidMem; // Set if Sys-Mem object was created with POOL_DEFAULT by user.
BOOL bReUse; // Set if are trying to create driver managed surfaces marked deferred
} D3D8_CREATESURFACEDATA, * PD3D8_CREATESURFACEDATA;
#define DDWAITVB_I_TESTVB 0x80000006l
typedef struct _D3D8_WAITFORVERTICALBLANKDATA
{
HANDLE hDD; // driver struct
DWORD dwFlags; // flags
DWORD bIsInVB; // is in vertical blank
HRESULT ddRVal; // return value
} D3D8_WAITFORVERTICALBLANKDATA, * PD3D8_WAITFORVERTICALBLANKDATA;
typedef struct _D3D8_SETMODEDATA
{
HANDLE hDD; // driver struct
DWORD dwWidth;
DWORD dwHeight;
D3DFORMAT Format;
DWORD dwRefreshRate;
BOOL bRestore;
HRESULT ddRVal; // return value
} D3D8_SETMODEDATA, * PD3D8_SETMODEDATA;
typedef struct _D3D8_GETSCANLINEDATA
{
HANDLE hDD; // driver struct
DWORD dwScanLine; // returned scan line
BOOL bInVerticalBlank;
HRESULT ddRVal; // return value
} D3D8_GETSCANLINEDATA, * PD3D8_GETSCANLINEDATA;
typedef struct _D3D8_SETEXCLUSIVEMODEDATA
{
HANDLE hDD; // driver struct
DWORD dwEnterExcl; // TRUE if entering exclusive mode, FALSE is leaving
HRESULT ddRVal; // return value
} D3D8_SETEXCLUSIVEMODEDATA, * PD3D8_SETEXCLUSIVEMODEDATA;
typedef struct _D3D8_FLIPTOGDISURFACEDATA
{
HANDLE hDD; // driver struct
DWORD dwToGDI; // TRUE if flipping to the GDI surface, FALSE if flipping away
HRESULT ddRVal; // return value
} D3D8_FLIPTOGDISURFACEDATA, * PD3D8_FLIPTOGDISURFACEDATA;
typedef struct _D3D8_SETCOLORKEYDATA
{
HANDLE hDD;
HANDLE hSurface;
DWORD ColorValue;
HRESULT ddRVal;
} D3D8_SETCOLORKEYDATA, * PD3D8_SETCOLORKEYDATA;
typedef struct _D3D8_GETAVAILDRIVERMEMORYDATA
{
HANDLE hDD; // driver struct
D3DPOOL Pool; // Pool they are interested in
DWORD dwUsage; // What the pool is used for
DWORD dwFree; // free memory for this kind of surface
HRESULT ddRVal; // return value
} D3D8_GETAVAILDRIVERMEMORYDATA, * PD3D8_GETAVAILDRIVERMEMORYDATA;
typedef struct _D3D8_GETDRIVERSTATEDATA
{
DWORD dwFlags; // Flags to indicate the data
// required
ULONG_PTR dwhContext; // d3d context
LPDWORD lpdwStates; // ptr to the state data
// to be filled in by the
// driver
DWORD dwLength;
HRESULT ddRVal; // return value
} D3D8_GETDRIVERSTATEDATA, * PD3D8_GETDRIVERSTATEDATA;
typedef struct _D3D8_DESTROYDDLOCALDATA
{
DWORD dwFlags;
HANDLE hDD;
HRESULT ddRVal;
} D3D8_DESTROYDDLOCALDATA, * PD3D8_DESTROYDDLOCALDATA;
typedef struct _D3D8_CONTEXTCREATEDATA
{
HANDLE hDD; // in: Driver struct
HANDLE hSurface; // in: Surface to be used as target
HANDLE hDDSZ; // in: Surface to be used as Z
DWORD dwPID; // in: Current process id
ULONG_PTR dwhContext; // in/out: Context handle
HRESULT ddrval;
// Private buffer information. To make it similar to
// D3DNTHAL_CONTEXTCREATEI
PVOID pvBuffer;
ULONG cjBuffer;
} D3D8_CONTEXTCREATEDATA, * PD3D8_CONTEXTCREATEDATA;
typedef struct _D3D8_CONTEXTDESTROYDATA
{
ULONG_PTR dwhContext; // in: Context handle
HRESULT ddrval; // out: Return value
} D3D8_CONTEXTDESTROYDATA, * PD3D8_CONTEXTDESTROYDATA;
typedef struct _D3D8_CONTEXTDESTROYALLDATA
{
DWORD dwPID; // in: Process id to destroy contexts for
HRESULT ddrval; // out: Return value
} D3D8_CONTEXTDESTROYALLDATA, * PD3D8_CONTEXTDESTROYALLDATA;
typedef struct _D3D8_RENDERSTATEDATA
{
ULONG_PTR dwhContext; // in: Context handle
DWORD dwOffset; // in: Where to find states in buffer
DWORD dwCount; // in: How many states to process
HANDLE hExeBuf; // in: Execute buffer containing data
HRESULT ddrval; // out: Return value
} D3D8_RENDERSTATEDATA, *PD3D8_RENDERSTATEDATA;
typedef struct _D3D8_RENDERPRIMITIVEDATA
{
ULONG_PTR dwhContext; // in: Context handle
DWORD dwOffset; // in: Where to find primitive data in buffer
DWORD dwStatus; // in/out: Condition branch status
HANDLE hExeBuf; // in: Execute buffer containing data
DWORD dwTLOffset; // in: Byte offset in lpTLBuf for start of vertex data
HANDLE hTLBuf; // in: Execute buffer containing TLVertex data
D3DINSTRUCTION diInstruction; // in: Primitive instruction
HRESULT ddrval; // out: Return value
} D3D8_RENDERPRIMITIVEDATA, *PD3D8_RENDERPRIMITIVEDATA;
typedef struct _D3D8_DRAWPRIMITIVES2DATA
{
ULONG_PTR dwhContext; // in: Context handle
DWORD dwFlags; // in: flags
DWORD dwVertexType; // in: vertex type
HANDLE hDDCommands; // in: vertex buffer command data
DWORD dwCommandOffset; // in: offset to start of vertex buffer commands
DWORD dwCommandLength; // in: number of bytes of command data
union
{ // based on D3DHALDP2_USERMEMVERTICES flag
HANDLE hDDVertex; // in: surface containing vertex data
LPVOID lpVertices; // in: User mode pointer to vertices
};
DWORD dwVertexOffset; // in: offset to start of vertex data
DWORD dwVertexLength; // in: number of vertices of vertex data
DWORD dwReqVertexBufSize; // in: number of bytes required for the next vertex buffer
DWORD dwReqCommandBufSize; // in: number of bytes required for the next commnand buffer
LPDWORD lpdwRStates; // in: Pointer to the array where render states are updated
union
{
DWORD dwVertexSize; // in: Size of each vertex in bytes
HRESULT ddrval; // out: return value
};
DWORD dwErrorOffset; // out: offset in lpDDCommands to first D3DHAL_COMMAND not handled
// Private data for the thunk
ULONG_PTR fpVidMem_CB; // out: fpVidMem for the command buffer
DWORD dwLinearSize_CB; // out: dwLinearSize for the command buffer
ULONG_PTR fpVidMem_VB; // out: fpVidMem for the vertex buffer
DWORD dwLinearSize_VB; // out: dwLinearSize for the vertex buffer
} D3D8_DRAWPRIMITIVES2DATA, *PD3D8_DRAWPRIMITIVES2DATA;
typedef struct _D3D8_VALIDATETEXTURESTAGESTATEDATA
{
ULONG_PTR dwhContext; // in: Context handle
DWORD dwFlags; // in: Flags, currently set to 0
ULONG_PTR dwReserved; //
DWORD dwNumPasses; // out: Number of passes the hardware
// can perform the operation in
HRESULT ddrval; // out: return value
} D3D8_VALIDATETEXTURESTAGESTATEDATA, * PD3D8_VALIDATETEXTURESTAGESTATEDATA;
typedef struct _D3D8_SCENECAPTUREDATA
{
ULONG_PTR dwhContext; // in: Context handle
DWORD dwFlag; // in: Indicates beginning or end
HRESULT ddrval; // out: Return value
} D3D8_SCENECAPTUREDATA, * PD3D8_SCENECAPTUREDATA;
typedef struct _D3D8_CLEAR2DATA
{
ULONG_PTR dwhContext; // in: Context handle
// dwFlags can contain D3DCLEAR_TARGET, D3DCLEAR_ZBUFFER, and/or D3DCLEAR_STENCIL
DWORD dwFlags; // in: surfaces to clear
DWORD dwFillColor; // in: Color value for rtarget
D3DVALUE dvFillDepth; // in: Depth value for Z buffer (0.0-1.0)
DWORD dwFillStencil; // in: value used to clear stencil buffer
LPD3DRECT lpRects; // in: Rectangles to clear
DWORD dwNumRects; // in: Number of rectangles
HRESULT ddrval; // out: Return value
// This is extra stuff passed down to the thunk layer for emulation
// of Clear for those drivers (DX6) that cant do it themselves.
HANDLE hDDS; // in: render target
HANDLE hDDSZ; // in: Z buffer
} D3D8_CLEAR2DATA, * PD3D8_CLEAR2DATA;
typedef struct _D3D8_CLEARDATA
{
ULONG_PTR dwhContext; // in: Context handle
// dwFlags can contain D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER
DWORD dwFlags; // in: surfaces to clear
DWORD dwFillColor; // in: Color value for rtarget
DWORD dwFillDepth; // in: Depth value for Z buffer
LPD3DRECT lpRects; // in: Rectangles to clear
DWORD dwNumRects; // in: Number of rectangles
HRESULT ddrval; // out: Return value
} D3D8_CLEARDATA, * PD3D8_CLEARDATA;
typedef struct _D3D8_SETRENDERTARGETDATA
{
ULONG_PTR dwhContext; // in: Context handle
HANDLE hDDS; // in: new render target
HANDLE hDDSZ; // in: new Z buffer
HRESULT ddrval; // out: Return value
BOOL bNeedUpdate;// out: Does runtime need to update
// driver state.
} D3D8_SETRENDERTARGETDATA, * PD3D8_SETRENDERTARGETDATA;
typedef struct _D3D8_SETPALETTEDATA
{
HANDLE hDD; // in: Driver struct
HANDLE hSurface; // in: Surface to be used as target
DWORD Palette; // in: Palette identifier
HRESULT ddRVal; // out: Return value
} D3D8_SETPALETTEDATA, * PD3D8_SETPALETTEDATA;
typedef struct _D3D8_UPDATEPALETTEDATA
{
HANDLE hDD; // in: Driver struct
DWORD Palette; // in: Palette identifier
LPPALETTEENTRY ColorTable; // in: 256 entry color table
HRESULT ddRVal; // out: Return value
} D3D8_UPDATEPALETTEDATA, * PD3D8_UPDATEPALETTEDATA;
//
// Driver callback table
//
DEFINE_GUID( GUID_D3D8Callbacks, 0xb497a1f3, 0x46cc, 0x4fc7, 0xb4, 0xf2, 0x32, 0xd8, 0x9e, 0xf9, 0xcc, 0x27);
typedef HRESULT (FAR PASCAL *PD3D8DDI_CREATESURFACE)(PD3D8_CREATESURFACEDATA);
typedef HRESULT (FAR PASCAL *PD3D8DDI_DESTROYSURFACE)(PD3D8_DESTROYSURFACEDATA);
typedef HRESULT (FAR PASCAL *PD3D8DDI_LOCK)(PD3D8_LOCKDATA);
typedef HRESULT (FAR PASCAL *PD3D8DDI_UNLOCK)(PD3D8_UNLOCKDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_CONTEXTCREATE)(PD3D8_CONTEXTCREATEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_CONTEXTDESTROY)(PD3D8_CONTEXTDESTROYDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_CONTEXTDESTROYALL)(PD3D8_CONTEXTDESTROYALLDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_RENDERSTATE) (PD3D8_RENDERSTATEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_RENDERPRIMITIVE) (PD3D8_RENDERPRIMITIVEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_DRAWPRIM2)(PD3D8_DRAWPRIMITIVES2DATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_GETDRIVERSTATE)(PD3D8_GETDRIVERSTATEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_VALIDATETEXTURESTAGESTATE)(PD3D8_VALIDATETEXTURESTAGESTATEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_SCENECAPTURE)(PD3D8_SCENECAPTUREDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_CLEAR2)(PD3D8_CLEAR2DATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_BLT)(PD3D8_BLTDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_GETSCANLINE)(PD3D8_GETSCANLINEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_WAITFORVERTICALBLANK)(PD3D8_WAITFORVERTICALBLANKDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_FLIP)(PD3D8_FLIPDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_GETBLTSTATUS)(PD3D8_GETBLTSTATUSDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_GETFLIPSTATUS)(PD3D8_GETFLIPSTATUSDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_GETAVAILDRIVERMEMORY)(PD3D8_GETAVAILDRIVERMEMORYDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_SETMODE)(PD3D8_SETMODEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_FLIPTOGDISURFACE)(PD3D8_FLIPTOGDISURFACEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_SETCOLORKEY)(PD3D8_SETCOLORKEYDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_SETEXCLUSIVEMODE)(PD3D8_SETEXCLUSIVEMODEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_DESTROYDDLOCAL)(PD3D8_DESTROYDDLOCALDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_SETRENDERTARGET)(PD3D8_SETRENDERTARGETDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_CLEAR)(PD3D8_CLEARDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_SETPALETTE)(PD3D8_SETPALETTEDATA);
typedef DWORD (FAR PASCAL *PD3D8DDI_UPDATEPALETTE)(PD3D8_UPDATEPALETTEDATA);
typedef struct _D3D8_CALLBACKS
{
PD3D8DDI_CREATESURFACE CreateSurface;
PD3D8DDI_DESTROYSURFACE DestroySurface;
PD3D8DDI_LOCK Lock;
PD3D8DDI_UNLOCK Unlock;
PD3D8DDI_CONTEXTCREATE CreateContext;
PD3D8DDI_CONTEXTDESTROY ContextDestroy;
PD3D8DDI_CONTEXTDESTROYALL ContextDestroyAll;
PD3D8DDI_RENDERSTATE RenderState;
PD3D8DDI_RENDERPRIMITIVE RenderPrimitive;
PD3D8DDI_DRAWPRIM2 DrawPrimitives2;
PD3D8DDI_GETDRIVERSTATE GetDriverState;
PD3D8DDI_VALIDATETEXTURESTAGESTATE ValidateTextureStageState;
PD3D8DDI_SCENECAPTURE SceneCapture;
PD3D8DDI_CLEAR2 Clear2;
PD3D8DDI_BLT Blt;
PD3D8DDI_GETSCANLINE GetScanLine;
PD3D8DDI_WAITFORVERTICALBLANK WaitForVerticalBlank;
PD3D8DDI_FLIP Flip;
PD3D8DDI_GETBLTSTATUS GetBltStatus;
PD3D8DDI_GETFLIPSTATUS GetFlipStatus;
PD3D8DDI_GETAVAILDRIVERMEMORY GetAvailDriverMemory;
PD3D8DDI_GETBLTSTATUS GetSysmemBltStatus;
PD3D8DDI_SETMODE SetMode;
PD3D8DDI_SETEXCLUSIVEMODE SetExclusiveMode;
PD3D8DDI_FLIPTOGDISURFACE FlipToGDISurface;
PD3D8DDI_SETCOLORKEY SetColorkey;
PD3D8DDI_DESTROYDDLOCAL DestroyDDLocal;
PD3D8DDI_SETRENDERTARGET SetRenderTarget;
PD3D8DDI_CLEAR Clear;
PD3D8DDI_SETPALETTE SetPalette;
PD3D8DDI_UPDATEPALETTE UpdatePalette;
LPVOID Reserved1; // For device alignment
LPVOID Reserved2; // For device alignment
} D3D8_CALLBACKS, * PD3D8_CALLBACKS;
//
// D3D8xxx function prototypes to replace the NT Ddxxxx prototypes from GDI32.
// On NT, these are internal functions, but on Win9X DDRAW.DLL must export
// them, so we will change the export names
//
#ifdef WIN95
#define D3D8CreateDirectDrawObject DdEntry1
#define D3D8QueryDirectDrawObject DdEntry2
#define D3D8DeleteDirectDrawObject DdEntry3
#define D3D8GetDC DdEntry4
#define D3D8ReleaseDC DdEntry5
#define D3D8ReenableDirectDrawObject DdEntry6
#define D3D8SetGammaRamp DdEntry7
#define D3D8BuildModeTable DdEntry8
#define D3D8IsDeviceLost DdEntry9
#define D3D8CanRestoreNow DdEntry10
#define D3D8RestoreDevice DdEntry11
#define D3D8DoVidmemSurfacesExist DdEntry12
#define D3D8SetMode DdEntry13
#define D3D8BeginProfile DdEntry14
#define D3D8EndProfile DdEntry15
#define D3D8GetMode DdEntry16
#define D3D8SetCooperativeLevel DdEntry17
#define D3D8IsDummySurface DdEntry18
#define D3D8LoseDevice DdEntry19
#define D3D8GetHALName DdEntry20
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef WIN95
VOID APIENTRY D3D8CreateDirectDrawObject(
LPGUID pGuid,
char* szDeviceName,
HANDLE* phDD,
D3DDEVTYPE Type,
HINSTANCE* phLibrary,
VOID* pInitFunction
);
#else
VOID APIENTRY D3D8CreateDirectDrawObject(
HDC hdc,
char* szDeviceName,
HANDLE* phDD,
D3DDEVTYPE Type,
HINSTANCE* phLibrary,
VOID* pInitFunction
);
#endif
BOOL APIENTRY D3D8QueryDirectDrawObject(
HANDLE hDD,
PD3D8_DRIVERCAPS DriverCaps,
PD3D8_CALLBACKS Callbacks,
char* DeviceName,
HINSTANCE hLibrary,
D3D8_GLOBALDRIVERDATA* pGblDriverData,
D3DHAL_D3DEXTENDEDCAPS* pExtendedCaps,
LPDDSURFACEDESC pTextureFormats,
LPDDPIXELFORMAT pZStencilFormats,
UINT* pcTextureFormats,
UINT* pcZStencilFormats
);
HDC APIENTRY D3D8GetDC(
HANDLE hSurface,
LPPALETTEENTRY pPalette
);
BOOL APIENTRY D3D8ReleaseDC(
HANDLE hSurface,
HDC hdc
);
BOOL APIENTRY D3D8ReenableDirectDrawObject(
HANDLE hDD,
BOOL* pbNewMode
);
BOOL APIENTRY D3D8SetGammaRamp(
HANDLE hDD,
HDC hdc,
LPVOID lpGammaRamp
);
VOID APIENTRY D3D8BuildModeTable(
char* pDeviceName,
D3DDISPLAYMODE* pModeTable,
DWORD* pNumEntries,
D3DFORMAT Unknown16,
HANDLE hProfile,
BOOL b16bppSupported,
BOOL b32bppSupported
);
BOOL APIENTRY D3D8IsDeviceLost(
HANDLE hDD
);
BOOL APIENTRY D3D8CanRestoreNow(
HANDLE hDD
);
VOID APIENTRY D3D8RestoreDevice(
HANDLE hDD
);
BOOL APIENTRY D3D8DoVidmemSurfacesExist(
HANDLE hDD
);
VOID APIENTRY D3D8DeleteDirectDrawObject(
HANDLE hDD
);
HANDLE APIENTRY D3D8BeginProfile(
char* pDeviceName
);
VOID APIENTRY D3D8EndProfile(
HANDLE Handle
);
DWORD APIENTRY D3D8GetMode(
HANDLE Handle,
char* pDeviceName,
D3DDISPLAYMODE* pMode,
D3DFORMAT Unknown16
);
DWORD APIENTRY D3D8SetMode(
HANDLE Handle,
char* pDeviceName,
UINT Width,
UINT Height,
UINT BPP,
UINT RefreshRate,
BOOL bRestore
);
DWORD APIENTRY D3D8SetCooperativeLevel(
HANDLE hDD,
HWND hWnd,
DWORD dwFlags );
VOID APIENTRY D3D8LoseDevice(
HANDLE hDD);
__inline DWORD D3D8GetDrawPrimHandle(HANDLE hSurface)
{
return *(DWORD *)(hSurface);
}
BOOL APIENTRY D3D8IsDummySurface(
HANDLE hSurface );
VOID APIENTRY D3D8GetHALName(
char* pDisplayName,
char *pDriverName );
#ifdef __cplusplus
}
#endif
typedef struct _D3D8_DEVICEDATA
{
D3D8_DRIVERCAPS DriverData;
D3D8_CALLBACKS Callbacks;
DWORD dwFlags;
char DriverName[MAX_DRIVER_NAME];
// RECT DeviceRect;
HDC hDC;
GUID Guid;
HANDLE hDD;
D3DDEVTYPE DeviceType;
HINSTANCE hLibrary;
struct _D3D8_DEVICEDATA* pLink;
// D3DDISPLAYMODE* pModeTable;
// DWORD dwNumModes;
} D3D8_DEVICEDATA, * PD3D8_DEVICEDATA;
#define DD_DISPLAYDRV 0x00000001
#define DD_GDIDRV 0x00000002
#endif