4028 lines
184 KiB
C
4028 lines
184 KiB
C
/*==========================================================================;
|
|
*
|
|
* Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: ddrawi.h
|
|
* Content: DirectDraw internal header file
|
|
* Used by DirectDraw and by the display drivers.
|
|
*@@BEGIN_DDKSPLIT
|
|
* See ddrawpr.h for all information private to DirectDraw.
|
|
* History:
|
|
* Date By Reason
|
|
* ==== == ======
|
|
* 25-dec-94 craige initial implementation
|
|
* 06-jan-95 craige video memory manager integration
|
|
* 13-jan-95 craige re-worked to updated spec + ongoing work
|
|
* 21-jan-95 craige made 32-bit + ongoing work
|
|
* 31-jan-95 craige and even more ongoing work...
|
|
* 04-feb-95 craige performance tuning, ongoing work
|
|
* 22-feb-95 craige use critical sections on Win95
|
|
* 02-mar-95 craige work work work
|
|
* 06-mar-95 craige HEL integration
|
|
* 11-mar-95 craige palette stuff
|
|
* 17-mar-95 craige COM interface
|
|
* 19-mar-95 craige use HRESULTs, use same process list handling for
|
|
* driver objects as surface and palette
|
|
* 20-mar-95 craige new CSECT work
|
|
* 23-mar-95 craige attachment work
|
|
* 27-mar-95 craige linear or rectangular vidmem
|
|
* 28-mar-95 craige RGBQUAD -> PALETTEENTRY; other palette stuff
|
|
* 29-mar-95 craige removed Eitherxxx caps from DIRECTDRAW
|
|
* 31-mar-95 craige use critical sections with palettes
|
|
* 04-apr-95 craige palette tweaks
|
|
* 06-apr-95 craige split out process list stuff
|
|
* 10-apr-95 craige bug 3,16 - palette issues
|
|
* 13-apr-95 craige EricEng's little contribution to our being late
|
|
* 06-may-95 craige use driver-level csects only
|
|
* 09-may-95 craige escape call to get 32-bit DLL
|
|
* 14-may-95 craige cleaned out obsolete junk
|
|
* 15-may-95 craige made separate VMEM struct for rect & linear
|
|
* 24-may-95 kylej removed obsolete ZOrder variables
|
|
* 24-may-95 craige removed dwOrigNumHeaps
|
|
* 28-may-95 craige cleaned up HAL: added GetBltStatus;GetFlipStatus;
|
|
* GetScanLine
|
|
* 02-jun-95 craige added PROCESS_LIST2 to DIRECTDRAW object; removed
|
|
* hWndPal from DIRECTDRAW object; added lpDDSurface
|
|
* to DIRECTDRAWPALETTE object
|
|
* 06-jun-95 craige maintain entire primary surface in DIRECTDRAW object
|
|
* 07-jun-95 craige moved DCLIST to PROCESSLIST
|
|
* 10-jun-95 craige split out vmemmgr stuff
|
|
* 12-jun-95 craige new process list stuff
|
|
* 16-jun-95 craige removed fpVidMemOrig; new surface structure
|
|
* 20-jun-95 kylej added is_excl field to DDHAL_CREATEPALETTEDATA struct
|
|
* 21-jun-95 craige added DirectDrawClipper object; removed clipping
|
|
* info from surface object
|
|
* 22-jun-95 craige more clipping work
|
|
* 25-jun-95 craige one ddraw mutex
|
|
* 26-jun-95 craige reorganized surface structure
|
|
* 27-jun-95 craige added dwModeCreatedIn to surface
|
|
* 30-jun-95 kylej removed lpPrimarySurface, dwZDepth, dwAlphaDepth
|
|
* from direct draw object. Modified some surface and
|
|
* direct draw object flags.
|
|
* 01-jul-95 craige hide composition & streaming stuff
|
|
* 02-jul-95 craige added extra reserved field for HEL
|
|
* 03-jul-95 craige YEEHAW: new driver struct; added pUnkOuter to all objects
|
|
* 09-jul-95 craige track win16lock info in driver struct; added
|
|
* DDHAL_DRIVER_NOCKEYHW
|
|
* 10-jul-95 craige support SetOverlayPosition
|
|
* 13-jul-95 craige removed old junk from ddraw object; added new mode stuff;
|
|
* changed Get/SetOverlayPosition to use longs;
|
|
* fixed duplicate flag in DDRAWIPAL_xxx
|
|
* 14-jul-95 craige added VIDMEM_ISHEAP
|
|
* 20-jul-95 craige internal reorg to prevent thunking during modeset;
|
|
* palette bugs
|
|
* 22-jul-95 craige bug 230 - unsupported starting modes
|
|
* 29-jul-95 toddla remove unused palette stuff
|
|
* 31-jul-95 toddla added DD_HAL_VERSION
|
|
* 01-aug-95 toddla added dwPDevice to DDRAWI_DIRECTDRAW_GBL
|
|
* 10-aug-95 craige added VALID_ALIGNMENT
|
|
* 13-aug-95 craige internal/external version of DD_HAL_VERSION
|
|
* 21-aug-95 craige mode X support
|
|
* 27-aug-95 craige bug 742: added DDRAWIPAL_ALLOW256
|
|
* 08-nov-95 colinmc added DDRAWIPAL flags to support 1, 2 and 4 bit
|
|
* RGB and indexed palettes
|
|
* 21-nov-95 colinmc made Direct3D a queryable interface off DirectDraw
|
|
* 23-nov-95 colinmc made Direct3D textures and devices queryable off
|
|
* DirectDraw surfaces
|
|
* 09-dec-95 colinmc execute buffer support
|
|
* 12-dec-95 colinmc shared back and z-buffer support (run away, run away...)
|
|
* 22-dec-95 colinmc Direct3D support no longer conditional
|
|
* 02-jan-96 kylej New interface structures, no vtbl in local objects
|
|
* 10-jan-96 colinmc Aggregate IUnknowns of surfaces now maintained as
|
|
* list
|
|
* 18-jan-96 jeffno Changed free entries in DDRAW_GBL and SURFACE_LCL to NT
|
|
* kernel-mode handles
|
|
* 29-jan-96 colinmc Aggregated IUnknowns now stored in additional
|
|
* surface structure
|
|
* 09-feb-96 colinmc Addition of lost surface flag to local surface
|
|
* objects
|
|
* 17-feb-96 colinmc Fixed execute buffer size restriction problem
|
|
* 01-mar-96 kylej Change DDCAPS size
|
|
* 03-mar-96 colinmc Hack to keep interim drivers working
|
|
* 13-mar-96 craige Bug 7528: hw that doesn't have modex
|
|
* 14-mar-96 colinmc Class factory support for clippers
|
|
* 24-mar-96 colinmc Bug 14321: not possible to specify back buffer and
|
|
* mip-map count in a single call
|
|
* 13-apr-96 colinmc Bug 17736: no notification to driver of when GDI
|
|
* frame buffer is being displayed
|
|
* 16-apr-96 kylej Bug 17900: DBLNODE struct incompatible with ddraw 1
|
|
* 05-sep-96 craige added dwAppHackFlags to DDRAWI_DIRECTDRAW_LCL struct.
|
|
* 01-oct-96 ketand added GetAvailDriverMemory
|
|
* 05-oct-96 colinmc Work Item: Removing the restriction on taking Win16
|
|
* lock on VRAM surfaces (not including the primary)
|
|
* 07-oct-96 colinmc Fixed build breaker with GetAvailDriverMem
|
|
* 07-oct-96 ketand Created DDRAWSURFACE_GBL_MORE
|
|
* 12-oct-96 colinmc Improvements to Win16 locking code to reduce virtual
|
|
* memory usage
|
|
* 09-nov-96 colinmc Fixed problem with old and new drivers not working
|
|
* with DirectDraw
|
|
* 15-nov-96 colinmc Finally removed DDSCAPS_3D and moved the definition
|
|
* of DDSCAPS_EXECUTEBUFFER to here so that it was
|
|
* visible from the DDK.
|
|
* 08-dec-96 colinmc Initial AGP support
|
|
* 12-jan-97 colinmc More Win16 lock work
|
|
* 13-jan-97 jvanaken Basic support for IDirectDrawSurface3 interface
|
|
* 21-jan-97 ketand Deleted Winwatch/Streaming/Composition. Add multi-mon support.
|
|
* 27-jan-97 colinmc AGP support
|
|
* 29-jan-97 colinmc Fixed build breaker
|
|
* 29-jan-97 smac Removed old ring 0 code
|
|
* 29-jan-97 jeffno Mode13 support. A new flag in DDMODEINFO.
|
|
* 01-feb-97 colinmc Bug 5574: Need to remove USE_ALIAS from headers
|
|
* Bug 4665: Extra bytes per surface for driver
|
|
* 02-feb-97 colinmc Bug 5625: DirectX drivers not longer be recognized
|
|
* due to bad size validation on DDCALLBACKS
|
|
* 24-feb-97 ketand Add dwContext to GETDRIVERINFODATA for NT and multimon
|
|
* 03-mar-97 smac Added kernel mode interface
|
|
* 03-mar-97 jeffno Work item: Extended surface memory alignment
|
|
* 08-mar-97 colinmc New function to allow surface pointer to be
|
|
* specified
|
|
* 11-mar-97 jeffno Asynchronous DMA support
|
|
* 23-mar-97 colinmc Bug 6673: Change structure numbering scheme for
|
|
* consistency's sake and pass version number to the
|
|
* driver. Also update the runtime version number
|
|
* passed in the DCI command
|
|
* 24-mar-97 jeffno Optimized Surfaces
|
|
* 30-sep-97 jeffno IDirectDraw4
|
|
* 03-oct-97 jeffno DDSCAPS2 and DDSURFACEDESC2
|
|
* 31-oct-97 johnstep Persistent-content surfaces for Windows 9x
|
|
* 05-nov-97 jvanaken Support for AlphaBlt and SetSpriteDisplayList
|
|
* 26-nov-97 t-craigs IDirectDrawPalette2 and a few changes/additions to Surface4
|
|
*@@END_DDKSPLIT
|
|
*
|
|
***************************************************************************/
|
|
#ifndef __DDRAWI_INCLUDED__
|
|
#define __DDRAWI_INCLUDED__
|
|
|
|
//
|
|
// This is a helper for external driver builds.
|
|
//
|
|
#if (!defined(WIN95)) && (!defined(WINNT))
|
|
#define WIN95
|
|
#endif
|
|
|
|
/*
|
|
* METAQUESTION: Why are Windows handles stored as DWORDs instead of
|
|
* their proper types?
|
|
* METAANSWER: To make the thunk to the 16-bit side completely painless.
|
|
*/
|
|
|
|
#define OBJECT_ISROOT 0x80000000l // object is root object
|
|
|
|
/*
|
|
* stuff for drivers
|
|
*/
|
|
#ifndef _WIN32
|
|
typedef long HRESULT;
|
|
typedef LPVOID REFIID;
|
|
#ifndef GUID_DEFINED
|
|
#define GUID_DEFINED
|
|
typedef struct _GUID {
|
|
ULONG Data1;
|
|
unsigned short Data2;
|
|
unsigned short Data3;
|
|
unsigned char Data4[8];
|
|
} GUID;
|
|
#endif // !defined(GUID_DEFINED)
|
|
|
|
typedef GUID FAR *LPGUID;
|
|
#define MAKE_HRESULT(sev,fac,code) \
|
|
((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
|
|
#endif
|
|
|
|
/*
|
|
* 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
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
// Include ddrawp.h for DirectDraw and D3D builds. DDK includes ddraw.h
|
|
#ifdef MSBUILD
|
|
#include "ddrawp.h"
|
|
#include "dvpp.h"
|
|
#include "ddkernel.h"
|
|
#else
|
|
//@@END_DDKSPLIT
|
|
#include "ddraw.h"
|
|
#include "dvp.h"
|
|
#include "ddkernel.h"
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif
|
|
#include "ddmcp.h"
|
|
//@@END_DDKSPLIT
|
|
#include "dmemmgr.h"
|
|
|
|
#ifdef IS_16
|
|
// ddraw16 16-bit compiler cannot handle 32-bit d3d headers included by d3dhal.h
|
|
// so for ddraw16 build, explicitly list d3dhal ptr types here
|
|
#define LPD3DHAL_GLOBALDRIVERDATA ULONG_PTR
|
|
#define LPD3DHAL_CALLBACKS ULONG_PTR
|
|
#define LPD3DHAL_CALLBACKS2 ULONG_PTR
|
|
#define LPD3DHAL_CALLBACKS3 ULONG_PTR
|
|
#define LPD3DHAL_D3DEXTENDEDCAPS ULONG_PTR
|
|
#define LPD3DHAL_COMMANDBUFFERCALLBACKS ULONG_PTR
|
|
//@@BEGIN_DDKSPLIT
|
|
#else
|
|
// make sure to get d3d8 private version so the
|
|
// d3d8typesp gets included instead of d3d8types
|
|
#if DIRECT3D_VERSION >= 0x800
|
|
#include "d3dhalp.h"
|
|
#else
|
|
#include "d3dhal.h"
|
|
#endif
|
|
//@@END_DDKSPLIT
|
|
#endif
|
|
|
|
#ifndef _WIN32
|
|
/*
|
|
* these error codes are DIFFERENT in Win32 and Win16!!!!
|
|
*/
|
|
#undef E_NOTIMPL
|
|
#undef E_OUTOFMEMORY
|
|
#undef E_INVALIDARG
|
|
#undef E_FAIL
|
|
#define E_NOTIMPL 0x80004001L
|
|
#define E_OUTOFMEMORY 0x8007000EL
|
|
#define E_INVALIDARG 0x80070057L
|
|
#define E_FAIL 0x80004005L
|
|
#endif
|
|
|
|
|
|
#define DDUNSUPPORTEDMODE ((DWORD) -1)
|
|
|
|
|
|
#define VALID_ALIGNMENT( align ) (!((align == 0) || (align % 2) != 0 ))
|
|
|
|
#ifdef _WIN32
|
|
/*
|
|
* These GUIDs are used to identify driver info structures, not interfaces,
|
|
* so the prefix GUID_ is used instead of IID_.
|
|
*
|
|
*/
|
|
|
|
DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xefd60cc0, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
|
|
DEFINE_GUID( GUID_VideoPortCallbacks, 0xefd60cc1, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
|
|
DEFINE_GUID( GUID_ColorControlCallbacks, 0xefd60cc2, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
|
|
DEFINE_GUID( GUID_VideoPortCaps, 0xefd60cc3, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
|
|
DEFINE_GUID( GUID_D3DCallbacks2, 0x0ba584e1, 0x70b6, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
|
|
DEFINE_GUID( GUID_D3DCallbacks3, 0xddf41230, 0xec0a, 0x11d0, 0xa9, 0xb6, 0x00, 0xaa, 0x00, 0xc0, 0x99, 0x3e);
|
|
DEFINE_GUID( GUID_NonLocalVidMemCaps, 0x86c4fa80, 0x8d84, 0x11d0, 0x94, 0xe8, 0x00, 0xc0, 0x4f, 0xc3, 0x41, 0x37);
|
|
DEFINE_GUID( GUID_KernelCallbacks, 0x80863800, 0x6B06, 0x11D0, 0x9B, 0x06, 0x0, 0xA0, 0xC9, 0x03, 0xA3, 0xB8);
|
|
DEFINE_GUID( GUID_KernelCaps, 0xFFAA7540, 0x7AA8, 0x11D0, 0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8);
|
|
DEFINE_GUID( GUID_D3DExtendedCaps, 0x7de41f80, 0x9d93, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);
|
|
DEFINE_GUID( GUID_ZPixelFormats, 0x93869880, 0x36cf, 0x11d1, 0x9b, 0x1b, 0x0, 0xaa, 0x0, 0xbb, 0xb8, 0xae);
|
|
DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3b8a0466, 0xf269, 0x11d1, 0x88, 0x0b, 0x0, 0xc0, 0x4f, 0xd9, 0x30, 0xc5);
|
|
DEFINE_GUID( GUID_DDStereoMode, 0xf828169c, 0xa8e8, 0x11d2, 0xa1, 0xf2, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6);
|
|
DEFINE_GUID( GUID_OptSurfaceKmodeInfo, 0xe05c8472, 0x51d4, 0x11d1, 0x8c, 0xce, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
|
|
DEFINE_GUID( GUID_OptSurfaceUmodeInfo, 0x9d792804, 0x5fa8, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
|
|
DEFINE_GUID( GUID_UserModeDriverInfo, 0xf0b0e8e2, 0x5f97, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
|
|
DEFINE_GUID( GUID_UserModeDriverPassword, 0x97f861b6, 0x60a1, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
|
|
DEFINE_GUID(GUID_D3DParseUnknownCommandCallback, 0x2e04ffa0, 0x98e4, 0x11d1, 0x8c, 0xe1, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
|
|
DEFINE_GUID( GUID_MotionCompCallbacks, 0xb1122b40, 0x5dA5, 0x11d1, 0x8f, 0xcF, 0x00, 0xc0, 0x4f, 0xc2, 0x9b, 0x4e);
|
|
DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00, 0x3E5A, 0x11D1, 0xB6, 0x40, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x6A);
|
|
//@@BEGIN_DDKSPLIT
|
|
DEFINE_GUID( GUID_NTCallbacks, 0x6fe9ecde, 0xdf89, 0x11d1, 0x9d, 0xb0, 0x00, 0x60, 0x08, 0x27, 0x71, 0xba);
|
|
DEFINE_GUID( GUID_DDMoreCaps, 0x880baf30, 0xb030, 0x11d0, 0x8e, 0xa7, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b);
|
|
DEFINE_GUID( GUID_VPE2Callbacks, 0x52882147, 0x2d47, 0x469a, 0xa0, 0xd1, 0x3, 0x45, 0x58, 0x90, 0xf6, 0xc8);
|
|
//@@END_DDKSPLIT
|
|
#endif //_WIN32
|
|
|
|
// The Callback that the drivers can use to parse unknown commands
|
|
// passed to them via the DrawPrimitives2 callback. The driver obtains this
|
|
// callback thru a GetDriverInfo call with GUID_D3DParseUnknownCommandCallback
|
|
// made by ddraw somewhere around the initialization time.
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
#endif
|
|
HRESULT CALLBACK D3DParseUnknownCommand (LPVOID lpvCommands,
|
|
LPVOID *lplpvReturnedCommand);
|
|
/*
|
|
* This DDPF flag is used by drivers to signify that this format is new and may be
|
|
* a candidate for hiding from certain applications
|
|
* KEEP THIS DEFINITION IN SYNC WITH THAT OF DDPF_RESERVED1 IN DDRAW.H
|
|
*/
|
|
#define DDPF_NOVEL_TEXTURE_FORMAT 0x00100000l
|
|
|
|
|
|
/*
|
|
* This DDPF flag is used to indicate a DX8+ format capability entry in
|
|
* the texture format list. It is not visible to applications.
|
|
*/
|
|
#define DDPF_D3DFORMAT 0x00200000l
|
|
|
|
/*
|
|
* List of operations supported on formats in DX8+ texture list.
|
|
* See the DX8 DDK for a complete description of these flags.
|
|
*/
|
|
#define D3DFORMAT_OP_TEXTURE 0x00000001L
|
|
#define D3DFORMAT_OP_VOLUMETEXTURE 0x00000002L
|
|
#define D3DFORMAT_OP_CUBETEXTURE 0x00000004L
|
|
#define D3DFORMAT_OP_OFFSCREEN_RENDERTARGET 0x00000008L
|
|
#define D3DFORMAT_OP_SAME_FORMAT_RENDERTARGET 0x00000010L
|
|
#define D3DFORMAT_OP_ZSTENCIL 0x00000040L
|
|
#define D3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH 0x00000080L
|
|
|
|
// This format can be used as a render target if the current display mode
|
|
// is the same depth if the alpha channel is ignored. e.g. if the device
|
|
// can render to A8R8G8B8 when the display mode is X8R8G8B8, then the
|
|
// format op list entry for A8R8G8B8 should have this cap.
|
|
#define D3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET 0x00000100L
|
|
|
|
// This format contains DirectDraw support (including Flip). This flag
|
|
// should not to be set on alpha formats.
|
|
#define D3DFORMAT_OP_DISPLAYMODE 0x00000400L
|
|
|
|
// The rasterizer can support some level of Direct3D support in this format
|
|
// and implies that the driver can create a Context in this mode (for some
|
|
// render target format). When this flag is set, the D3DFORMAT_OP_DISPLAYMODE
|
|
// flag must also be set.
|
|
#define D3DFORMAT_OP_3DACCELERATION 0x00000800L
|
|
|
|
// If the driver needs a private format to be D3D or driver manageable,
|
|
// then it needs to tell D3D the pixelsize in bits per pixel by setting
|
|
// dwPrivateFormatBitCount in DDPIXELFORMAT and by setting the below
|
|
// format op. If the below format op is not set, then D3D or the driver
|
|
// will NOT be allowed to manage the format.
|
|
#define D3DFORMAT_OP_PIXELSIZE 0x00001000L
|
|
|
|
/*
|
|
* List of processes attached to a DirectDraw object
|
|
*/
|
|
typedef struct _PROCESS_LIST
|
|
{
|
|
struct _PROCESS_LIST FAR *lpLink;
|
|
DWORD dwProcessId;
|
|
DWORD dwRefCnt;
|
|
DWORD dwAlphaDepth;
|
|
DWORD dwZDepth;
|
|
} PROCESS_LIST;
|
|
typedef PROCESS_LIST FAR *LPPROCESS_LIST;
|
|
|
|
/*
|
|
* Information about the refresh rates that monitor/display card can support
|
|
*/
|
|
typedef struct _DDMONITORINFO
|
|
{
|
|
WORD Manufacturer; // Montor manufacturer
|
|
WORD Product; // Monitor product ID
|
|
DWORD SerialNumber; // Monitor serial number
|
|
GUID DeviceIdentifier; // From DDDEVICEIDENTIFIER, describes card/driver
|
|
int Mode640x480; // Highest refresh rate support, 0 if none, -1 if untested
|
|
int Mode800x600;
|
|
int Mode1024x768;
|
|
int Mode1280x1024;
|
|
int Mode1600x1200;
|
|
int ModeReserved1;
|
|
int ModeReserved2;
|
|
int ModeReserved3;
|
|
} DDMONITORINFO, FAR *LPDDMONITORINFO;
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/*
|
|
* Mode test context and mode list structures used by StartModeTest API
|
|
*/
|
|
typedef struct _MODETESTDATA
|
|
{
|
|
DWORD dwWidth;
|
|
DWORD dwHeight;
|
|
DWORD dwBPP;
|
|
DWORD dwRefreshRate;
|
|
} MODETESTDATA, * LPMODETESTDATA;
|
|
|
|
typedef struct _MODETESTCONTEXT
|
|
{
|
|
DWORD dwTimeStamp;
|
|
DWORD dwNumModes;
|
|
DWORD dwCurrentMode;
|
|
DWORD dwOrigModeIndex;
|
|
LPMODETESTDATA lpModeList;
|
|
} MODETESTCONTEXT, * LPMODETESTCONTEXT;
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* DeleteFromActiveProcessList return codes
|
|
*/
|
|
#define DELETED_OK 0
|
|
#define DELETED_LASTONE 1
|
|
#define DELETED_NOTFOUND 2
|
|
|
|
#define DDBLT_ANYALPHA \
|
|
(DDBLT_ALPHASRCSURFACEOVERRIDE | \
|
|
DDBLT_ALPHASRCCONSTOVERRIDE | \
|
|
DDBLT_ALPHASRC | \
|
|
DDBLT_ALPHADESTSURFACEOVERRIDE | \
|
|
DDBLT_ALPHADESTCONSTOVERRIDE | \
|
|
DDBLT_ALPHADEST)
|
|
|
|
#define DDOVER_ANYALPHA \
|
|
(DDOVER_ALPHASRCSURFACEOVERRIDE | \
|
|
DDOVER_ALPHASRCCONSTOVERRIDE | \
|
|
DDOVER_ALPHASRC | \
|
|
DDOVER_ALPHADESTSURFACEOVERRIDE | \
|
|
DDOVER_ALPHADESTCONSTOVERRIDE | \
|
|
DDOVER_ALPHADEST)
|
|
|
|
|
|
typedef struct IDirectDrawClipperVtbl DIRECTDRAWCLIPPERCALLBACKS;
|
|
typedef struct IDirectDrawPaletteVtbl DIRECTDRAWPALETTECALLBACKS;
|
|
typedef struct IDirectDrawSurfaceVtbl DIRECTDRAWSURFACECALLBACKS;
|
|
typedef struct IDirectDrawSurface2Vtbl DIRECTDRAWSURFACE2CALLBACKS;
|
|
typedef struct IDirectDrawSurface3Vtbl DIRECTDRAWSURFACE3CALLBACKS;
|
|
typedef struct IDirectDrawSurface4Vtbl DIRECTDRAWSURFACE4CALLBACKS;
|
|
typedef struct IDirectDrawSurface7Vtbl DIRECTDRAWSURFACE7CALLBACKS;
|
|
typedef struct IDirectDrawColorControlVtbl DIRECTDRAWCOLORCONTROLCALLBACKS;
|
|
typedef struct IDirectDrawVtbl DIRECTDRAWCALLBACKS;
|
|
typedef struct IDirectDraw2Vtbl DIRECTDRAW2CALLBACKS;
|
|
typedef struct IDirectDraw4Vtbl DIRECTDRAW4CALLBACKS;
|
|
typedef struct IDirectDraw7Vtbl DIRECTDRAW7CALLBACKS;
|
|
typedef struct IDirectDrawKernelVtbl DIRECTDRAWKERNELCALLBACKS;
|
|
typedef struct IDirectDrawSurfaceKernelVtbl DIRECTDRAWSURFACEKERNELCALLBACKS;
|
|
typedef struct IDirectDrawGammaControlVtbl DIRECTDRAWGAMMACONTROLCALLBACKS;
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef POSTPONED
|
|
typedef struct IDirectDrawFactory2Vtbl DDFACTORY2CALLBACKS;
|
|
typedef struct IDirectDrawPalette2Vtbl DIRECTDRAWPALETTE2CALLBACKS;
|
|
typedef struct IPersistVtbl DIRECTDRAWSURFACEPERSISTCALLBACKS;
|
|
typedef struct IPersistStreamVtbl DIRECTDRAWSURFACEPERSISTSTREAMCALLBACKS;
|
|
typedef struct IPersistVtbl DIRECTDRAWPALETTEPERSISTCALLBACKS;
|
|
typedef struct IPersistStreamVtbl DIRECTDRAWPALETTEPERSISTSTREAMCALLBACKS;
|
|
typedef struct IDirectDrawOptSurfaceVtbl DIRECTDRAWOPTSURFACECALLBACKS;
|
|
#endif //POSTPONED
|
|
//@@END_DDKSPLIT
|
|
|
|
typedef DIRECTDRAWCLIPPERCALLBACKS FAR *LPDIRECTDRAWCLIPPERCALLBACKS;
|
|
typedef DIRECTDRAWPALETTECALLBACKS FAR *LPDIRECTDRAWPALETTECALLBACKS;
|
|
typedef DIRECTDRAWSURFACECALLBACKS FAR *LPDIRECTDRAWSURFACECALLBACKS;
|
|
typedef DIRECTDRAWCALLBACKS FAR *LPDIRECTDRAWCALLBACKS;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if defined( IS_32 ) || defined( WIN32 ) || defined( _WIN32 )
|
|
#undef IS_32
|
|
#define IS_32
|
|
#define DDAPI WINAPI
|
|
#define EXTERN_DDAPI WINAPI
|
|
#else
|
|
#define DDAPI __loadds WINAPI
|
|
#define EXTERN_DDAPI __export WINAPI
|
|
#endif
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef POSTPONED
|
|
typedef struct _NONDELEGATINGUNKNOWNCALLBACKS
|
|
{
|
|
HRESULT (DDAPI *QueryInterface) (LPDIRECTDRAW, REFIID, LPVOID FAR * );
|
|
DWORD (DDAPI *AddRef) (LPDIRECTDRAW);
|
|
DWORD (DDAPI *Release) (LPDIRECTDRAW);
|
|
} NONDELEGATINGUNKNOWNCALLBACKS;
|
|
#endif
|
|
//@@END_DDKSPLIT
|
|
|
|
|
|
/*
|
|
* DCI escape
|
|
*/
|
|
#ifndef DCICOMMAND
|
|
#define DCICOMMAND 3075 // escape value
|
|
#endif
|
|
|
|
/*
|
|
* this is the DirectDraw version
|
|
* passed to the driver in DCICMD.dwVersion
|
|
*
|
|
* Most older HALs will fail if DD_VERSION does not match what they
|
|
* are expecting. Therefore, DD_VERSION cannot change if we want DX5+ to
|
|
* run on DX2/3 HALs. For this reason, we added a new version call that
|
|
* allows the HAL to know the real version of DirectDraw, which is equal
|
|
* to DD_RUNTIME_VERSION. This is for informational purposes only. HALs
|
|
* should not fail DirectDraw if they receive an unknown DirectDraw runtime
|
|
* version.
|
|
*/
|
|
#define DD_VERSION 0x00000200l
|
|
#define DD_RUNTIME_VERSION 0x00000802l
|
|
|
|
/*
|
|
* this is the HAL version.
|
|
* the driver returns this number from QUERYESCSUPPORT/DCICOMMAND
|
|
*/
|
|
#define DD_HAL_VERSION 0x0100
|
|
//@@BEGIN_DDKSPLIT
|
|
#define DD_HAL_VERSION_EXTERNAL 0x0100
|
|
#undef DD_HAL_VERSION
|
|
#define DD_HAL_VERSION 0x00ff // special internal version
|
|
//@@END_DDKSPLIT
|
|
|
|
#include "dciddi.h"
|
|
|
|
#define DDCREATEDRIVEROBJECT 10 // create an object
|
|
#define DDGET32BITDRIVERNAME 11 // get a 32-bit driver name
|
|
#define DDNEWCALLBACKFNS 12 // new callback fns coming
|
|
#define DDVERSIONINFO 13 // tells driver the ddraw version
|
|
|
|
typedef struct
|
|
{
|
|
char szName[260]; // 32-bit driver name
|
|
char szEntryPoint[64]; // entry point
|
|
DWORD dwContext; // context to pass to entry point
|
|
} DD32BITDRIVERDATA, FAR *LPDD32BITDRIVERDATA;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD dwHALVersion; // Version of DirectDraw for which the HAL was created
|
|
ULONG_PTR dwReserved1; // Reserved for future use
|
|
ULONG_PTR dwReserved2; // Reserved for future use
|
|
} DDVERSIONDATA, FAR *LPDDVERSIONDATA;
|
|
|
|
typedef DWORD (FAR PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext);
|
|
|
|
/*
|
|
* pointer to video meory
|
|
*/
|
|
typedef ULONG_PTR FLATPTR;
|
|
|
|
/*
|
|
* indicates that DDRAW.DLL has been unloaded...
|
|
*/
|
|
#define DDRAW_DLL_UNLOADED (LPVOID) 1
|
|
|
|
/*
|
|
* critical section types
|
|
*/
|
|
typedef LPVOID CSECT_HANDLE;
|
|
#ifdef NOUSE_CRITSECTS
|
|
typedef xxx CSECT; // generate an error for now
|
|
#else
|
|
#if defined( IS_32 ) && !defined( _NOCSECT_TYPE )
|
|
typedef CRITICAL_SECTION CSECT;
|
|
typedef CSECT *LPCSECT;
|
|
#else
|
|
typedef struct
|
|
{
|
|
DWORD vals[6];
|
|
} CSECT;
|
|
typedef void FAR *LPCSECT;
|
|
#endif
|
|
#endif
|
|
|
|
/*
|
|
* DLL names
|
|
*/
|
|
#define DDHAL_DRIVER_DLLNAME "DDRAW16.DLL"
|
|
#define DDHAL_APP_DLLNAME "DDRAW.DLL"
|
|
|
|
/*
|
|
* maximum size of a driver name
|
|
*/
|
|
#ifndef CCHDEVICENAME
|
|
#define CCHDEVICENAME 32
|
|
#endif
|
|
#define MAX_DRIVER_NAME CCHDEVICENAME
|
|
|
|
/*
|
|
* largest palette supported
|
|
*/
|
|
#define MAX_PALETTE_SIZE 256
|
|
|
|
/*
|
|
* maximum number of surfaces that can be autoflipped between
|
|
*/
|
|
#define MAX_AUTOFLIP_BUFFERS 10
|
|
|
|
/*
|
|
* Indicates the surface is an execute buffer, i.e., a linear chunk of system
|
|
* or video memory that holds a Direct3D display list. A driver reports this
|
|
* cap to indicate that it can create execute buffers in video memory and
|
|
* Direct3D uses this bit to request execute buffers. However, it is not
|
|
* visible to via the API.
|
|
*/
|
|
#define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2
|
|
/*
|
|
* Indicates to the driver that the "execute" buffer that is to be created is actually
|
|
* a vertex buffer. Used by CreateVertexBuffer in D3D
|
|
*/
|
|
#define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1
|
|
|
|
/*
|
|
* Indicates to the driver that the "execute" buffer that is to be created is actually
|
|
* a command buffer. Used by internally in D3D
|
|
*/
|
|
#define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2
|
|
|
|
/*
|
|
* Indicates to the driver that the "execute" buffer that is to be created is actually
|
|
* an index buffer.
|
|
*/
|
|
#define DDSCAPS2_INDEXBUFFER DDSCAPS2_RESERVED3
|
|
|
|
|
|
/*
|
|
* Internal formats are not exposed to applications.
|
|
//@@BEGIN_DDKSPLIT
|
|
* NOTE: Must keep these in sync with enum in d3d8types.h
|
|
//@@END_DDKSPLIT
|
|
*/
|
|
|
|
#define D3DFMT_INTERNAL_D32 71
|
|
#define D3DFMT_INTERNAL_S1D15 72
|
|
#define D3DFMT_INTERNAL_D15S1 73
|
|
#define D3DFMT_INTERNAL_S8D24 74
|
|
#define D3DFMT_INTERNAL_D24S8 75
|
|
#define D3DFMT_INTERNAL_X8D24 76
|
|
#define D3DFMT_INTERNAL_D24X8 77
|
|
|
|
|
|
|
|
/*
|
|
* pre-declare pointers to structs containing data for DDHAL fns
|
|
*/
|
|
typedef struct _DDHAL_CREATEPALETTEDATA FAR *LPDDHAL_CREATEPALETTEDATA;
|
|
typedef struct _DDHAL_CREATESURFACEDATA FAR *LPDDHAL_CREATESURFACEDATA;
|
|
typedef struct _DDHAL_CANCREATESURFACEDATA FAR *LPDDHAL_CANCREATESURFACEDATA;
|
|
typedef struct _DDHAL_WAITFORVERTICALBLANKDATA FAR *LPDDHAL_WAITFORVERTICALBLANKDATA;
|
|
typedef struct _DDHAL_DESTROYDRIVERDATA FAR *LPDDHAL_DESTROYDRIVERDATA;
|
|
typedef struct _DDHAL_SETMODEDATA FAR *LPDDHAL_SETMODEDATA;
|
|
typedef struct _DDHAL_DRVSETCOLORKEYDATA FAR *LPDDHAL_DRVSETCOLORKEYDATA;
|
|
typedef struct _DDHAL_GETSCANLINEDATA FAR *LPDDHAL_GETSCANLINEDATA;
|
|
|
|
typedef struct _DDHAL_DESTROYPALETTEDATA FAR *LPDDHAL_DESTROYPALETTEDATA;
|
|
typedef struct _DDHAL_SETENTRIESDATA FAR *LPDDHAL_SETENTRIESDATA;
|
|
|
|
typedef struct _DDHAL_BLTDATA FAR *LPDDHAL_BLTDATA;
|
|
typedef struct _DDHAL_LOCKDATA FAR *LPDDHAL_LOCKDATA;
|
|
typedef struct _DDHAL_UNLOCKDATA FAR *LPDDHAL_UNLOCKDATA;
|
|
typedef struct _DDHAL_UPDATEOVERLAYDATA FAR *LPDDHAL_UPDATEOVERLAYDATA;
|
|
typedef struct _DDHAL_SETOVERLAYPOSITIONDATA FAR *LPDDHAL_SETOVERLAYPOSITIONDATA;
|
|
typedef struct _DDHAL_SETPALETTEDATA FAR *LPDDHAL_SETPALETTEDATA;
|
|
typedef struct _DDHAL_FLIPDATA FAR *LPDDHAL_FLIPDATA;
|
|
typedef struct _DDHAL_DESTROYSURFACEDATA FAR *LPDDHAL_DESTROYSURFACEDATA;
|
|
typedef struct _DDHAL_SETCLIPLISTDATA FAR *LPDDHAL_SETCLIPLISTDATA;
|
|
typedef struct _DDHAL_ADDATTACHEDSURFACEDATA FAR *LPDDHAL_ADDATTACHEDSURFACEDATA;
|
|
typedef struct _DDHAL_SETCOLORKEYDATA FAR *LPDDHAL_SETCOLORKEYDATA;
|
|
typedef struct _DDHAL_GETBLTSTATUSDATA FAR *LPDDHAL_GETBLTSTATUSDATA;
|
|
typedef struct _DDHAL_GETFLIPSTATUSDATA FAR *LPDDHAL_GETFLIPSTATUSDATA;
|
|
typedef struct _DDHAL_SETEXCLUSIVEMODEDATA FAR *LPDDHAL_SETEXCLUSIVEMODEDATA;
|
|
typedef struct _DDHAL_FLIPTOGDISURFACEDATA FAR *LPDDHAL_FLIPTOGDISURFACEDATA;
|
|
|
|
typedef struct _DDHAL_CANCREATEVPORTDATA FAR *LPDDHAL_CANCREATEVPORTDATA;
|
|
typedef struct _DDHAL_CREATEVPORTDATA FAR *LPDDHAL_CREATEVPORTDATA;
|
|
typedef struct _DDHAL_FLIPVPORTDATA FAR *LPDDHAL_FLIPVPORTDATA;
|
|
typedef struct _DDHAL_GETVPORTCONNECTDATA FAR *LPDDHAL_GETVPORTCONNECTDATA;
|
|
typedef struct _DDHAL_GETVPORTBANDWIDTHDATA FAR *LPDDHAL_GETVPORTBANDWIDTHDATA;
|
|
typedef struct _DDHAL_GETVPORTINPUTFORMATDATA FAR *LPDDHAL_GETVPORTINPUTFORMATDATA;
|
|
typedef struct _DDHAL_GETVPORTOUTPUTFORMATDATA FAR *LPDDHAL_GETVPORTOUTPUTFORMATDATA;
|
|
typedef struct _DDHAL_GETVPORTFIELDDATA FAR *LPDDHAL_GETVPORTFIELDDATA;
|
|
typedef struct _DDHAL_GETVPORTLINEDATA FAR *LPDDHAL_GETVPORTLINEDATA;
|
|
typedef struct _DDHAL_DESTROYVPORTDATA FAR *LPDDHAL_DESTROYVPORTDATA;
|
|
typedef struct _DDHAL_GETVPORTFLIPSTATUSDATA FAR *LPDDHAL_GETVPORTFLIPSTATUSDATA;
|
|
typedef struct _DDHAL_UPDATEVPORTDATA FAR *LPDDHAL_UPDATEVPORTDATA;
|
|
typedef struct _DDHAL_WAITFORVPORTSYNCDATA FAR *LPDDHAL_WAITFORVPORTSYNCDATA;
|
|
typedef struct _DDHAL_GETVPORTSIGNALDATA FAR *LPDDHAL_GETVPORTSIGNALDATA;
|
|
typedef struct _DDHAL_VPORTCOLORDATA FAR *LPDDHAL_VPORTCOLORDATA;
|
|
|
|
typedef struct _DDHAL_COLORCONTROLDATA FAR *LPDDHAL_COLORCONTROLDATA;
|
|
|
|
typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA FAR *LPDDHAL_GETAVAILDRIVERMEMORYDATA;
|
|
typedef struct _DDHAL_UPDATENONLOCALHEAPDATA FAR *LPDDHAL_UPDATENONLOCALHEAPDATA;
|
|
typedef struct _DDHAL_GETHEAPALIGNMENTDATA FAR *LPDDHAL_GETHEAPALIGNMENTDATA;
|
|
|
|
typedef struct _DDHAL_GETDRIVERINFODATA FAR *LPDDHAL_GETDRIVERINFODATA;
|
|
|
|
typedef struct _DDHAL_SYNCSURFACEDATA FAR *LPDDHAL_SYNCSURFACEDATA;
|
|
typedef struct _DDHAL_SYNCVIDEOPORTDATA FAR *LPDDHAL_SYNCVIDEOPORTDATA;
|
|
|
|
typedef struct _DDHAL_GETMOCOMPGUIDSDATA FAR *LPDDHAL_GETMOCOMPGUIDSDATA;
|
|
typedef struct _DDHAL_GETMOCOMPFORMATSDATA FAR *LPDDHAL_GETMOCOMPFORMATSDATA;
|
|
typedef struct _DDHAL_CREATEMOCOMPDATA FAR *LPDDHAL_CREATEMOCOMPDATA;
|
|
typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA FAR *LPDDHAL_GETMOCOMPCOMPBUFFDATA;
|
|
typedef struct _DDHAL_GETINTERNALMOCOMPDATA FAR *LPDDHAL_GETINTERNALMOCOMPDATA;
|
|
typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA FAR *LPDDHAL_BEGINMOCOMPFRAMEDATA;
|
|
typedef struct _DDHAL_ENDMOCOMPFRAMEDATA FAR *LPDDHAL_ENDMOCOMPFRAMEDATA;
|
|
typedef struct _DDHAL_RENDERMOCOMPDATA FAR *LPDDHAL_RENDERMOCOMPDATA;
|
|
typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA FAR *LPDDHAL_QUERYMOCOMPSTATUSDATA;
|
|
typedef struct _DDHAL_DESTROYMOCOMPDATA FAR *LPDDHAL_DESTROYMOCOMPDATA;
|
|
|
|
typedef struct _DDHAL_CREATESURFACEEXDATA FAR *LPDDHAL_CREATESURFACEEXDATA;
|
|
typedef struct _DDHAL_GETDRIVERSTATEDATA FAR *LPDDHAL_GETDRIVERSTATEDATA;
|
|
typedef struct _DDHAL_DESTROYDDLOCALDATA FAR *LPDDHAL_DESTROYDDLOCALDATA;
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef POSTPONED2
|
|
typedef struct _DDHAL_SETSPRITEDISPLAYLISTDATA FAR *LPDDHAL_SETSPRITEDISPLAYLISTDATA;
|
|
typedef struct _DDHAL_RESIZEDATA FAR *LPDDHAL_RESIZEDATA;
|
|
typedef struct _DDHAL_CAPTURECOMPOSITIONBUFFERDATA FAR *LPDDHAL_CAPTURECOMPOSITIONBUFFERDATA;
|
|
#endif //POSTPONED2
|
|
//@@END_DDKSPLIT
|
|
|
|
|
|
/*
|
|
* value in the fpVidMem; indicates dwBlockSize is valid (surface object)
|
|
*/
|
|
#define DDHAL_PLEASEALLOC_BLOCKSIZE 0x00000002l
|
|
|
|
|
|
/*
|
|
* Values in fpVidMem: Indicates dwLinearSizde is valid.
|
|
* THIS VALUE CAN ONLY BE USED BY A D3D Optimize DRIVER FUNCTION
|
|
* IT IS INVALID FOR A DRIVER TO RETURN THIS VALUE FROM CreateSurface32.
|
|
*/
|
|
#define DDHAL_PLEASEALLOC_LINEARSIZE 0x00000003l
|
|
|
|
/*
|
|
* DRIVER SERVICES
|
|
*
|
|
* These services exported from ddraw.dll can be called by the HAL.
|
|
* They are intended for use by the d3d Optimize HAL call.
|
|
*/
|
|
extern HRESULT DDAPI LateAllocateSurfaceMem(
|
|
LPDIRECTDRAWSURFACE lpSurface,
|
|
DWORD dwPleaseAllocType,
|
|
DWORD dwWidthInBytesOrSize,
|
|
DWORD dwHeight);
|
|
|
|
LPDIRECTDRAWSURFACE GetNextMipMap(
|
|
LPDIRECTDRAWSURFACE lpLevel);
|
|
/*
|
|
* video memory data structures (passed in DDHALINFO)
|
|
*/
|
|
typedef struct _VIDMEM
|
|
{
|
|
DWORD dwFlags; // flags
|
|
FLATPTR fpStart; // start of memory chunk
|
|
union
|
|
{
|
|
FLATPTR fpEnd; // end of memory chunk
|
|
DWORD dwWidth; // width of chunk (rectanglar memory)
|
|
};
|
|
DDSCAPS ddsCaps; // what this memory CANNOT be used for
|
|
DDSCAPS ddsCapsAlt; // what this memory CANNOT be used for if it must
|
|
union
|
|
{
|
|
LPVMEMHEAP lpHeap; // heap pointer, used by DDRAW
|
|
DWORD dwHeight; // height of chunk (rectanguler memory)
|
|
};
|
|
} VIDMEM;
|
|
typedef VIDMEM FAR *LPVIDMEM;
|
|
|
|
/*
|
|
* flags for vidmem struct
|
|
*/
|
|
#define VIDMEM_ISLINEAR 0x00000001l // heap is linear
|
|
#define VIDMEM_ISRECTANGULAR 0x00000002l // heap is rectangular
|
|
#define VIDMEM_ISHEAP 0x00000004l // heap is preallocated by driver
|
|
#define VIDMEM_ISNONLOCAL 0x00000008l // heap populated with non-local video memory
|
|
#define VIDMEM_ISWC 0x00000010l // heap populated with write combining memory
|
|
#define VIDMEM_HEAPDISABLED 0x00000020l // heap disabled
|
|
|
|
typedef struct _VIDMEMINFO
|
|
{
|
|
/* 0*/ FLATPTR fpPrimary; // pointer to primary surface
|
|
/* 4*/ DWORD dwFlags; // flags
|
|
/* 8*/ DWORD dwDisplayWidth; // current display width
|
|
/* c*/ DWORD dwDisplayHeight; // current display height
|
|
/*10*/ LONG lDisplayPitch; // current display pitch
|
|
/*14*/ DDPIXELFORMAT ddpfDisplay; // pixel format of display
|
|
/*34*/ DWORD dwOffscreenAlign; // byte alignment for offscreen surfaces
|
|
/*38*/ DWORD dwOverlayAlign; // byte alignment for overlays
|
|
/*3c*/ DWORD dwTextureAlign; // byte alignment for textures
|
|
/*40*/ DWORD dwZBufferAlign; // byte alignment for z buffers
|
|
/*44*/ DWORD dwAlphaAlign; // byte alignment for alpha
|
|
/*48*/ DWORD dwNumHeaps; // number of memory heaps in vmList
|
|
/*4c*/ LPVIDMEM pvmList; // array of heaps
|
|
} VIDMEMINFO;
|
|
typedef VIDMEMINFO FAR *LPVIDMEMINFO;
|
|
|
|
typedef struct _HEAPALIAS // PRIVATE
|
|
{
|
|
FLATPTR fpVidMem; // start of aliased vid mem
|
|
LPVOID lpAlias; // start of heap alias
|
|
DWORD dwAliasSize; // size of alias allocated
|
|
} HEAPALIAS;
|
|
typedef HEAPALIAS FAR *LPHEAPALIAS;
|
|
|
|
typedef struct _HEAPALIASINFO // PRIVATE
|
|
{
|
|
DWORD dwRefCnt; // reference count of these aliases
|
|
DWORD dwFlags; // flags
|
|
DWORD dwNumHeaps; // number of aliased heaps
|
|
LPHEAPALIAS lpAliases; // array of heaps
|
|
} HEAPALIASINFO;
|
|
typedef HEAPALIASINFO FAR *LPHEAPALIASINFO;
|
|
|
|
#define HEAPALIASINFO_MAPPEDREAL 0x00000001l // PRIVATE: heap aliases mapped to real video memory
|
|
#define HEAPALIASINFO_MAPPEDDUMMY 0x00000002l // PRIVATE: heap aliased mapped to dummy memory
|
|
|
|
typedef struct _DDRAWI_DIRECTDRAW_INT FAR *LPDDRAWI_DIRECTDRAW_INT;
|
|
typedef struct _DDRAWI_DIRECTDRAW_LCL FAR *LPDDRAWI_DIRECTDRAW_LCL;
|
|
typedef struct _DDRAWI_DIRECTDRAW_GBL FAR *LPDDRAWI_DIRECTDRAW_GBL;
|
|
typedef struct _DDRAWI_DDRAWSURFACE_GBL FAR *LPDDRAWI_DDRAWSURFACE_GBL;
|
|
typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE FAR *LPDDRAWI_DDRAWSURFACE_GBL_MORE;
|
|
typedef struct _DDRAWI_DDRAWPALETTE_GBL FAR *LPDDRAWI_DDRAWPALETTE_GBL;
|
|
typedef struct _DDRAWI_DDRAWPALETTE_INT FAR *LPDDRAWI_DDRAWPALETTE_INT;
|
|
typedef struct _DDRAWI_DDRAWCLIPPER_INT FAR *LPDDRAWI_DDRAWCLIPPER_INT;
|
|
typedef struct _DDRAWI_DDRAWCLIPPER_GBL FAR *LPDDRAWI_DDRAWCLIPPER_GBL;
|
|
typedef struct _DDRAWI_DDRAWSURFACE_MORE FAR *LPDDRAWI_DDRAWSURFACE_MORE;
|
|
typedef struct _DDRAWI_DDRAWSURFACE_LCL FAR *LPDDRAWI_DDRAWSURFACE_LCL;
|
|
typedef struct _DDRAWI_DDRAWSURFACE_INT FAR *LPDDRAWI_DDRAWSURFACE_INT;
|
|
typedef struct _DDRAWI_DDVIDEOPORT_INT FAR *LPDDRAWI_DDVIDEOPORT_INT;
|
|
typedef struct _DDRAWI_DDVIDEOPORT_LCL FAR *LPDDRAWI_DDVIDEOPORT_LCL;
|
|
typedef struct _DDRAWI_DDRAWPALETTE_LCL FAR *LPDDRAWI_DDRAWPALETTE_LCL;
|
|
typedef struct _DDRAWI_DDRAWCLIPPER_LCL FAR *LPDDRAWI_DDRAWCLIPPER_LCL;
|
|
typedef struct _DDRAWI_DDMOTIONCOMP_INT FAR *LPDDRAWI_DDMOTIONCOMP_INT;
|
|
typedef struct _DDRAWI_DDMOTIONCOMP_LCL FAR *LPDDRAWI_DDMOTIONCOMP_LCL;
|
|
|
|
/*
|
|
* List of IUnknowns aggregated by a DirectDraw surface.
|
|
*/
|
|
typedef struct _IUNKNOWN_LIST
|
|
{
|
|
struct _IUNKNOWN_LIST FAR *lpLink;
|
|
GUID FAR *lpGuid;
|
|
IUnknown FAR *lpIUnknown;
|
|
} IUNKNOWN_LIST;
|
|
typedef IUNKNOWN_LIST FAR *LPIUNKNOWN_LIST;
|
|
|
|
/*
|
|
* hardware emulation layer stuff
|
|
*/
|
|
typedef BOOL (FAR PASCAL *LPDDHEL_INIT)(LPDDRAWI_DIRECTDRAW_GBL,BOOL);
|
|
|
|
/*
|
|
* These structures contain the entry points in the display driver that
|
|
* DDRAW will call. Entries that the display driver does not care about
|
|
* should be NULL. Passed to DDRAW in DDHALINFO.
|
|
*/
|
|
|
|
/*
|
|
* DIRECTDRAW object callbacks
|
|
*/
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_SETCOLORKEY)(LPDDHAL_DRVSETCOLORKEYDATA );
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_CANCREATESURFACE)(LPDDHAL_CANCREATESURFACEDATA );
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA );
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_CREATESURFACE)(LPDDHAL_CREATESURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_DESTROYDRIVER)(LPDDHAL_DESTROYDRIVERDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_SETMODE)(LPDDHAL_SETMODEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_CREATEPALETTE)(LPDDHAL_CREATEPALETTEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_GETSCANLINE)(LPDDHAL_GETSCANLINEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_SETEXCLUSIVEMODE)(LPDDHAL_SETEXCLUSIVEMODEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_FLIPTOGDISURFACE)(LPDDHAL_FLIPTOGDISURFACEDATA);
|
|
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);
|
|
|
|
typedef struct _DDHAL_DDCALLBACKS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHAL_DESTROYDRIVER DestroyDriver;
|
|
LPDDHAL_CREATESURFACE CreateSurface;
|
|
LPDDHAL_SETCOLORKEY SetColorKey;
|
|
LPDDHAL_SETMODE SetMode;
|
|
LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank;
|
|
LPDDHAL_CANCREATESURFACE CanCreateSurface;
|
|
LPDDHAL_CREATEPALETTE CreatePalette;
|
|
LPDDHAL_GETSCANLINE GetScanLine;
|
|
// *** New fields for DX2 *** //
|
|
LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode;
|
|
LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface;
|
|
//@@BEGIN_DDKSPLIT
|
|
// For backward compatibility with pre-DX5 runtimes, must not
|
|
// add fields to this structure. Use GetDriverInfo instead.
|
|
//@@END_DDKSPLIT
|
|
} DDHAL_DDCALLBACKS;
|
|
typedef DDHAL_DDCALLBACKS FAR *LPDDHAL_DDCALLBACKS;
|
|
|
|
#define DDCALLBACKSSIZE_V1 ( offsetof( DDHAL_DDCALLBACKS, SetExclusiveMode ) )
|
|
#define DDCALLBACKSSIZE sizeof( DDHAL_DDCALLBACKS )
|
|
|
|
#define DDHAL_CB32_DESTROYDRIVER 0x00000001l
|
|
#define DDHAL_CB32_CREATESURFACE 0x00000002l
|
|
#define DDHAL_CB32_SETCOLORKEY 0x00000004l
|
|
#define DDHAL_CB32_SETMODE 0x00000008l
|
|
#define DDHAL_CB32_WAITFORVERTICALBLANK 0x00000010l
|
|
#define DDHAL_CB32_CANCREATESURFACE 0x00000020l
|
|
#define DDHAL_CB32_CREATEPALETTE 0x00000040l
|
|
#define DDHAL_CB32_GETSCANLINE 0x00000080l
|
|
#define DDHAL_CB32_SETEXCLUSIVEMODE 0x00000100l
|
|
#define DDHAL_CB32_FLIPTOGDISURFACE 0x00000200l
|
|
|
|
/*
|
|
* DIRECTDRAWPALETTE object callbacks
|
|
*/
|
|
typedef DWORD (FAR PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA );
|
|
typedef DWORD (FAR PASCAL *LPDDHALPALCB_SETENTRIES)(LPDDHAL_SETENTRIESDATA );
|
|
|
|
typedef struct _DDHAL_DDPALETTECALLBACKS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHALPALCB_DESTROYPALETTE DestroyPalette;
|
|
LPDDHALPALCB_SETENTRIES SetEntries;
|
|
} DDHAL_DDPALETTECALLBACKS;
|
|
typedef DDHAL_DDPALETTECALLBACKS FAR *LPDDHAL_DDPALETTECALLBACKS;
|
|
|
|
#define DDPALETTECALLBACKSSIZE sizeof( DDHAL_DDPALETTECALLBACKS )
|
|
|
|
#define DDHAL_PALCB32_DESTROYPALETTE 0x00000001l
|
|
#define DDHAL_PALCB32_SETENTRIES 0x00000002l
|
|
|
|
/*
|
|
* DIRECTDRAWSURFACE object callbacks
|
|
*/
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_LOCK)(LPDDHAL_LOCKDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_UNLOCK)(LPDDHAL_UNLOCKDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_BLT)(LPDDHAL_BLTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_UPDATEOVERLAY)(LPDDHAL_UPDATEOVERLAYDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_SETPALETTE)(LPDDHAL_SETPALETTEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_FLIP)(LPDDHAL_FLIPDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_DESTROYSURFACE)(LPDDHAL_DESTROYSURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_SETCLIPLIST)(LPDDHAL_SETCLIPLISTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_SETCOLORKEY)(LPDDHAL_SETCOLORKEYDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_GETBLTSTATUS)(LPDDHAL_GETBLTSTATUSDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALSURFCB_GETFLIPSTATUS)(LPDDHAL_GETFLIPSTATUSDATA);
|
|
|
|
|
|
typedef struct _DDHAL_DDSURFACECALLBACKS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHALSURFCB_DESTROYSURFACE DestroySurface;
|
|
LPDDHALSURFCB_FLIP Flip;
|
|
LPDDHALSURFCB_SETCLIPLIST SetClipList;
|
|
LPDDHALSURFCB_LOCK Lock;
|
|
LPDDHALSURFCB_UNLOCK Unlock;
|
|
LPDDHALSURFCB_BLT Blt;
|
|
LPDDHALSURFCB_SETCOLORKEY SetColorKey;
|
|
LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface;
|
|
LPDDHALSURFCB_GETBLTSTATUS GetBltStatus;
|
|
LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus;
|
|
LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;
|
|
LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition;
|
|
LPVOID reserved4;
|
|
LPDDHALSURFCB_SETPALETTE SetPalette;
|
|
} DDHAL_DDSURFACECALLBACKS;
|
|
typedef DDHAL_DDSURFACECALLBACKS FAR *LPDDHAL_DDSURFACECALLBACKS;
|
|
|
|
#define DDSURFACECALLBACKSSIZE sizeof( DDHAL_DDSURFACECALLBACKS )
|
|
|
|
#define DDHAL_SURFCB32_DESTROYSURFACE 0x00000001l
|
|
#define DDHAL_SURFCB32_FLIP 0x00000002l
|
|
#define DDHAL_SURFCB32_SETCLIPLIST 0x00000004l
|
|
#define DDHAL_SURFCB32_LOCK 0x00000008l
|
|
#define DDHAL_SURFCB32_UNLOCK 0x00000010l
|
|
#define DDHAL_SURFCB32_BLT 0x00000020l
|
|
#define DDHAL_SURFCB32_SETCOLORKEY 0x00000040l
|
|
#define DDHAL_SURFCB32_ADDATTACHEDSURFACE 0x00000080l
|
|
#define DDHAL_SURFCB32_GETBLTSTATUS 0x00000100l
|
|
#define DDHAL_SURFCB32_GETFLIPSTATUS 0x00000200l
|
|
#define DDHAL_SURFCB32_UPDATEOVERLAY 0x00000400l
|
|
#define DDHAL_SURFCB32_SETOVERLAYPOSITION 0x00000800l
|
|
#define DDHAL_SURFCB32_RESERVED4 0x00001000l
|
|
#define DDHAL_SURFCB32_SETPALETTE 0x00002000l
|
|
|
|
// This structure can be queried from the driver from DX5 onward
|
|
// using GetDriverInfo with GUID_MiscellaneousCallbacks
|
|
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_UPDATENONLOCALHEAP)(LPDDHAL_UPDATENONLOCALHEAPDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_GETHEAPALIGNMENT)(LPDDHAL_GETHEAPALIGNMENTDATA);
|
|
/*
|
|
* This prototype is identical to that of GetBltStatus
|
|
*/
|
|
|
|
typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS {
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory;
|
|
LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap;
|
|
LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment;
|
|
/*
|
|
* The GetSysmemBltStatus callback uses the same prototype as GetBltStatus.
|
|
* It is legal to point both pointers to the same driver routine.
|
|
*/
|
|
LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus;
|
|
} DDHAL_DDMISCELLANEOUSCALLBACKS, *LPDDHAL_DDMISCELLANEOUSCALLBACKS;
|
|
|
|
#define DDHAL_MISCCB32_GETAVAILDRIVERMEMORY 0x00000001l
|
|
#define DDHAL_MISCCB32_UPDATENONLOCALHEAP 0x00000002l
|
|
#define DDHAL_MISCCB32_GETHEAPALIGNMENT 0x00000004l
|
|
#define DDHAL_MISCCB32_GETSYSMEMBLTSTATUS 0x00000008l
|
|
|
|
#define DDMISCELLANEOUSCALLBACKSSIZE sizeof(DDHAL_DDMISCELLANEOUSCALLBACKS)
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
// This structure can be queried from the driver from NT5 onward
|
|
// using GetDriverInfo with GUID_NTCallbacks
|
|
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_SETEXCLUSIVEMODE)(LPDDHAL_SETEXCLUSIVEMODEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_FLIPTOGDISURFACE)(LPDDHAL_FLIPTOGDISURFACEDATA);
|
|
|
|
typedef struct _DDHAL_DDNTCALLBACKS {
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPVOID FreeDriverMemory; // kernel-mode only
|
|
LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode;
|
|
LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface;
|
|
} DDHAL_DDNTCALLBACKS, *LPDDHAL_DDNTCALLBACKS;
|
|
|
|
#define DDHAL_NTCB32_FREEDRIVERMEMORY 0x00000001l
|
|
#define DDHAL_NTCB32_SETEXCLUSIVEMODE 0x00000002l
|
|
#define DDHAL_NTCB32_FLIPTOGDISURFACE 0x00000004l
|
|
|
|
#define DDNTCALLBACKSSIZE sizeof(DDHAL_DDNTCALLBACKS)
|
|
|
|
|
|
// This structure can be queried from the driver from Whistler onward
|
|
// using GetDriverInfo with GUID_NTCallbacks
|
|
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_ACQUIREVPORTNOTIFICATION)(LPDDRAWI_DDVIDEOPORT_LCL,HANDLE*,LPDDVIDEOPORTNOTIFY);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_RELEASEVPORTNOTIFICATION)(LPDDRAWI_DDVIDEOPORT_LCL,HANDLE);
|
|
|
|
typedef struct _DDHAL_DDVPE2CALLBACKS {
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHAL_ACQUIREVPORTNOTIFICATION AcquireNotification;
|
|
LPDDHAL_RELEASEVPORTNOTIFICATION ReleaseNotification;
|
|
} DDHAL_DDVPE2CALLBACKS, *LPDDHAL_DDVPE2CALLBACKS;
|
|
|
|
#define DDHAL_VPE2CB32_ACQUIRENOTIFICATION 0x00000001l
|
|
#define DDHAL_VPE2CB32_RELEASENOTIFICATION 0x00000002l
|
|
|
|
#define DDVPE2CALLBACKSSIZE sizeof(DDHAL_DDVPE2CALLBACKS)
|
|
//@@END_DDKSPLIT
|
|
|
|
// DDHAL_DDMISCELLANEOUS2CALLBACKS:
|
|
// This structure can be queried from the driver from DX7 onward
|
|
// using GetDriverInfo with GUID_Miscellaneous2Callbacks
|
|
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_GETDRIVERSTATE)(LPDDHAL_GETDRIVERSTATEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_DESTROYDDLOCAL)(LPDDHAL_DESTROYDDLOCALDATA);
|
|
//@@BEGIN_DDKSPLIT
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_ALPHABLT)(LPDDHAL_BLTDATA);
|
|
#ifdef POSTPONED2
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_SETSPRITEDISPLAYLIST)(LPDDHAL_SETSPRITEDISPLAYLISTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_RESIZE)(LPDDHAL_RESIZEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHAL_CAPTURECOMPOSITIONBUFFER)(LPDDHAL_CAPTURECOMPOSITIONBUFFERDATA);
|
|
#endif //POSTPONED2
|
|
//@@END_DDKSPLIT
|
|
|
|
typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS {
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1
|
|
LPDDHAL_ALPHABLT AlphaBlt;
|
|
#else
|
|
//@@END_DDKSPLIT
|
|
LPVOID Reserved;
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif
|
|
//@@END_DDKSPLIT
|
|
LPDDHAL_CREATESURFACEEX CreateSurfaceEx;
|
|
LPDDHAL_GETDRIVERSTATE GetDriverState;
|
|
LPDDHAL_DESTROYDDLOCAL DestroyDDLocal;
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef POSTPONED2
|
|
LPDDHAL_SETSPRITEDISPLAYLIST SetSpriteDisplayList;
|
|
LPDDHAL_RESIZE Resize;
|
|
LPDDHAL_CAPTURECOMPOSITIONBUFFER CaptureCompositionBuffer;
|
|
#endif //POSTPONED2
|
|
//@@END_DDKSPLIT
|
|
} DDHAL_DDMISCELLANEOUS2CALLBACKS, *LPDDHAL_DDMISCELLANEOUS2CALLBACKS;
|
|
|
|
#define DDHAL_MISC2CB32_CREATESURFACEEX 0x00000002l
|
|
#define DDHAL_MISC2CB32_GETDRIVERSTATE 0x00000004l
|
|
#define DDHAL_MISC2CB32_DESTROYDDLOCAL 0x00000008l
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
#define DDHAL_MISC2CB32_ALPHABLT 0x00000001l
|
|
// ***** POSTPONED2 fields must NOT be ahead of other field as dwFlags bits must be contiguous
|
|
// ValidateCallbacks() is enforing this ******
|
|
#ifdef POSTPONED2
|
|
#define DDHAL_MISC2CB32_SETSPRITEDISPLAYLIST 0x00000008l
|
|
#define DDHAL_MISC2CB32_RESIZE 0x00000010l
|
|
#define DDHAL_MISC2CB32_CAPTURECOMPOSITIONBUFFER 0x00000020l
|
|
#endif //POSTPONED2
|
|
//@@END_DDKSPLIT
|
|
|
|
#define DDMISCELLANEOUS2CALLBACKSSIZE sizeof(DDHAL_DDMISCELLANEOUS2CALLBACKS)
|
|
|
|
|
|
/*
|
|
* DIRECTDRAWEXEBUF pseudo object callbacks
|
|
*
|
|
* NOTE: Execute buffers are not a distinct object type, they piggy back off
|
|
* the surface data structures and high level API. However, they have their
|
|
* own HAL callbacks as they may have different driver semantics from "normal"
|
|
* surfaces. They also piggy back off the HAL data structures.
|
|
*
|
|
* !!! NOTE: Need to resolve whether we export execute buffer copying as a
|
|
* blit or some other from of copy instruction.
|
|
*/
|
|
typedef DWORD (FAR PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA );
|
|
typedef DWORD (FAR PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF)(LPDDHAL_CREATESURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF)(LPDDHAL_DESTROYSURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF)(LPDDHAL_LOCKDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF)(LPDDHAL_UNLOCKDATA);
|
|
|
|
typedef struct _DDHAL_DDEXEBUFCALLBACKS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer;
|
|
LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer;
|
|
LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer;
|
|
LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer;
|
|
LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer;
|
|
} DDHAL_DDEXEBUFCALLBACKS;
|
|
typedef DDHAL_DDEXEBUFCALLBACKS FAR *LPDDHAL_DDEXEBUFCALLBACKS;
|
|
|
|
#define DDEXEBUFCALLBACKSSIZE sizeof( DDHAL_DDEXEBUFCALLBACKS )
|
|
|
|
#define DDHAL_EXEBUFCB32_CANCREATEEXEBUF 0x00000001l
|
|
#define DDHAL_EXEBUFCB32_CREATEEXEBUF 0x00000002l
|
|
#define DDHAL_EXEBUFCB32_DESTROYEXEBUF 0x00000004l
|
|
#define DDHAL_EXEBUFCB32_LOCKEXEBUF 0x00000008l
|
|
#define DDHAL_EXEBUFCB32_UNLOCKEXEBUF 0x00000010l
|
|
|
|
/*
|
|
* DIRECTVIDEOPORT object callbacks
|
|
*/
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_CANCREATEVIDEOPORT)(LPDDHAL_CANCREATEVPORTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_CREATEVIDEOPORT)(LPDDHAL_CREATEVPORTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_FLIP)(LPDDHAL_FLIPVPORTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_GETBANDWIDTH)(LPDDHAL_GETVPORTBANDWIDTHDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_GETINPUTFORMATS)(LPDDHAL_GETVPORTINPUTFORMATDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_GETOUTPUTFORMATS)(LPDDHAL_GETVPORTOUTPUTFORMATDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_GETFIELD)(LPDDHAL_GETVPORTFIELDDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_GETLINE)(LPDDHAL_GETVPORTLINEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_GETVPORTCONNECT)(LPDDHAL_GETVPORTCONNECTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_DESTROYVPORT)(LPDDHAL_DESTROYVPORTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_GETFLIPSTATUS)(LPDDHAL_GETVPORTFLIPSTATUSDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_UPDATE)(LPDDHAL_UPDATEVPORTDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_WAITFORSYNC)(LPDDHAL_WAITFORVPORTSYNCDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_GETSIGNALSTATUS)(LPDDHAL_GETVPORTSIGNALDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALVPORTCB_COLORCONTROL)(LPDDHAL_VPORTCOLORDATA);
|
|
|
|
typedef struct _DDHAL_DDVIDEOPORTCALLBACKS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHALVPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort;
|
|
LPDDHALVPORTCB_CREATEVIDEOPORT CreateVideoPort;
|
|
LPDDHALVPORTCB_FLIP FlipVideoPort;
|
|
LPDDHALVPORTCB_GETBANDWIDTH GetVideoPortBandwidth;
|
|
LPDDHALVPORTCB_GETINPUTFORMATS GetVideoPortInputFormats;
|
|
LPDDHALVPORTCB_GETOUTPUTFORMATS GetVideoPortOutputFormats;
|
|
LPVOID lpReserved1;
|
|
LPDDHALVPORTCB_GETFIELD GetVideoPortField;
|
|
LPDDHALVPORTCB_GETLINE GetVideoPortLine;
|
|
LPDDHALVPORTCB_GETVPORTCONNECT GetVideoPortConnectInfo;
|
|
LPDDHALVPORTCB_DESTROYVPORT DestroyVideoPort;
|
|
LPDDHALVPORTCB_GETFLIPSTATUS GetVideoPortFlipStatus;
|
|
LPDDHALVPORTCB_UPDATE UpdateVideoPort;
|
|
LPDDHALVPORTCB_WAITFORSYNC WaitForVideoPortSync;
|
|
LPDDHALVPORTCB_GETSIGNALSTATUS GetVideoSignalStatus;
|
|
LPDDHALVPORTCB_COLORCONTROL ColorControl;
|
|
} DDHAL_DDVIDEOPORTCALLBACKS;
|
|
typedef DDHAL_DDVIDEOPORTCALLBACKS FAR *LPDDHAL_DDVIDEOPORTCALLBACKS;
|
|
|
|
#define DDVIDEOPORTCALLBACKSSIZE sizeof( DDHAL_DDVIDEOPORTCALLBACKS )
|
|
|
|
#define DDHAL_VPORT32_CANCREATEVIDEOPORT 0x00000001l
|
|
#define DDHAL_VPORT32_CREATEVIDEOPORT 0x00000002l
|
|
#define DDHAL_VPORT32_FLIP 0x00000004l
|
|
#define DDHAL_VPORT32_GETBANDWIDTH 0x00000008l
|
|
#define DDHAL_VPORT32_GETINPUTFORMATS 0x00000010l
|
|
#define DDHAL_VPORT32_GETOUTPUTFORMATS 0x00000020l
|
|
#define DDHAL_VPORT32_GETFIELD 0x00000080l
|
|
#define DDHAL_VPORT32_GETLINE 0x00000100l
|
|
#define DDHAL_VPORT32_GETCONNECT 0x00000200l
|
|
#define DDHAL_VPORT32_DESTROY 0x00000400l
|
|
#define DDHAL_VPORT32_GETFLIPSTATUS 0x00000800l
|
|
#define DDHAL_VPORT32_UPDATE 0x00001000l
|
|
#define DDHAL_VPORT32_WAITFORSYNC 0x00002000l
|
|
#define DDHAL_VPORT32_GETSIGNALSTATUS 0x00004000l
|
|
#define DDHAL_VPORT32_COLORCONTROL 0x00008000l
|
|
|
|
/*
|
|
* DIRECTDRAWCOLORCONTROL object callbacks
|
|
*/
|
|
typedef DWORD (FAR PASCAL *LPDDHALCOLORCB_COLORCONTROL)(LPDDHAL_COLORCONTROLDATA);
|
|
|
|
typedef struct _DDHAL_DDCOLORCONTROLCALLBACKS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHALCOLORCB_COLORCONTROL ColorControl;
|
|
} DDHAL_DDCOLORCONTROLCALLBACKS;
|
|
typedef DDHAL_DDCOLORCONTROLCALLBACKS FAR *LPDDHAL_DDCOLORCONTROLCALLBACKS;
|
|
|
|
#define DDCOLORCONTROLCALLBACKSSIZE sizeof( DDHAL_DDCOLORCONTROLCALLBACKS )
|
|
|
|
#define DDHAL_COLOR_COLORCONTROL 0x00000001l
|
|
|
|
/*
|
|
* DIRECTDRAWSURFACEKERNEL object callbacks
|
|
* This structure can be queried from the driver from DX5 onward
|
|
* using GetDriverInfo with GUID_KernelCallbacks
|
|
*/
|
|
typedef DWORD (FAR PASCAL *LPDDHALKERNELCB_SYNCSURFACE)(LPDDHAL_SYNCSURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALKERNELCB_SYNCVIDEOPORT)(LPDDHAL_SYNCVIDEOPORTDATA);
|
|
|
|
typedef struct _DDHAL_DDKERNELCALLBACKS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHALKERNELCB_SYNCSURFACE SyncSurfaceData;
|
|
LPDDHALKERNELCB_SYNCVIDEOPORT SyncVideoPortData;
|
|
} DDHAL_DDKERNELCALLBACKS, *LPDDHAL_DDKERNELCALLBACKS;
|
|
|
|
#define DDHAL_KERNEL_SYNCSURFACEDATA 0x00000001l
|
|
#define DDHAL_KERNEL_SYNCVIDEOPORTDATA 0x00000002l
|
|
|
|
#define DDKERNELCALLBACKSSIZE sizeof(DDHAL_DDKERNELCALLBACKS)
|
|
|
|
typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)( LPDDGAMMARAMP, LPBYTE);
|
|
|
|
/*
|
|
* DIRECTDRAWMOTIONCOMP object callbacks
|
|
*/
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETGUIDS)( LPDDHAL_GETMOCOMPGUIDSDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETFORMATS)( LPDDHAL_GETMOCOMPFORMATSDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_CREATE)( LPDDHAL_CREATEMOCOMPDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETCOMPBUFFINFO)( LPDDHAL_GETMOCOMPCOMPBUFFDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETINTERNALINFO)( LPDDHAL_GETINTERNALMOCOMPDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_BEGINFRAME)( LPDDHAL_BEGINMOCOMPFRAMEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_ENDFRAME)( LPDDHAL_ENDMOCOMPFRAMEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_RENDER)( LPDDHAL_RENDERMOCOMPDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_QUERYSTATUS)( LPDDHAL_QUERYMOCOMPSTATUSDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_DESTROY)( LPDDHAL_DESTROYMOCOMPDATA);
|
|
|
|
typedef struct _DDHAL_DDMOTIONCOMPCALLBACKS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHALMOCOMPCB_GETGUIDS GetMoCompGuids;
|
|
LPDDHALMOCOMPCB_GETFORMATS GetMoCompFormats;
|
|
LPDDHALMOCOMPCB_CREATE CreateMoComp;
|
|
LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo;
|
|
LPDDHALMOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo;
|
|
LPDDHALMOCOMPCB_BEGINFRAME BeginMoCompFrame;
|
|
LPDDHALMOCOMPCB_ENDFRAME EndMoCompFrame;
|
|
LPDDHALMOCOMPCB_RENDER RenderMoComp;
|
|
LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus;
|
|
LPDDHALMOCOMPCB_DESTROY DestroyMoComp;
|
|
} DDHAL_DDMOTIONCOMPCALLBACKS;
|
|
typedef DDHAL_DDMOTIONCOMPCALLBACKS FAR *LPDDHAL_DDMOTIONCOMPCALLBACKS;
|
|
|
|
#define DDMOTIONCOMPCALLBACKSSIZE sizeof( DDHAL_DDMOTIONCOMPCALLBACKS )
|
|
|
|
#define DDHAL_MOCOMP32_GETGUIDS 0x00000001
|
|
#define DDHAL_MOCOMP32_GETFORMATS 0x00000002
|
|
#define DDHAL_MOCOMP32_CREATE 0x00000004
|
|
#define DDHAL_MOCOMP32_GETCOMPBUFFINFO 0x00000008
|
|
#define DDHAL_MOCOMP32_GETINTERNALINFO 0x00000010
|
|
#define DDHAL_MOCOMP32_BEGINFRAME 0x00000020
|
|
#define DDHAL_MOCOMP32_ENDFRAME 0x00000040
|
|
#define DDHAL_MOCOMP32_RENDER 0x00000080
|
|
#define DDHAL_MOCOMP32_QUERYSTATUS 0x00000100
|
|
#define DDHAL_MOCOMP32_DESTROY 0x00000200
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef POSTPONED
|
|
/*
|
|
* DDHAL_DDUMODEDRVINFO object callbacks
|
|
* Contains the data required for supporting user mode drivers.
|
|
* This structure can be queried from the driver from DX6 onwards using:
|
|
* GetDriverInfo with GUID_UserModeDriverInfo
|
|
*/
|
|
typedef struct _DDHAL_DDUMODEDRVINFO
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPSTR lpszDllName;
|
|
GUID uniqueGuid;
|
|
ULONG_PTR dwReserved1;
|
|
} DDHAL_DDUMODEDRVINFO, *LPDDHAL_DDUMODEDRVINFO;
|
|
#define DDHAL_DDUMODEDRVINFOSIZE sizeof( DDHAL_DDUMODEDRVINFO )
|
|
|
|
#define DDHAL_UMODEDRV_DLLNAME 0x00000001
|
|
#define DDHAL_UMODEDRV_UNIQGUID 0x00000002
|
|
#define DDHAL_UMODEDRV_ALL 0x00000003
|
|
|
|
|
|
/*
|
|
* DDHAL_DDUMODEDRVPASSWD object callbacks
|
|
* This structure is used to query the usermode driver for its password GUID
|
|
* (GetDriverInfo with GUID_UserModeDriverPassword)
|
|
*/
|
|
typedef struct _DDHAL_DDUMODEDRVPASSWD
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
GUID passwdGuid;
|
|
} DDHAL_DDUMODEDRVPASSWD, *LPDDHAL_DDUMODEDRVPASSWD;
|
|
#define DDHAL_DDUMODEDRVPASSWDSIZE sizeof( DDHAL_DDUMODEDRVPASSWD )
|
|
|
|
#define DDHAL_UMODEDRV_GUID 0x00000001
|
|
|
|
|
|
/*
|
|
* This structure is used to store relevant information about the
|
|
* user-mode driver in DDRAW_GBL
|
|
*/
|
|
typedef struct _DDUMODEDRVINFO
|
|
{
|
|
LPVOID lpszDllName; // need not be saved
|
|
HMODULE hUmodeDll;
|
|
GUID uniqueGuid; // need not be saved
|
|
LPDDHAL_GETDRIVERINFO GetDriverInfo;
|
|
} DDUMODEDRVINFO, *LPDDUMODEDRVINFO;
|
|
|
|
//
|
|
// DDOPTSURFACE
|
|
// Contains the callbacks and data required for supporting Optimized surfaces.
|
|
// This structure can be queried from the driver from DX6 onwards using:
|
|
// GetDriverInfo with GUID_OptSurfaceKmodeInfo and
|
|
// GetUmodeDriverInfo with GUID_OptSurfaceUmodeInfo.
|
|
//
|
|
typedef DWORD (FAR PASCAL *LPDDHALOPTSURFCB_CANOPTIMIZESURFACE)( LPDDHAL_CANOPTIMIZESURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALOPTSURFCB_OPTIMIZESURFACE)( LPDDHAL_OPTIMIZESURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALOPTSURFCB_UNOPTIMIZESURFACE)( LPDDHAL_UNOPTIMIZESURFACEDATA);
|
|
typedef DWORD (FAR PASCAL *LPDDHALOPTSURFCB_COPYOPTSURFACE)( LPDDHAL_COPYOPTSURFACEDATA);
|
|
|
|
typedef DWORD (FAR PASCAL *LPDDHALOPTSURFCB_KMODESVC)( LPDDHAL_KMODESVCDATA);
|
|
|
|
//
|
|
// This structure is used to store the Opt Surface information
|
|
// in DDRAWI_GBL
|
|
//
|
|
typedef struct _DDOPTSURFACEINFO
|
|
{
|
|
// Umode information
|
|
DWORD dwNumGuids;
|
|
LPGUID lpGuidArray;
|
|
LPDDHALOPTSURFCB_CANOPTIMIZESURFACE CanOptimizeSurface;
|
|
LPDDHALOPTSURFCB_OPTIMIZESURFACE OptimizeSurface;
|
|
LPDDHALOPTSURFCB_UNOPTIMIZESURFACE UnOptimizeSurface;
|
|
LPDDHALOPTSURFCB_COPYOPTSURFACE CopyOptSurface;
|
|
|
|
// Kmode information
|
|
LPDDHALOPTSURFCB_KMODESVC KmodeService;
|
|
} DDOPTSURFACEINFO, *LPDDOPTSURFACEINFO;
|
|
|
|
//
|
|
// This structure is used for obtaining Opt Surface kernel mode data
|
|
//
|
|
typedef struct _DDHAL_DDOPTSURFACEKMODEINFO
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
LPDDHALOPTSURFCB_KMODESVC KmodeService;
|
|
ULONG_PTR dwReserved2;
|
|
} DDHAL_DDOPTSURFACEKMODEINFO, *LPDDHAL_DDOPTSURFACEKMODEINFO;
|
|
#define DDOPTSURFACEKMODEINFOSIZE sizeof( DDHAL_DDOPTSURFACEKMODEINFO )
|
|
|
|
#define DDHAL_OPTSURFKMODE_KMODESVC 0x00000001
|
|
#define DDHAL_OPTSURFKMODE_ALL 0x00000001
|
|
|
|
//
|
|
// This structure is used for obtaining Opt Surface user mode data
|
|
//
|
|
typedef struct _DDHAL_DDOPTSURFACEUMODEINFO
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwFlags;
|
|
DWORD dwNumGuids;
|
|
LPGUID lpGuidArray;
|
|
LPDDHALOPTSURFCB_CANOPTIMIZESURFACE CanOptimizeSurface;
|
|
LPDDHALOPTSURFCB_OPTIMIZESURFACE OptimizeSurface;
|
|
LPDDHALOPTSURFCB_UNOPTIMIZESURFACE UnOptimizeSurface;
|
|
LPDDHALOPTSURFCB_COPYOPTSURFACE CopyOptSurface;
|
|
ULONG_PTR dwReserved1;
|
|
ULONG_PTR dwReserved2;
|
|
} DDHAL_DDOPTSURFACEUMODEINFO, *LPDDHAL_DDOPTSURFACEUMODEINFO;
|
|
#define DDOPTSURFACEUMODEINFOSIZE sizeof( DDHAL_DDOPTSURFACEUMODEINFO )
|
|
|
|
#define DDHAL_OPTSURFUMODE_NUMGUIDS 0x00000001
|
|
#define DDHAL_OPTSURFUMODE_GUIDARRAY 0x00000002
|
|
#define DDHAL_OPTSURFUMODE_CANOPTIMIZESURFACE 0x00000004
|
|
#define DDHAL_OPTSURFUMODE_OPTIMIZESURFACE 0x00000008
|
|
#define DDHAL_OPTSURFUMODE_UNOPTIMIZESURFACE 0x00000010
|
|
#define DDHAL_OPTSURFUMODE_COPYOPTSURFACE 0x00000020
|
|
#define DDHAL_OPTSURFUMODE_ALL 0x0000003f
|
|
|
|
#endif //POSTPONED
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* CALLBACK RETURN VALUES
|
|
* * these are values returned by the driver from the above callback routines
|
|
*/
|
|
/*
|
|
* indicates that the display driver didn't do anything with the call
|
|
*/
|
|
#define DDHAL_DRIVER_NOTHANDLED 0x00000000l
|
|
|
|
/*
|
|
* indicates that the display driver handled the call; HRESULT value is valid
|
|
*/
|
|
#define DDHAL_DRIVER_HANDLED 0x00000001l
|
|
|
|
/*
|
|
* indicates that the display driver couldn't handle the call because it
|
|
* ran out of color key hardware resources
|
|
*/
|
|
#define DDHAL_DRIVER_NOCKEYHW 0x00000002l
|
|
|
|
/*
|
|
* Capabilities structure for non-local video memory
|
|
*/
|
|
typedef struct _DDNONLOCALVIDMEMCAPS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts
|
|
DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts
|
|
DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts
|
|
DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts
|
|
DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts
|
|
} DDNONLOCALVIDMEMCAPS;
|
|
typedef struct _DDNONLOCALVIDMEMCAPS FAR *LPDDNONLOCALVIDMEMCAPS;
|
|
|
|
|
|
/*
|
|
* More driver surface capabilities (in addition to those described in DDCORECAPS).
|
|
* This struct contains the caps bits added to the DDCAPS.ddsCaps structure in DX6.
|
|
*/
|
|
typedef struct _DDMORESURFACECAPS
|
|
{
|
|
DWORD dwSize; // size of DDMORESURFACECAPS structure
|
|
DDSCAPSEX ddsCapsMore;
|
|
/*
|
|
* The DDMORESURFACECAPS struct is of variable size. The following list may be
|
|
* filled in by DX6-aware drivers (see DDVERSIONINFO) to restrict their
|
|
* video memory heaps (those which are exposed to DirectDraw) to
|
|
* certain sets of DDSCAPS_ bits. Thse entries are exactly analogous to
|
|
* the ddsCaps and ddsCapsAlt members of the VIDMEM structures listed in
|
|
* the VIDMEMINFO.pvmList member of DDHALINFO.vmiData. There should be
|
|
* exactly DDHALINFO.vmiData.dwNumHeaps copies of tagExtendedHeapRestrictions
|
|
* in this struct. The size of this struct is thus:
|
|
* DDMORESURFACECAPS.dwSize = sizeof(DDMORESURFACECAPS) +
|
|
* (DDHALINFO.vmiData.dwNumHeaps-1) * sizeof(DDSCAPSEX)*2;
|
|
* Note the -1 accounts for the fact that DDMORESURFACECAPS is declared to have 1
|
|
* tagExtendedHeapRestrictions member.
|
|
*/
|
|
struct tagExtendedHeapRestrictions
|
|
{
|
|
DDSCAPSEX ddsCapsEx;
|
|
DDSCAPSEX ddsCapsExAlt;
|
|
} ddsExtendedHeapRestrictions[1];
|
|
} DDMORESURFACECAPS, FAR * LPDDMORESURFACECAPS;
|
|
|
|
// Stereo, driver returns DD_OK if mode is ok for stereo
|
|
typedef struct _DDSTEREOMODE
|
|
{
|
|
DWORD dwSize; // size of DDSTEREOMODECAPS structure
|
|
|
|
DWORD dwHeight;
|
|
DWORD dwWidth;
|
|
DWORD dwBpp;
|
|
DWORD dwRefreshRate;
|
|
|
|
BOOL bSupported; // driver supports this video mode...
|
|
|
|
} DDSTEREOMODE, FAR * LPDDSTEREOMODE;
|
|
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
// For DX7, we define more DDraw driver caps (in addition to those in DDCORECAPS).
|
|
typedef struct _DDMORECAPS
|
|
{
|
|
DWORD dwSize; // size of DDMORECAPS structure
|
|
DWORD dwAlphaCaps; // driver-specific alpha caps for overlays & Vmem->Vmem blts
|
|
DWORD dwSVBAlphaCaps; // driver-specific alpha capabilities for System->Vmem blts
|
|
DWORD dwVSBAlphaCaps; // driver-specific alpha capabilities for Vmem->System blts
|
|
DWORD dwSSBAlphaCaps; // driver-specific alpha capabilities for System->System blts
|
|
DWORD dwFilterCaps; // driver-specific filter caps for overlays & Vmem->Vmem blts
|
|
DWORD dwSVBFilterCaps; // driver-specific filter capabilities for System->Vmem blts
|
|
DWORD dwVSBFilterCaps; // driver-specific filter capabilities for Vmem->System blts
|
|
DWORD dwSSBFilterCaps; // driver-specific filter capabilities for System->System blts
|
|
#ifdef POSTPONED2
|
|
DWORD dwTransformCaps; // driver-specific transform caps for overlays & Vmem->Vmem blts
|
|
DWORD dwSVBTransformCaps; // driver-specific transform capabilities for System->Vmem blts
|
|
DWORD dwVSBTransformCaps; // driver-specific transform capabilities for Vmem->System blts
|
|
DWORD dwSSBTransformCaps; // driver-specific transformn capabilities for System->System blts
|
|
DWORD dwBltAffineMinifyLimit; // minification limit for affine-transformed blits
|
|
DWORD dwOverlayAffineMinifyLimit; // minification limit for affine-transformed overlays
|
|
#endif
|
|
} DDMORECAPS, FAR * LPDDMORECAPS;
|
|
//@@END_DDKSPLIT
|
|
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/*
|
|
* Private:
|
|
* Client data list element and head pointer
|
|
*/
|
|
typedef struct _PRIVATEDATANODE
|
|
{
|
|
GUID guid;
|
|
LPBYTE pData;
|
|
DWORD cbData;
|
|
DWORD dwFlags;
|
|
DWORD dwContentsStamp;
|
|
struct _PRIVATEDATANODE *pNext;
|
|
} PRIVATEDATANODE, FAR* LPPRIVATEDATANODE;
|
|
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* DDRAW palette interface struct
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWPALETTE_INT
|
|
{
|
|
LPVOID lpVtbl; // pointer to array of interface methods
|
|
LPDDRAWI_DDRAWPALETTE_LCL lpLcl; // pointer to interface data
|
|
LPDDRAWI_DDRAWPALETTE_INT lpLink; // link to next interface
|
|
DWORD dwIntRefCnt; // interface reference count
|
|
//@@BEGIN_DDKSPLIT
|
|
ULONG_PTR dwReserved1; // for DDrawEx
|
|
ULONG_PTR dwReserved2; // for DDrawEx
|
|
//@@END_DDKSPLIT
|
|
} DDRAWI_DDRAWPALETTE_INT;
|
|
|
|
/*
|
|
* DDRAW internal version of DIRECTDRAWPALETTE object; it has data after the vtable
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWPALETTE_GBL
|
|
{
|
|
DWORD dwRefCnt; // reference count
|
|
DWORD dwFlags; // flags
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; // PRIVATE: DIRECTDRAW object
|
|
DWORD dwProcessId; // owning process
|
|
LPPALETTEENTRY lpColorTable; // array of palette entries
|
|
union
|
|
{
|
|
ULONG_PTR dwReserved1; // reserved for use by display driver which created this object
|
|
HPALETTE hHELGDIPalette;
|
|
};
|
|
/*
|
|
* Fields added in version 5.0. Check if the ddraw version >= 5 (passed during
|
|
* driver initialization) to see if these fields will be present.
|
|
*/
|
|
DWORD dwDriverReserved; // For use by HAL, regardless of who created object
|
|
DWORD dwContentsStamp; // Incremented when palette changes.
|
|
/*
|
|
* Fields added in version 6
|
|
*/
|
|
DWORD dwSaveStamp; // Incremented when palette changes.
|
|
/*
|
|
* And in version 7
|
|
*/
|
|
DWORD dwHandle; //Handle used in drawprim2 palette notification
|
|
|
|
} DDRAWI_DDRAWPALETTE_GBL;
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/* Macro to bump the contents stamp so drivers can cheaply check for changed palette data.
|
|
* Zero means no information
|
|
*/
|
|
#define BUMP_PALETTE_STAMP(pal_gbl) \
|
|
if ( pal_gbl->dwContentsStamp ) \
|
|
{ \
|
|
pal_gbl->dwContentsStamp++; \
|
|
if ( 0 == pal_gbl->dwContentsStamp) \
|
|
pal_gbl->dwContentsStamp++; \
|
|
}
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* (CMcC) The palette no longer maintains a back pointer to the owning surface
|
|
* (there may now be many owning surfaces). So the lpDDSurface is now dwReserved0
|
|
* (this mod. assumes that sizeof(DWORD) == sizeof(LPDDRAWI_DDRAWSURFACE_LCL). A
|
|
* fairly safe assumption I think.
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWPALETTE_LCL
|
|
{
|
|
DWORD lpPalMore; // pointer to additional local data
|
|
LPDDRAWI_DDRAWPALETTE_GBL lpGbl; // pointer to data
|
|
ULONG_PTR dwUnused0; // not currently used.
|
|
DWORD dwLocalRefCnt; // local ref cnt
|
|
IUnknown FAR *pUnkOuter; // outer IUnknown
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; // pointer to owning local driver object
|
|
ULONG_PTR dwReserved1; // reserved for use by display driver
|
|
/*
|
|
* Added for DX6
|
|
*/
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1
|
|
LPPRIVATEDATANODE pPrivateDataHead;
|
|
IUnknown * pAddrefedThisOwner; //This is the ddraw object that created this
|
|
//palette, if nonzero. Must Release it when palette
|
|
//is released.
|
|
LPDDRAWI_DIRECTDRAW_INT lpDD_Int; // pointer to owning int
|
|
#else //1
|
|
//@@END_DDKSPLIT
|
|
ULONG_PTR dwDDRAWReserved1;
|
|
ULONG_PTR dwDDRAWReserved2;
|
|
ULONG_PTR dwDDRAWReserved3;
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif //1
|
|
//@@END_DDKSPLIT
|
|
|
|
} DDRAWI_DDRAWPALETTE_LCL;
|
|
|
|
// bit definition for dwFlags in DDRAWI_DDRAWPALETTE_GBL and
|
|
// dwPaletteFlags in D3DHAL_DP2SETPALETTE
|
|
#define DDRAWIPAL_256 0x00000001l // 256 entry palette
|
|
#define DDRAWIPAL_16 0x00000002l // 16 entry palette
|
|
#define DDRAWIPAL_GDI 0x00000004l // palette allocated through GDI
|
|
#define DDRAWIPAL_STORED_8 0x00000008l // palette stored as 8bpp/entry
|
|
#define DDRAWIPAL_STORED_16 0x00000010l // palette stored as 16bpp/entry
|
|
#define DDRAWIPAL_STORED_24 0x00000020l // palette stored as 24bpp/entry
|
|
#define DDRAWIPAL_EXCLUSIVE 0x00000040l // palette being used in exclusive mode
|
|
#define DDRAWIPAL_INHEL 0x00000080l // palette is done in the hel
|
|
#define DDRAWIPAL_DIRTY 0x00000100l // gdi palette out 'o sync
|
|
#define DDRAWIPAL_ALLOW256 0x00000200l // can fully update palette
|
|
#define DDRAWIPAL_4 0x00000400l // 4 entry palette
|
|
#define DDRAWIPAL_2 0x00000800l // 2 entry palette
|
|
#define DDRAWIPAL_STORED_8INDEX 0x00001000l // palette stored as 8-bit index into dst palette
|
|
#define DDRAWIPAL_ALPHA 0x00002000l // palette entries contain alpha
|
|
|
|
/*
|
|
* DDRAW clipper interface struct
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWCLIPPER_INT
|
|
{
|
|
LPVOID lpVtbl; // pointer to array of interface methods
|
|
LPDDRAWI_DDRAWCLIPPER_LCL lpLcl; // pointer to interface data
|
|
LPDDRAWI_DDRAWCLIPPER_INT lpLink; // link to next interface
|
|
DWORD dwIntRefCnt; // interface reference count
|
|
//@@BEGIN_DDKSPLIT
|
|
ULONG_PTR dwReserved1; // for DDrawEx
|
|
ULONG_PTR dwReserved2; // for DDrawEx
|
|
//@@END_DDKSPLIT
|
|
} DDRAWI_DDRAWCLIPPER_INT;
|
|
|
|
/*
|
|
* DDRAW internal version of DIRECTDRAWCLIPPER object; it has data after the vtable
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWCLIPPER_GBL
|
|
{
|
|
DWORD dwRefCnt; // reference count
|
|
DWORD dwFlags; // flags
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // PRIVATE: DIRECTDRAW object
|
|
DWORD dwProcessId; // owning process
|
|
ULONG_PTR dwReserved1; // reserved for use by display driver
|
|
ULONG_PTR hWnd; // window
|
|
LPRGNDATA lpStaticClipList; // clip list set by app
|
|
} DDRAWI_DDRAWCLIPPER_GBL;
|
|
|
|
/*
|
|
* (CMcC) As with palettes, the clipper no longer maintains a back pointer to the
|
|
* owning surface (there may now be many owning surfaces). So the lpDDSurface
|
|
* is now dwReserved0 (this mod. assumes that sizeof(DWORD) ==
|
|
* sizeof(LPDDRAWI_DDRAWSURFACE_LCL). A fairly safe assumption I think.
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWCLIPPER_LCL
|
|
{
|
|
DWORD lpClipMore; // pointer to additional local data
|
|
LPDDRAWI_DDRAWCLIPPER_GBL lpGbl; // pointer to data
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; // pointer to owning local DD object
|
|
DWORD dwLocalRefCnt; // local ref cnt
|
|
IUnknown FAR *pUnkOuter; // outer IUnknown
|
|
LPDDRAWI_DIRECTDRAW_INT lpDD_int; // pointer to owning DD object interface
|
|
ULONG_PTR dwReserved1; // reserved for use by display driver
|
|
IUnknown * pAddrefedThisOwner; //This is the ddraw object that created this
|
|
//clipper, if nonzero. Must Release it when clipper
|
|
//is released.
|
|
} DDRAWI_DDRAWCLIPPER_LCL;
|
|
|
|
#define DDRAWICLIP_WATCHWINDOW 0x00000001l
|
|
#define DDRAWICLIP_ISINITIALIZED 0x00000002l
|
|
#define DDRAWICLIP_INMASTERSPRITELIST 0x00000004l // clipper is referenced in master sprite list
|
|
|
|
/*
|
|
* ATTACHLIST - internally used to maintain list of attached surfaces
|
|
*/
|
|
typedef struct _ATTACHLIST
|
|
{
|
|
DWORD dwFlags;
|
|
struct _ATTACHLIST FAR *lpLink; // link to next attached surface
|
|
struct _DDRAWI_DDRAWSURFACE_LCL FAR *lpAttached; // attached surface local obj
|
|
struct _DDRAWI_DDRAWSURFACE_INT FAR *lpIAttached; // attached surface interface
|
|
} ATTACHLIST;
|
|
typedef ATTACHLIST FAR *LPATTACHLIST;
|
|
#define DDAL_IMPLICIT 0x00000001l
|
|
|
|
/*
|
|
* DBLNODE - a node in a doubly-linked list of surface interfaces
|
|
*/
|
|
typedef struct _DBLNODE
|
|
{
|
|
struct _DBLNODE FAR *next; // link to next node
|
|
struct _DBLNODE FAR *prev; // link to previous node
|
|
LPDDRAWI_DDRAWSURFACE_LCL object; // link to object
|
|
LPDDRAWI_DDRAWSURFACE_INT object_int; // object interface
|
|
} DBLNODE;
|
|
typedef DBLNODE FAR *LPDBLNODE;
|
|
|
|
/*
|
|
* ACCESSRECTLIST - internally used to all rectangles that are accessed on a surface
|
|
*/
|
|
typedef struct _ACCESSRECTLIST
|
|
{
|
|
struct _ACCESSRECTLIST FAR *lpLink; // link to next attached surface
|
|
RECT rDest; // rectangle being used
|
|
LPDDRAWI_DIRECTDRAW_LCL lpOwner; // owning local object
|
|
LPVOID lpSurfaceData; // associated screen ptr
|
|
DWORD dwFlags; // PRIVATE: flags
|
|
LPHEAPALIASINFO lpHeapAliasInfo; // PRIVATE: aliased heaps being used by this lock
|
|
} ACCESSRECTLIST;
|
|
typedef ACCESSRECTLIST FAR *LPACCESSRECTLIST;
|
|
|
|
#define ACCESSRECT_VRAMSTYLE 0x00000001L // PRIVATE: this lock is vram style (vidmem or implict sysmem)
|
|
#define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002L // PRIVATE: this lock is not holding the Win16 lock
|
|
#define ACCESSRECT_BROKEN 0x00000004L // PRIVATE: this lock was broken by an invalidate - don't call HAL on unlock
|
|
|
|
#ifndef WIN95
|
|
/*
|
|
* Do not change the size of this struct. This will move various members of surface and ddraw
|
|
* structs and will prevent binaries from running on old win2k systems (or mismatched later NT builds)
|
|
*/
|
|
typedef struct _DISPLAYMODEINFO
|
|
{
|
|
WORD wWidth;
|
|
WORD wHeight;
|
|
BYTE wBPP;
|
|
BYTE wMonitorsAttachedToDesktop;
|
|
WORD wRefreshRate;
|
|
} DISPLAYMODEINFO;
|
|
typedef struct _DISPLAYMODEINFO *LPDISPLAYMODEINFO;
|
|
|
|
#define EQUAL_DISPLAYMODE(a, b) (0 == memcmp(&(a), &(b), sizeof (DISPLAYMODEINFO)))
|
|
#endif
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/*
|
|
* Interface addref/release tracking structs
|
|
*/
|
|
//#define REFTRACKING
|
|
#ifdef REFTRACKING
|
|
typedef struct _DDRAWI_REFTRACKNODE
|
|
{
|
|
LPVOID pReturnAddress;
|
|
DWORD dwAddrefCount;
|
|
DWORD dwReleaseCount;
|
|
struct _DDRAWI_REFTRACKNODE FAR * pNext;
|
|
} DDRAWI_REFTRACKNODE, FAR * LPDDRAWI_REFTRACKNODE;
|
|
|
|
typedef struct _DDRAWI_REFTRACK
|
|
{
|
|
LPVOID pLastAddref;
|
|
LPVOID pLastRelease;
|
|
LPDDRAWI_REFTRACKNODE pHead;
|
|
} DDRAW_REFTRACK;
|
|
|
|
//in ddisunk.c:
|
|
extern void AddRefTrack(LPVOID * p);
|
|
extern void ReleaseTrack(LPVOID * p);
|
|
extern void DumpRefTrack(LPVOID p);
|
|
|
|
#define REFTRACKVAR DDRAW_REFTRACK RefTrack;
|
|
#define ADDREFTRACK(pInt) AddRefTrack(&pInt)
|
|
#define RELEASETRACK(pInt) ReleaseTrack(&pInt)
|
|
#define DUMPREFTRACK(pInt) DumpRefTrack(pInt)
|
|
|
|
#else
|
|
|
|
#define REFTRACKVAR
|
|
#define ADDREFTRACK(a)
|
|
#define RELEASETRACK(a)
|
|
#define DUMPREFTRACK(pInt)
|
|
|
|
#endif //REFTRACKING
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* DDRAW surface interface struct
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWSURFACE_INT
|
|
{
|
|
LPVOID lpVtbl; // pointer to array of interface methods
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpLcl; // pointer to interface data
|
|
LPDDRAWI_DDRAWSURFACE_INT lpLink; // link to next interface
|
|
DWORD dwIntRefCnt; // interface reference count
|
|
//@@BEGIN_DDKSPLIT
|
|
ULONG_PTR dwReserved1; // for DDrawEx
|
|
ULONG_PTR dwReserved2; // for DDrawEx
|
|
REFTRACKVAR
|
|
//@@END_DDKSPLIT
|
|
} DDRAWI_DDRAWSURFACE_INT;
|
|
|
|
/*
|
|
* DDRAW internal version of DIRECTDRAWSURFACE struct
|
|
*
|
|
* the GBL structure is global data for all duplicate objects
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWSURFACE_GBL
|
|
{
|
|
DWORD dwRefCnt; // reference count
|
|
DWORD dwGlobalFlags; // global flags
|
|
union
|
|
{
|
|
LPACCESSRECTLIST lpRectList; // list of accesses
|
|
DWORD dwBlockSizeY; // block size that display driver requested (return)
|
|
LONG lSlicePitch; // slice pitch for volume textures
|
|
};
|
|
union
|
|
{
|
|
LPVMEMHEAP lpVidMemHeap; // heap vidmem was alloc'ed from
|
|
DWORD dwBlockSizeX; // block size that display driver requested (return)
|
|
};
|
|
union
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // internal DIRECTDRAW object
|
|
LPVOID lpDDHandle; // handle to internal DIRECTDRAW object
|
|
// for use by display driver
|
|
// when calling fns in DDRAW16.DLL
|
|
};
|
|
FLATPTR fpVidMem; // pointer to video memory
|
|
union
|
|
{
|
|
LONG lPitch; // pitch of surface
|
|
DWORD dwLinearSize; // linear size of non-rectangular surface
|
|
};
|
|
WORD wHeight; // height of surface
|
|
WORD wWidth; // width of surface
|
|
DWORD dwUsageCount; // number of access to this surface
|
|
ULONG_PTR dwReserved1; // reserved for use by display driver
|
|
//
|
|
// NOTE: this part of the structure is ONLY allocated if the pixel
|
|
// format differs from that of the primary display
|
|
//
|
|
DDPIXELFORMAT ddpfSurface; // pixel format of surface
|
|
} DDRAWI_DDRAWSURFACE_GBL;
|
|
|
|
/*
|
|
* This is an extender structure that is allocated off the end of the SURFACE_GBL
|
|
* structure. DO NOT place any structures whose size can change in here.
|
|
*/
|
|
#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \
|
|
(*(LPDDRAWI_DDRAWSURFACE_GBL_MORE *) \
|
|
((BYTE *)psurf_gbl - sizeof(DWORD_PTR)))
|
|
|
|
/*
|
|
* Return the physical memory pointer for a given surface global object.
|
|
*
|
|
* NOTE: The physical memory pointer is ONLY valid for surfaces allocated from
|
|
* non-local video memory. This field will not be valid for system memory or
|
|
* local video memory surfaces.
|
|
*/
|
|
#define SURFACE_PHYSICALVIDMEM( psurf_gbl ) \
|
|
( GET_LPDDRAWSURFACE_GBL_MORE( psurf_gbl )->fpPhysicalVidMem )
|
|
|
|
/*
|
|
* NOTE: This structure contains a set of fields for describing linear to physical
|
|
* page mappings in the case of page locked system memory. It can also contain the
|
|
* physical surface pointer of a surface in non-local memory. As there is no point
|
|
* in having both a linear to physical page translation table and a physical memory
|
|
* pointer for the same surface they are placed in a union.
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE
|
|
{
|
|
DWORD dwSize;
|
|
union
|
|
{
|
|
DWORD dwPhysicalPageTable; // Physical address of page table (array of physical addresses/one per 4K page)
|
|
FLATPTR fpPhysicalVidMem; // Physical address of surface (non-local video memory only)
|
|
};
|
|
LPDWORD pPageTable; // Linear address of page table
|
|
DWORD cPages; // Number of Pages
|
|
ULONG_PTR dwSavedDCContext; // PRIVATE: For use by DDSurface::GetDC
|
|
FLATPTR fpAliasedVidMem; // PRIVATE: Alias for original fpVidMem
|
|
ULONG_PTR dwDriverReserved; // Reserved for driver use (both system and video memory surfaces)
|
|
ULONG_PTR dwHELReserved; // PRIVATE: For HEL use only
|
|
DWORD cPageUnlocks; // Incremented whenever a surface is PageUnlocked
|
|
ULONG_PTR hKernelSurface; // Kernel handle for this surface
|
|
DWORD dwKernelRefCnt; // Ref count for kernel handle
|
|
LPDDCOLORCONTROL lpColorInfo; // PRIVATE: Initial color control settings
|
|
FLATPTR fpNTAlias; // PRIVATE: Used internally by NT DirectDraw
|
|
DWORD dwContentsStamp; // Changes when surface data may have changed. 0 means no information
|
|
LPVOID lpvUnswappedDriverReserved; // Reserved for use by display driver. Is not swapped when Flip is called on this surface
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1
|
|
LPVOID pvContents; // Persistent-content memory
|
|
DWORD dwBackupStamp; // Value of dwContentsStamp when contents restored
|
|
DWORD dwSaveStamp; // Value of dwContentsStamp when contents saved via IPersistX
|
|
#else //1
|
|
//@@END_DDKSPLIT
|
|
LPVOID lpDDRAWReserved2;
|
|
DWORD dwDDRAWReserved1;
|
|
DWORD dwDDRAWReserved2;
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif //1
|
|
//@@END_DDKSPLIT
|
|
FLATPTR fpAliasOfVidMem; // PRIVATE: The original VidMem pointer of which fpAliasedVidMem is an alias of
|
|
// This is used to compare with a given fpVidMem to see if we can use the cached fpAliasedVidMem or
|
|
// if we need to call GetAliasedVidMem.
|
|
} DDRAWI_DDRAWSURFACE_GBL_MORE;
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/* Macro to bump the contents stamp so drivers can cheaply check for changed surface data.
|
|
* Zero means no information
|
|
*/
|
|
#define BUMP_SURFACE_STAMP(surf_gbl) \
|
|
if ( GET_LPDDRAWSURFACE_GBL_MORE(surf_gbl)->dwContentsStamp ) \
|
|
{ \
|
|
GET_LPDDRAWSURFACE_GBL_MORE(surf_gbl)->dwContentsStamp++; \
|
|
if ( 0 ==GET_LPDDRAWSURFACE_GBL_MORE(surf_gbl)->dwContentsStamp) \
|
|
GET_LPDDRAWSURFACE_GBL_MORE(surf_gbl)->dwContentsStamp++; \
|
|
}
|
|
//@@END_DDKSPLIT
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
#define NUM_RECTS_IN_REGIONLIST 6
|
|
/* This holds the list of dirty regions for D3D texture managed surfaces */
|
|
typedef struct _REGIONLIST
|
|
{
|
|
RGNDATAHEADER rdh;
|
|
RECTL rect[NUM_RECTS_IN_REGIONLIST];
|
|
} REGIONLIST;
|
|
|
|
typedef REGIONLIST *LPREGIONLIST;
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* a structure holding additional LCL surface information (can't simply be appended
|
|
* to the LCL structure as that structure is of variable size).
|
|
*/
|
|
typedef struct _DDRAWI_DDRAWSURFACE_MORE
|
|
{
|
|
DWORD dwSize;
|
|
IUNKNOWN_LIST FAR *lpIUnknowns; // IUnknowns aggregated by this surface
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; // Pointer to the DirectDraw local object
|
|
DWORD dwPageLockCount; // count of pagelocks
|
|
DWORD dwBytesAllocated; // size of sys mem allocated
|
|
LPDDRAWI_DIRECTDRAW_INT lpDD_int; // Pointer to the DirectDraw interface
|
|
DWORD dwMipMapCount; // Number of mip-map levels in the chain
|
|
LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper; // Interface to attached clipper object
|
|
//------- Fields added in Version 5.0 -------
|
|
LPHEAPALIASINFO lpHeapAliasInfo; // PRIVATE: Aliased heaps being referenced by this lock
|
|
DWORD dwOverlayFlags; // Current overlay flags
|
|
VOID *rgjunc; // Blitter function table for new blitter
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port currently writting data to this surface
|
|
LPDDOVERLAYFX lpddOverlayFX; // current overlay fx
|
|
DDSCAPSEX ddsCapsEx;
|
|
DWORD dwTextureStage; // stage in multitexture cascade
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1
|
|
LPVOID lpD3DDevIList;
|
|
LPPRIVATEDATANODE pPrivateDataHead;
|
|
IUnknown * pAddrefedThisOwner; //This is the ddraw object that created this
|
|
//surface, if nonzero. Must Release it when surface
|
|
//is released.
|
|
DWORD dwPFIndex; // pixel-format index (cached by AlphaBlt HEL)
|
|
BOOL * lpbDirty; //this bit is for D3D Texture Manage syncronization
|
|
//if it's set, D3D has to flush batched DPs
|
|
//and then refresh its video copy and clear it to
|
|
//FALSE. Blt,Lock,GetDC will set it.
|
|
#else //1
|
|
//@@END_DDKSPLIT
|
|
LPVOID lpDDRAWReserved;
|
|
LPVOID lpDDRAWReserved2;
|
|
LPVOID lpDDrawReserved3;
|
|
DWORD dwDDrawReserved4;
|
|
LPVOID lpDDrawReserved5;
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif //1
|
|
//@@END_DDKSPLIT
|
|
LPDWORD lpGammaRamp;
|
|
LPDWORD lpOriginalGammaRamp;
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1
|
|
LPREGIONLIST lpRegionList;
|
|
#ifndef WIN95
|
|
DISPLAYMODEINFO dmiCreated; // NT: mode surface created in
|
|
#endif
|
|
// This is the new Surface handle generated by the ddraw runtime
|
|
// This is sent to the driver as a cookie to associate a particular
|
|
// surface by the CreateSurfaceEx DDI.
|
|
DWORD dwSurfaceHandle;
|
|
ULARGE_INTEGER qwBatch; // batch number that refers to this texture (D3D)
|
|
LPVOID lpTex;
|
|
#else //1
|
|
//@@END_DDKSPLIT
|
|
LPVOID lpDDrawReserved6;
|
|
#ifndef WIN95
|
|
DISPLAYMODEINFO dmiDDrawReserved7;
|
|
#endif
|
|
DWORD dwSurfaceHandle; // cookie for use with CreateSurfaceEx DDI
|
|
DWORD qwDDrawReserved8[2];
|
|
LPVOID lpDDrawReserved9;
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif //1
|
|
//@@END_DDKSPLIT
|
|
DWORD cSurfaces; //PRIVATE
|
|
LPDDSURFACEDESC2 pCreatedDDSurfaceDesc2; //PRIVATE
|
|
LPDDRAWI_DDRAWSURFACE_LCL *slist; //PRIVATE
|
|
DWORD dwFVF; // saved FVF flags for exe bufs
|
|
LPVOID lpVB; //PRIVATE
|
|
} DDRAWI_DDRAWSURFACE_MORE;
|
|
|
|
/*
|
|
* Special values assigned to dwPFIndex member of DDRAWI_DDRAWSURFACE_MORE.
|
|
*/
|
|
#define PFINDEX_UNINITIALIZED (0UL) // pixel-format index is in uninitialized state
|
|
#define PFINDEX_UNSUPPORTED (~0UL) // surface's pixel format is not supported by HEL
|
|
|
|
/*
|
|
* the LCL structure is local data for each individual surface object
|
|
*/
|
|
struct _DDRAWI_DDRAWSURFACE_LCL
|
|
{
|
|
LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore; // pointer to additional local data
|
|
LPDDRAWI_DDRAWSURFACE_GBL lpGbl; // pointer to surface shared data
|
|
ULONG_PTR hDDSurface; // NT Kernel-mode handle was dwUnused0
|
|
LPATTACHLIST lpAttachList; // link to surfaces we attached to
|
|
LPATTACHLIST lpAttachListFrom;// link to surfaces that attached to this one
|
|
DWORD dwLocalRefCnt; // object refcnt
|
|
DWORD dwProcessId; // owning process
|
|
DWORD dwFlags; // flags
|
|
DDSCAPS ddsCaps; // capabilities of surface
|
|
union
|
|
{
|
|
LPDDRAWI_DDRAWPALETTE_INT lpDDPalette; // associated palette
|
|
LPDDRAWI_DDRAWPALETTE_INT lp16DDPalette; // 16-bit ptr to associated palette
|
|
};
|
|
union
|
|
{
|
|
LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper; // associated clipper
|
|
LPDDRAWI_DDRAWCLIPPER_INT lp16DDClipper; // 16-bit ptr to associated clipper
|
|
};
|
|
DWORD dwModeCreatedIn;
|
|
DWORD dwBackBufferCount; // number of back buffers created
|
|
DDCOLORKEY ddckCKDestBlt; // color key for destination blt use
|
|
DDCOLORKEY ddckCKSrcBlt; // color key for source blt use
|
|
// IUnknown FAR *pUnkOuter; // outer IUnknown
|
|
ULONG_PTR hDC; // owned dc
|
|
ULONG_PTR dwReserved1; // reserved for use by display driver
|
|
|
|
/*
|
|
* NOTE: this part of the structure is ONLY allocated if the surface
|
|
* can be used for overlays. ddckCKSrcOverlay MUST NOT BE MOVED
|
|
* from the start of this area.
|
|
*/
|
|
DDCOLORKEY ddckCKSrcOverlay;// color key for source overlay use
|
|
DDCOLORKEY ddckCKDestOverlay;// color key for destination overlay use
|
|
LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying; // surface we are overlaying
|
|
DBLNODE dbnOverlayNode;
|
|
/*
|
|
* overlay rectangle, used by DDHEL
|
|
*/
|
|
RECT rcOverlaySrc;
|
|
RECT rcOverlayDest;
|
|
/*
|
|
* the below values are kept here for ddhel. they're set by UpdateOverlay,
|
|
* they're used whenever the overlays are redrawn.
|
|
*/
|
|
DWORD dwClrXparent; // the *actual* color key (override, colorkey, or CLR_INVALID)
|
|
DWORD dwAlpha; // the per surface alpha
|
|
/*
|
|
* overlay position
|
|
*/
|
|
LONG lOverlayX; // current x position
|
|
LONG lOverlayY; // current y position
|
|
};
|
|
typedef struct _DDRAWI_DDRAWSURFACE_LCL DDRAWI_DDRAWSURFACE_LCL;
|
|
|
|
#define DDRAWISURFGBL_MEMFREE 0x00000001L // video memory has been freed
|
|
#define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002L // surface is in system memory at request of user
|
|
#define DDRAWISURFGBL_ISGDISURFACE 0x00000004L // This surface represents what GDI thinks is front buffer
|
|
#define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008L // This surface is autoflipped using software
|
|
#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010L // PRIVATE: a vram lock of the entire surface is not holding the Win16 lock
|
|
#define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020L // PRIVATE: entire surface was locked with VRAM style lock
|
|
#define DDRAWISURFGBL_LOCKBROKEN 0x00000040L // PRIVATE: a lock of the entire surface was broken by an invalidate
|
|
#define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080L // This dwKernelHandle was created implicitly
|
|
#define DDRAWISURFGBL_ISCLIENTMEM 0x00000100L // PRIVATE: the memory pointer to by fpVidMem was allocated by the client
|
|
#define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200L // This surface was the source for an asynchronous hardware operation
|
|
#define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400L // This surface was dest for an asynchronous hardware operation
|
|
#define DDRAWISURFGBL_HARDWAREOPSTARTED (DDRAWISURFGBL_HARDWAREOPSOURCE|DDRAWISURFGBL_HARDWAREOPDEST)
|
|
#define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800L // This surface contains interleaved video port data
|
|
#define DDRAWISURFGBL_VPORTDATA 0x00001000L // This surface received data from the video port
|
|
#define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000L // Optimized surface was allocated as a formless chunk. lPitch invalid, dwLinearSize valid.
|
|
#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000L // Driver sets this flag to tell ddraw that the surface was allocated in system memory
|
|
#define DDRAWISURFGBL_FASTLOCKHELD 0x00008000L // PRIVATE: indicates that InternLock took the fast path
|
|
#define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000L // PRIVATE: indicates that the application indicated read-only lock
|
|
#define DDRAWISURFGBL_DX8SURFACE 0x00080000L // PRIVATE: indicates that the surace was created using DX8
|
|
#define DDRAWISURFGBL_DDHELDONTFREE 0x00100000L // PRIVATE: indicates that the surace memory should not be freed by the HEL
|
|
#define DDRAWISURFGBL_NOTIFYWHENUNLOCKED 0x00200000L // PRIVATE: indicates that the this surface help a NOSYSLOCK lock when a mode change occured
|
|
|
|
|
|
/*
|
|
* NOTE: This flag was previously DDRAWISURFGBL_INVALID. This flags has been retired
|
|
* and replaced by DDRAWISURF_INVALID in the local object.
|
|
*/
|
|
#define DDRAWISURFGBL_RESERVED0 0x80000000L // Reserved flag
|
|
|
|
#define DDRAWISURF_ATTACHED 0x00000001L // surface is attached to another
|
|
#define DDRAWISURF_IMPLICITCREATE 0x00000002L // surface implicitly created
|
|
#define DDRAWISURF_ISFREE 0x00000004L // surface already freed (temp flag)
|
|
#define DDRAWISURF_ATTACHED_FROM 0x00000008L // surface has others attached to it
|
|
#define DDRAWISURF_IMPLICITROOT 0x00000010L // surface root of implicit creation
|
|
#define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020L // surface is part of primary chain
|
|
#define DDRAWISURF_DATAISALIASED 0x00000040L // used for thunking
|
|
#define DDRAWISURF_HASDC 0x00000080L // has a DC
|
|
#define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100L // surface has CKDestOverlay
|
|
#define DDRAWISURF_HASCKEYDESTBLT 0x00000200L // surface has CKDestBlt
|
|
#define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400L // surface has CKSrcOverlay
|
|
#define DDRAWISURF_HASCKEYSRCBLT 0x00000800L // surface has CKSrcBlt
|
|
#define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000L // surface was locked and excluded cursor
|
|
#define DDRAWISURF_HASPIXELFORMAT 0x00002000L // surface structure has pixel format data
|
|
#define DDRAWISURF_HASOVERLAYDATA 0x00004000L // surface structure has overlay data
|
|
#define DDRAWISURF_SETGAMMA 0x00008000L // gamma ramp for this surface is active
|
|
#define DDRAWISURF_SW_CKEYDESTOVERLAY 0x00010000L // surface expects to process colorkey in software
|
|
#define DDRAWISURF_SW_CKEYDESTBLT 0x00020000L // surface expects to process colorkey in software
|
|
#define DDRAWISURF_SW_CKEYSRCOVERLAY 0x00040000L // surface expects to process colorkey in software
|
|
#define DDRAWISURF_SW_CKEYSRCBLT 0x00080000L // surface expects to process colorkey in software
|
|
#define DDRAWISURF_HW_CKEYDESTOVERLAY 0x00100000L // surface expects to process colorkey in hardware
|
|
#define DDRAWISURF_HW_CKEYDESTBLT 0x00200000L // surface expects to process colorkey in hardware
|
|
#define DDRAWISURF_HW_CKEYSRCOVERLAY 0x00400000L // surface expects to process colorkey in hardware
|
|
#define DDRAWISURF_HW_CKEYSRCBLT 0x00800000L // surface expects to process colorkey in hardware
|
|
#define DDRAWISURF_INMASTERSPRITELIST 0x01000000l // surface is referenced in master sprite list
|
|
#define DDRAWISURF_HELCB 0x02000000L // surface is the ddhel cb. must call hel for lock/blt.
|
|
#define DDRAWISURF_FRONTBUFFER 0x04000000L // surface was originally a front buffer
|
|
#define DDRAWISURF_BACKBUFFER 0x08000000L // surface was originally backbuffer
|
|
#define DDRAWISURF_INVALID 0x10000000L // surface has been invalidated by mode set
|
|
#define DDRAWISURF_DCIBUSY 0x20000000L // HEL has turned off BUSY so DCI would work
|
|
#define DDRAWISURF_GETDCNULL 0x40000000L // getdc could not lock and so returned GetDC(NULL)
|
|
|
|
//#define DDRAWISURF_CANTLOCK 0x20000000L // surface cannot be locked (primary created by HEL)
|
|
#define DDRAWISURF_STEREOSURFACELEFT 0x20000000L // surface is left of stereo pair
|
|
#define DDRAWISURF_DRIVERMANAGED 0x40000000L // Surface is a driver managed texture (D3D)
|
|
#define DDRAWISURF_DCILOCK 0x80000000L // Surface was locked using DCIBeginAccess
|
|
|
|
/*
|
|
* rop stuff
|
|
*/
|
|
#define ROP_HAS_SOURCE 0x00000001l
|
|
#define ROP_HAS_PATTERN 0x00000002l
|
|
#define ROP_HAS_SOURCEPATTERN ROP_HAS_SOURCE | ROP_HAS_PATTERN
|
|
|
|
/*
|
|
* mode information
|
|
*/
|
|
typedef struct _DDHALMODEINFO
|
|
{
|
|
DWORD dwWidth; // width (in pixels) of mode
|
|
DWORD dwHeight; // height (in pixels) of mode
|
|
LONG lPitch; // pitch (in bytes) of mode
|
|
DWORD dwBPP; // bits per pixel
|
|
WORD wFlags; // flags
|
|
WORD wRefreshRate; // refresh rate
|
|
DWORD dwRBitMask; // red bit mask
|
|
DWORD dwGBitMask; // green bit mask
|
|
DWORD dwBBitMask; // blue bit mask
|
|
DWORD dwAlphaBitMask; // alpha bit mask
|
|
} DDHALMODEINFO;
|
|
typedef DDHALMODEINFO FAR *LPDDHALMODEINFO;
|
|
|
|
#define DDMODEINFO_PALETTIZED 0x0001 // mode is palettized
|
|
#define DDMODEINFO_MODEX 0x0002 // mode is a modex mode
|
|
#define DDMODEINFO_UNSUPPORTED 0x0004 // mode is not supported by driver
|
|
|
|
/*
|
|
* Note internally, standard VGA modes are tagged as MODEX and STANDARDVGA
|
|
*/
|
|
#define DDMODEINFO_STANDARDVGA 0x0008 // mode is standard vga, e.g. mode 0x13
|
|
|
|
#define DDMODEINFO_MAXREFRESH 0x0010 // refresh rate specified is the max supported
|
|
#define DDMODEINFO_STEREO 0x0020 // mode can be switched to stereo
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/*
|
|
* This means that the mode marked as 16bpp is really 555
|
|
*/
|
|
#define DDMODEINFO_555MODE 0x0100
|
|
|
|
/*
|
|
* This mode should only be used with DX7 or higher interfaces.
|
|
*/
|
|
#define DDMODEINFO_DX7ONLY 0x0200
|
|
|
|
#define DDMODEINFO_VALID 0x003C // valid
|
|
|
|
#define LISTGROWSIZE 1024
|
|
|
|
typedef struct _DDSURFACELISTENTRY
|
|
{
|
|
DWORD dwFlags;
|
|
DWORD nextentry;
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurface;
|
|
} DDSURFACELISTENTRY;
|
|
typedef DDSURFACELISTENTRY FAR* LPDDSURFACELISTENTRY;
|
|
typedef struct _DWLIST
|
|
{
|
|
LPDDSURFACELISTENTRY dwList; // array to hold handles, dynamically allocated
|
|
// dwList[0] is the size of array dwList if allocated
|
|
DWORD dwFreeList; // point to the first unused slot in dwList
|
|
} DWLIST;
|
|
typedef DWLIST FAR* LPDWLIST;
|
|
#ifdef WIN95
|
|
#define SURFACEHANDLELIST(this_lcl) (this_lcl->SurfaceHandleList)
|
|
#else //WIN95
|
|
#define SURFACEHANDLELIST(this_lcl) (this_lcl->lpGbl->SurfaceHandleList)
|
|
#endif //WIN95
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* DDRAW interface struct
|
|
*/
|
|
typedef struct _DDRAWI_DIRECTDRAW_INT
|
|
{
|
|
LPVOID lpVtbl; // pointer to array of interface methods
|
|
LPDDRAWI_DIRECTDRAW_LCL lpLcl; // pointer to interface data
|
|
LPDDRAWI_DIRECTDRAW_INT lpLink; // link to next interface
|
|
DWORD dwIntRefCnt; // interface reference count
|
|
//@@BEGIN_DDKSPLIT
|
|
ULONG_PTR dwReserved1; // for DDrawEx
|
|
ULONG_PTR dwReserved2; // for DDrawEx
|
|
//@@END_DDKSPLIT
|
|
} DDRAWI_DIRECTDRAW_INT;
|
|
|
|
/*
|
|
* DDRAW version of DirectDraw object; it has data after the vtable
|
|
*
|
|
* all entries marked as PRIVATE are not for use by the display driver
|
|
*/
|
|
typedef struct _DDHAL_CALLBACKS
|
|
{
|
|
DDHAL_DDCALLBACKS cbDDCallbacks; // addresses in display driver for DIRECTDRAW object HAL
|
|
DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks; // addresses in display driver for DIRECTDRAWSURFACE object HAL
|
|
DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks; // addresses in display driver for DIRECTDRAWPALETTE object HAL
|
|
DDHAL_DDCALLBACKS HALDD; // HAL for DIRECTDRAW object
|
|
DDHAL_DDSURFACECALLBACKS HALDDSurface; // HAL for DIRECTDRAWSURFACE object
|
|
DDHAL_DDPALETTECALLBACKS HALDDPalette; // HAL for DIRECTDRAWPALETTE object
|
|
DDHAL_DDCALLBACKS HELDD; // HEL for DIRECTDRAW object
|
|
DDHAL_DDSURFACECALLBACKS HELDDSurface; // HEL for DIRECTDRAWSURFACE object
|
|
DDHAL_DDPALETTECALLBACKS HELDDPalette; // HEL for DIRECTDRAWPALETTE object
|
|
DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks; // addresses in display driver for DIRECTDRAWEXEBUF pseudo object HAL
|
|
DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf; // HAL for DIRECTDRAWEXEBUF pseudo object
|
|
DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf; // HEL for DIRECTDRAWEXEBUF preudo object
|
|
DDHAL_DDVIDEOPORTCALLBACKS cbDDVideoPortCallbacks; // addresses in display driver for VideoPort object HAL
|
|
DDHAL_DDVIDEOPORTCALLBACKS HALDDVideoPort; // HAL for DIRECTDRAWVIDEOPORT psuedo object
|
|
DDHAL_DDCOLORCONTROLCALLBACKS cbDDColorControlCallbacks; // addresses in display driver for color control object HAL
|
|
DDHAL_DDCOLORCONTROLCALLBACKS HALDDColorControl; // HAL for DIRECTDRAWCOLORCONTROL psuedo object
|
|
DDHAL_DDMISCELLANEOUSCALLBACKS cbDDMiscellaneousCallbacks;
|
|
DDHAL_DDMISCELLANEOUSCALLBACKS HALDDMiscellaneous;
|
|
DDHAL_DDKERNELCALLBACKS cbDDKernelCallbacks;
|
|
DDHAL_DDKERNELCALLBACKS HALDDKernel;
|
|
DDHAL_DDMOTIONCOMPCALLBACKS cbDDMotionCompCallbacks;
|
|
DDHAL_DDMOTIONCOMPCALLBACKS HALDDMotionComp;
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef WINNT
|
|
DDHAL_DDNTCALLBACKS cbDDNTCallbacks;
|
|
DDHAL_DDNTCALLBACKS HALDDNT;
|
|
#endif
|
|
DDHAL_DDMISCELLANEOUS2CALLBACKS HELDDMiscellaneous2; // HEL
|
|
DDHAL_DDMISCELLANEOUS2CALLBACKS HALDDMiscellaneous2; // HAL (32-bit, no thunk)
|
|
#ifndef WINNT
|
|
DDHAL_DDNTCALLBACKS cbDDNTCallbacks;
|
|
DDHAL_DDNTCALLBACKS HALDDNT;
|
|
#endif
|
|
#ifdef WINNT
|
|
DDHAL_DDVPE2CALLBACKS cbDDVPE2Callbacks;
|
|
DDHAL_DDVPE2CALLBACKS HALDDVPE2;
|
|
#endif
|
|
//@@END_DDKSPLIT
|
|
} DDHAL_CALLBACKS, far *LPDDHAL_CALLBACKS;
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/*
|
|
* READ THIS - READ THIS - READ THIS - READ THIS - READ THIS - READ THIS
|
|
*
|
|
* Why have this structure and the API visible DDCAPS? Well we want to grow
|
|
* DDCAPS so the application can get at new caps. but we can't grow the
|
|
* DDCAPS that the driver returns to us because it is embeded by value in
|
|
* DDCOREINFO and chaging is size would break drivers - sigh.Therefore this
|
|
* structure, DDCORECAPS, is the caps structure returned to us by the driver
|
|
* in DDHALINFO.
|
|
*
|
|
* IT HAS A FIXED SIZE AND MUST NEVER GROW OR SHRINK. Whereas the public
|
|
* DDCAPS will grow as new capabilities are added. If new caps are needed
|
|
* they should be returned through a GetDriverInfo call rather than
|
|
* through growing DDCORECAPS.
|
|
*
|
|
* The field names of this structure must be maintained in sync. with the
|
|
* those in the public DDCAPS structure. So if you rename a field at the
|
|
* API level rename it here also (but don't break drivers)
|
|
*/
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* This structure mirrors the first entries of the DDCAPS but is of a fixed
|
|
* size and will not grow as DDCAPS grows. This is the structure your driver
|
|
* returns in DDCOREINFO. Additional caps will be requested via a GetDriverInfo
|
|
* call.
|
|
*/
|
|
typedef struct _DDCORECAPS
|
|
{
|
|
DWORD dwSize; // size of the DDDRIVERCAPS structure
|
|
DWORD dwCaps; // driver specific capabilities
|
|
DWORD dwCaps2; // more driver specific capabilites
|
|
DWORD dwCKeyCaps; // color key capabilities of the surface
|
|
DWORD dwFXCaps; // driver specific stretching and effects capabilites
|
|
DWORD dwFXAlphaCaps; // alpha driver specific capabilities
|
|
DWORD dwPalCaps; // palette capabilities
|
|
DWORD dwSVCaps; // stereo vision capabilities
|
|
DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8
|
|
DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8
|
|
DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8
|
|
DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8
|
|
DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8
|
|
DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8
|
|
DWORD dwZBufferBitDepths; // DDBD_8,16,24,32
|
|
DWORD dwVidMemTotal; // total amount of video memory
|
|
DWORD dwVidMemFree; // amount of free video memory
|
|
DWORD dwMaxVisibleOverlays; // maximum number of visible overlays
|
|
DWORD dwCurrVisibleOverlays; // current number of visible overlays
|
|
DWORD dwNumFourCCCodes; // number of four cc codes
|
|
DWORD dwAlignBoundarySrc; // source rectangle alignment
|
|
DWORD dwAlignSizeSrc; // source rectangle byte size
|
|
DWORD dwAlignBoundaryDest; // dest rectangle alignment
|
|
DWORD dwAlignSizeDest; // dest rectangle byte size
|
|
DWORD dwAlignStrideAlign; // stride alignment
|
|
DWORD dwRops[DD_ROP_SPACE]; // ROPS supported
|
|
DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities
|
|
DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
|
|
DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
|
|
DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
|
|
DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
|
|
DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
|
|
DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
|
|
DWORD dwReserved1; // reserved
|
|
DWORD dwReserved2; // reserved
|
|
DWORD dwReserved3; // reserved
|
|
DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts
|
|
DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts
|
|
DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts
|
|
DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts
|
|
DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts
|
|
DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts
|
|
DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts
|
|
DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts
|
|
DWORD dwSSBCaps; // driver specific capabilities for System->System blts
|
|
DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts
|
|
DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts
|
|
DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts
|
|
DWORD dwMaxVideoPorts; // maximum number of usable video ports
|
|
DWORD dwCurrVideoPorts; // current number of video ports used
|
|
DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts
|
|
} DDCORECAPS;
|
|
|
|
typedef DDCORECAPS FAR* LPDDCORECAPS;
|
|
|
|
typedef struct _DDRAWI_DIRECTDRAW_GBL
|
|
{
|
|
/* 0*/ DWORD dwRefCnt; // reference count
|
|
/* 4*/ DWORD dwFlags; // flags
|
|
/* 8*/ FLATPTR fpPrimaryOrig; // primary surf vid mem. ptr
|
|
/* c*/ DDCORECAPS ddCaps; // driver caps
|
|
/*148*/ DWORD dwInternal1; // Private to ddraw.dll
|
|
/*16c*/ DWORD dwUnused1[9]; // not currently used
|
|
/*170*/ LPDDHAL_CALLBACKS lpDDCBtmp; // HAL callbacks
|
|
/*174*/ LPDDRAWI_DDRAWSURFACE_INT dsList; // PRIVATE: list of all surfaces
|
|
/*178*/ LPDDRAWI_DDRAWPALETTE_INT palList; // PRIVATE: list of all palettes
|
|
/*17c*/ LPDDRAWI_DDRAWCLIPPER_INT clipperList; // PRIVATE: list of all clippers
|
|
/*180*/ LPDDRAWI_DIRECTDRAW_GBL lp16DD; // PRIVATE: 16-bit ptr to this struct
|
|
/*184*/ DWORD dwMaxOverlays; // maximum number of overlays
|
|
/*188*/ DWORD dwCurrOverlays; // current number of visible overlays
|
|
/*18c*/ DWORD dwMonitorFrequency; // monitor frequency in current mode
|
|
/*190*/ DDCORECAPS ddHELCaps; // HEL capabilities
|
|
/*2cc*/ DWORD dwUnused2[50]; // not currently used
|
|
/*394*/ DDCOLORKEY ddckCKDestOverlay; // color key for destination overlay use
|
|
/*39c*/ DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use
|
|
/*3a4*/ VIDMEMINFO vmiData; // info about vid memory
|
|
/*3f4*/ LPVOID lpDriverHandle; // handle for use by display driver
|
|
/* */ // to call fns in DDRAW16.DLL
|
|
/*3f8*/ LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner; // PRIVATE: exclusive local object
|
|
/*3fc*/ DWORD dwModeIndex; // current mode index
|
|
/*400*/ DWORD dwModeIndexOrig; // original mode index
|
|
/*404*/ DWORD dwNumFourCC; // number of fourcc codes supported
|
|
/*408*/ DWORD FAR *lpdwFourCC; // PRIVATE: fourcc codes supported
|
|
/*40c*/ DWORD dwNumModes; // number of modes supported
|
|
/*410*/ LPDDHALMODEINFO lpModeInfo; // PRIVATE: mode information
|
|
/*424*/ PROCESS_LIST plProcessList; // PRIVATE: list of processes using driver
|
|
/*428*/ DWORD dwSurfaceLockCount; // total number of outstanding locks
|
|
/*42c*/ DWORD dwAliasedLockCnt; // PRIVATE: number of outstanding aliased locks
|
|
/*430*/ ULONG_PTR dwReserved3; // reserved for use by display driver
|
|
/*434*/ ULONG_PTR hDD; // PRIVATE: NT Kernel-mode handle (was dwFree3).
|
|
/*438*/ char cObsolete[12]; // Obsolete field, do not use
|
|
/*444*/ DWORD dwReserved1; // reserved for use by display driver
|
|
/*448*/ DWORD dwReserved2; // reserved for use by display driver
|
|
/*44c*/ DBLNODE dbnOverlayRoot; // The root node of the doubly-
|
|
/* */ // linked list of overlay z orders.
|
|
/*45c*/ volatile LPWORD lpwPDeviceFlags; // driver physical device flags
|
|
/*460*/ DWORD dwPDevice; // driver physical device (16:16 pointer)
|
|
/*464*/ DWORD dwWin16LockCnt; // count on win16 holds
|
|
/*468*/ DWORD dwUnused3; // was lpWin16LockOwner
|
|
/*46c*/ DWORD hInstance; // instance handle of driver
|
|
/*470*/ DWORD dwEvent16; // 16-bit event
|
|
/*474*/ DWORD dwSaveNumModes; // saved number of modes supported
|
|
/* */ //------- Fields added in Version 2.0 -------
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1 //Masked for DDK
|
|
/*478*/ LPD3DHAL_GLOBALDRIVERDATA lpD3DGlobalDriverData; // Global D3D Data
|
|
/*47c*/ LPD3DHAL_CALLBACKS lpD3DHALCallbacks; // D3D HAL Callbacks
|
|
#else
|
|
//@@END_DDKSPLIT
|
|
/*478*/ ULONG_PTR lpD3DGlobalDriverData; // Global D3D Data
|
|
/*47c*/ ULONG_PTR lpD3DHALCallbacks; // D3D HAL Callbacks
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif
|
|
//@@END_DDKSPLIT
|
|
/*480*/ DDCORECAPS ddBothCaps; // logical AND of driver and HEL caps
|
|
/* */ //------- Fields added in Version 5.0 -------
|
|
/*5bc*/ LPDDVIDEOPORTCAPS lpDDVideoPortCaps;// Info returned by the HAL (an array if more than one video port)
|
|
/*5c0*/ LPDDRAWI_DDVIDEOPORT_INT dvpList; // PRIVATE: list of all video ports
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1 //Masked for DDK
|
|
/*5c4*/ LPD3DHAL_CALLBACKS2 lpD3DHALCallbacks2; // Post-DX3 D3D HAL callbacks
|
|
#else
|
|
//@@END_DDKSPLIT
|
|
/*5c4*/ ULONG_PTR lpD3DHALCallbacks2; // Post-DX3 D3D HAL callbacks
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif //1
|
|
//@@END_DDKSPLIT
|
|
/*5c8*/ RECT rectDevice; // rectangle (in desktop coord) for device
|
|
/*5d8*/ DWORD cMonitors; // number of monitors in the system
|
|
/*5dc*/ LPVOID gpbmiSrc; // PRIVATE: used by HEL
|
|
/*5e0*/ LPVOID gpbmiDest; // PRIVATE: used by HEL
|
|
/*5e4*/ LPHEAPALIASINFO phaiHeapAliases; // PRIVATE: video memory heap aliases
|
|
/*5e8*/ ULONG_PTR hKernelHandle;
|
|
/*5ec*/ ULONG_PTR pfnNotifyProc; // Notification proc registered w/ VDD
|
|
/*5f0*/ LPDDKERNELCAPS lpDDKernelCaps; // Capabilies of kernel mode interface
|
|
/*5f4*/ LPDDNONLOCALVIDMEMCAPS lpddNLVCaps; // hardware non-local to local vidmem caps
|
|
/*5f8*/ LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps; // emulation layer non-local to local vidmem caps
|
|
/*5fc*/ LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps; // logical AND of hardware and emulation non-local to local vidmem caps
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1 //Masked for DDK
|
|
/*600*/ LPD3DHAL_D3DEXTENDEDCAPS lpD3DExtendedCaps; // extended caps for D3D
|
|
#else
|
|
//@@END_DDKSPLIT
|
|
/*600*/ ULONG_PTR lpD3DExtendedCaps; // extended caps for D3D
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif //1
|
|
//@@END_DDKSPLIT
|
|
/* */ //--------Fields added in Version 5.0A
|
|
/*604*/ DWORD dwDOSBoxEvent; // Event set when returning from a DOS box
|
|
/*608*/ RECT rectDesktop; // Desktop coordinates
|
|
/*618*/ char cDriverName[MAX_DRIVER_NAME]; // Display name
|
|
/* */ //------- Fields added in Version 6.0 -------
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1 //Masked for DDK
|
|
/*638*/ LPD3DHAL_CALLBACKS3 lpD3DHALCallbacks3; // DX6 D3D callbacks
|
|
#else
|
|
//@@END_DDKSPLIT
|
|
/*638*/ ULONG_PTR lpD3DHALCallbacks3; // DX6 D3D callbacks
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif //1
|
|
//@@END_DDKSPLIT
|
|
/*63c*/ DWORD dwNumZPixelFormats; // Number of z-buffer+stencil pixel formats
|
|
/*640*/ LPDDPIXELFORMAT lpZPixelFormats; // Pointer to array of z-buffer pixel formats
|
|
/*644*/ LPDDRAWI_DDMOTIONCOMP_INT mcList; // PRIVATE: list of all motion comp objects
|
|
/*648*/ DWORD hDDVxd; // handle to ddraw.vxd
|
|
/*64c*/ DDSCAPSEX ddsCapsMore; // as queried via GUID_DDMoreSurfaceCaps
|
|
//@@BEGIN_DDKSPLIT
|
|
/*658*/ DWORD dwBusyDueToAliasedLock; // Almost identical semantics as dwAliasedLockCnt,
|
|
#ifndef WIN95
|
|
DISPLAYMODEINFO dmiCurrent; // NT: current display mode
|
|
#endif
|
|
/*65c*/ LPDDRAWI_DDRAWSURFACE_INT dsFreeList; // PRIVATE: freed interface list, moved from dsList and ready to be recycled
|
|
/*660*/ DD32BITDRIVERDATA dd32BitDriverData;
|
|
|
|
/*780*/ LPDDMORECAPS lpddMoreCaps; // more hardware caps bits for DX7
|
|
/*784*/ LPDDMORECAPS lpddHELMoreCaps; // more HEL caps bits for DX7
|
|
/*788*/ LPDDMORECAPS lpddBothMoreCaps; // bitwise AND of more hardware and HEL caps bits for DX7
|
|
|
|
/*78c*/ DDSCAPSEX ddsHELCapsMore; // as queried via GUID_DDMoreSurfaceCaps
|
|
/* */ LPDDMONITORINFO lpMonitorInfo; // What refresh rates the monitor/card support
|
|
|
|
/* */ LPDDHAL_GETDRIVERINFO pGetDriverInfo;
|
|
#ifdef WINNT
|
|
DWLIST SurfaceHandleList; // array to hold handles, dynamically allocated
|
|
#endif //WINNT
|
|
GUID guidDevice; // GUID specifying the hardware device
|
|
#ifdef WINNT
|
|
DDHALMODEINFO ModeInfo;
|
|
#endif //WINNT
|
|
#ifdef POSTPONED
|
|
/**/ LPDDUMODEDRVINFO lpDDUmodeDrvInfo; // Usermode driver info
|
|
/**/ LPDDOPTSURFACEINFO lpDDOptSurfaceInfo; //Optimized Surface Information
|
|
#endif //POSTPONED
|
|
#ifdef POSTPONED2
|
|
/**/ LPVOID lpMasterSpriteList; // master sprite list
|
|
#endif //POSTPONED2
|
|
//@@END_DDKSPLIT
|
|
} DDRAWI_DIRECTDRAW_GBL;
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
typedef void (FAR PASCAL * LPPALETTEUPDATENOTIFY)(IUnknown FAR * pD3DIUnknown, DWORD dwPaletteHandle, DWORD dwStartIndex, DWORD dwNumberOfIndices, LPPALETTEENTRY pFirstIndex);
|
|
|
|
// For D3DIM700, we send a pointer as the last parameter
|
|
typedef void (FAR PASCAL * LPPALETTEASSOCIATENOTIFY7)(IUnknown FAR * pD3DIUnknown, DWORD dwPaletteHandle, DWORD dwPaletteFlags, LPDDRAWI_DDRAWSURFACE_LCL surf_lcl );
|
|
// For D3DIM, we just send the handle. (MB-41840)
|
|
typedef void (FAR PASCAL * LPPALETTEASSOCIATENOTIFY)(IUnknown FAR * pD3DIUnknown, DWORD dwPaletteHandle, DWORD dwPaletteFlags, DWORD dwSurfaceHandle);
|
|
|
|
typedef void (FAR PASCAL * LPSURFACEFLIPNOTIFY)(IUnknown FAR * pD3DIUnknown);
|
|
typedef HRESULT (FAR PASCAL * FLUSHD3DDEVICES) (LPDDRAWI_DDRAWSURFACE_LCL surf_lcl);
|
|
typedef void (FAR PASCAL * D3DTEXTUREUPDATE) (IUnknown FAR * pD3DIUnknown);
|
|
typedef HRESULT (FAR PASCAL * D3DCREATETEXTURE)(LPDIRECTDRAWSURFACE7 pDDS);
|
|
typedef void (FAR PASCAL * D3DDESTROYTEXTURE)(LPVOID pTex);
|
|
typedef void (FAR PASCAL * LPBREAKVBLOCK)(LPVOID lpVB);
|
|
typedef HRESULT (FAR PASCAL * D3DSETPRIORITY)(LPVOID lpTexI, DWORD dwPriority);
|
|
typedef HRESULT (FAR PASCAL * D3DGETPRIORITY)(LPVOID lpTexI, LPDWORD lpdwPriority);
|
|
typedef HRESULT (FAR PASCAL * D3DSETLOD)(LPVOID lpTexI, DWORD dwLOD);
|
|
typedef HRESULT (FAR PASCAL * D3DGETLOD)(LPVOID lpTexI, LPDWORD lpdwLOD);
|
|
|
|
#define PALETTEUPDATENOTIFY_NAME "PaletteUpdateNotify"
|
|
#define PALETTEASSOCIATENOTIFY_NAME "PaletteAssociateNotify"
|
|
#define SURFACEFLIPNOTIFY_NAME "SurfaceFlipNotify"
|
|
#define FLUSHD3DDEVICES_NAME "FlushD3DDevices"
|
|
#define FLUSHD3DDEVICES2_NAME "FlushD3DDevices2"
|
|
#define D3DTEXTUREUPDATE_NAME "D3DTextureUpdate"
|
|
#define D3DCREATETEXTURE_NAME "CreateTexture"
|
|
#define D3DDESTROYTEXTURE_NAME "DestroyTexture"
|
|
#define D3DSETPRIORITY_NAME "SetPriority"
|
|
#define D3DGETPRIORITY_NAME "GetPriority"
|
|
#define D3DSETLOD_NAME "SetLOD"
|
|
#define D3DGETLOD_NAME "GetLOD"
|
|
#define BREAKVBLOCK_NAME "D3DBreakVBLock"
|
|
//@@END_DDKSPLIT
|
|
|
|
typedef struct _DDRAWI_DIRECTDRAW_LCL
|
|
{
|
|
DWORD lpDDMore; // pointer to additional local data
|
|
LPDDRAWI_DIRECTDRAW_GBL lpGbl; // pointer to data
|
|
DWORD dwUnused0; // not currently used
|
|
DWORD dwLocalFlags; // local flags (DDRAWILCL_)
|
|
DWORD dwLocalRefCnt; // local ref cnt
|
|
DWORD dwProcessId; // owning process id
|
|
IUnknown FAR *pUnkOuter; // outer IUnknown
|
|
DWORD dwObsolete1;
|
|
ULONG_PTR hWnd;
|
|
ULONG_PTR hDC;
|
|
DWORD dwErrorMode;
|
|
LPDDRAWI_DDRAWSURFACE_INT lpPrimary;
|
|
LPDDRAWI_DDRAWSURFACE_INT lpCB;
|
|
DWORD dwPreferredMode;
|
|
//------- Fields added in Version 2.0 -------
|
|
HINSTANCE hD3DInstance; // Handle of Direct3D's DLL.
|
|
IUnknown FAR *pD3DIUnknown; // Direct3D's aggregated IUnknown.
|
|
LPDDHAL_CALLBACKS lpDDCB; // HAL callbacks
|
|
ULONG_PTR hDDVxd; // handle to ddraw.vxd
|
|
//------- Fields added in Version 5.0 -------
|
|
DWORD dwAppHackFlags; // app compatibilty flags
|
|
//------- Fields added in Version 5.A -------
|
|
ULONG_PTR hFocusWnd; // Focus window set via SetCoopLevel
|
|
DWORD dwHotTracking; // Reactive menu etc setting cached while fullscreen
|
|
DWORD dwIMEState; // IME toolbar setting cached while fullscreen
|
|
//------- Fields added in Version 6.0 -------
|
|
ULONG_PTR hWndPopup;
|
|
ULONG_PTR hDD; // PRIVATE: NT Kernel-mode handle
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef SHAREDZ
|
|
LPDDRAWI_DDRAWSURFACE_INT lpSharedZ; // Shared z-buffer (if any).
|
|
LPDDRAWI_DDRAWSURFACE_INT lpSharedBack; // Shared back-buffer (if any).
|
|
#endif
|
|
#ifndef WIN95
|
|
DISPLAYMODEINFO dmiPreferred; // NT: preferred display mode
|
|
#endif
|
|
//@@END_DDKSPLIT
|
|
ULONG_PTR hGammaCalibrator; // Private
|
|
LPDDGAMMACALIBRATORPROC lpGammaCalibrator; // Private
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef WIN95
|
|
DWLIST SurfaceHandleList; // array to hold handles, dynamically allocated
|
|
#endif //WIN95
|
|
LPDDRAWI_DIRECTDRAW_LCL lpLink; // link to next local
|
|
LPPALETTEUPDATENOTIFY pPaletteUpdateNotify;
|
|
LPPALETTEASSOCIATENOTIFY pPaletteAssociateNotify;
|
|
LPSURFACEFLIPNOTIFY pSurfaceFlipNotify;
|
|
DWORD cbitsPaletteBitfieldBitCount;
|
|
LPDWORD pPaletteHandleUsedBitfield;
|
|
FLUSHD3DDEVICES pFlushD3DDevices;
|
|
FLUSHD3DDEVICES pFlushD3DDevices2;
|
|
D3DTEXTUREUPDATE pD3DTextureUpdate;
|
|
D3DCREATETEXTURE pD3DCreateTexture;
|
|
D3DDESTROYTEXTURE pD3DDestroyTexture;
|
|
D3DSETPRIORITY pD3DSetPriority;
|
|
D3DGETPRIORITY pD3DGetPriority;
|
|
D3DSETLOD pD3DSetLOD;
|
|
D3DGETLOD pD3DGetLOD;
|
|
LPDIRECTDRAWSURFACECALLBACKS pddSurfaceCallbacks;
|
|
LPMODETESTCONTEXT lpModeTestContext; // Keeps track of current mode test
|
|
DWORD dwNumTexLocks; // D3D texturing stats counter
|
|
DWORD dwNumTexGetDCs; // D3D texturing stats counter
|
|
#ifndef WIN95
|
|
DWORD dwCursorShadow; // Cursor shadow turned off while fullscreen
|
|
#endif
|
|
LPBREAKVBLOCK pBreakVBLock; // Private
|
|
//@@END_DDKSPLIT
|
|
} DDRAWI_DIRECTDRAW_LCL;
|
|
|
|
#define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001l
|
|
#define DDRAWILCL_ISFULLSCREEN 0x00000002l
|
|
#define DDRAWILCL_SETCOOPCALLED 0x00000004l
|
|
#define DDRAWILCL_ACTIVEYES 0x00000008l
|
|
#define DDRAWILCL_ACTIVENO 0x00000010l
|
|
#define DDRAWILCL_HOOKEDHWND 0x00000020l
|
|
#define DDRAWILCL_ALLOWMODEX 0x00000040l
|
|
#define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080l
|
|
#define DDRAWILCL_MODEHASBEENCHANGED 0x00000100l
|
|
#define DDRAWILCL_CREATEDWINDOW 0x00000200l
|
|
#define DDRAWILCL_DIRTYDC 0x00000400l // Set on ChangeDisplaySettings, cleared when device DC is reinited
|
|
#define DDRAWILCL_DISABLEINACTIVATE 0x00000800l
|
|
#define DDRAWILCL_CURSORCLIPPED 0x00001000l
|
|
#define DDRAWILCL_EXPLICITMONITOR 0x00002000l // device was chosen explicitly i.e. not DDrawCreate(NULL)
|
|
#define DDRAWILCL_MULTITHREADED 0x00004000l // App threaten to be multithreaded
|
|
#define DDRAWILCL_FPUSETUP 0x00008000l // D3D does not need to switch to single prec/exceptions disabled each time
|
|
#define DDRAWILCL_POWEREDDOWN 0x00010000l // Private: indicates that screen saver is powered down
|
|
#define DDRAWILCL_DIRECTDRAW7 0x00020000l // PRIVATE: Marks if this is a IDirectDraw7 object
|
|
#define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000l // PRIVATE: Marks if this ddraw local has attempted to create a d3d context
|
|
#define DDRAWILCL_FPUPRESERVE 0x00080000l // D3D needs to switch to single prec/exceptions disabled each time
|
|
#define DDRAWILCL_DX8DRIVER 0x00100000l // PRIVATE: Set if this drvier can handle lightweight surfaces
|
|
#define DDRAWILCL_DIRECTDRAW8 0x00200000l // PRIVATE: Marks if this is a IDirectDraw8 object
|
|
|
|
#define DDRAWI_xxxxxxxxx1 0x00000001l // unused
|
|
#define DDRAWI_xxxxxxxxx2 0x00000002l // unused
|
|
#define DDRAWI_VIRTUALDESKTOP 0x00000008l // driver is really a multi-monitor virtual desktop
|
|
#define DDRAWI_MODEX 0x00000010l // driver is using modex
|
|
#define DDRAWI_DISPLAYDRV 0x00000020l // driver is display driver
|
|
#define DDRAWI_FULLSCREEN 0x00000040l // driver in fullscreen mode
|
|
#define DDRAWI_MODECHANGED 0x00000080l // display mode has been changed
|
|
#define DDRAWI_NOHARDWARE 0x00000100l // no driver hardware at all
|
|
#define DDRAWI_PALETTEINIT 0x00000200l // GDI palette stuff has been initalized
|
|
#define DDRAWI_NOEMULATION 0x00000400l // no emulation at all
|
|
#define DDRAWI_HASCKEYDESTOVERLAY 0x00000800l // driver has CKDestOverlay
|
|
#define DDRAWI_HASCKEYSRCOVERLAY 0x00001000l // driver has CKSrcOverlay
|
|
#define DDRAWI_HASGDIPALETTE 0x00002000l // GDI palette exists on primary surface
|
|
#define DDRAWI_EMULATIONINITIALIZED 0x00004000l // emulation is initialized
|
|
#define DDRAWI_HASGDIPALETTE_EXCLUSIVE 0x00008000l // exclusive mode palette
|
|
#define DDRAWI_MODEXILLEGAL 0x00010000l // modex is not supported by this hardware
|
|
#define DDRAWI_FLIPPEDTOGDI 0x00020000l // driver has been flipped to show GDI surface
|
|
#define DDRAWI_NEEDSWIN16FORVRAMLOCK 0x00040000l // PRIVATE: Win16 lock must be taken when locking a VRAM surface
|
|
#define DDRAWI_PDEVICEVRAMBITCLEARED 0x00080000l // PRIVATE: the PDEVICE's VRAM bit was cleared by a lock
|
|
#define DDRAWI_STANDARDVGA 0x00100000l // Device is using standard VGA mode (DDRAWI_MODEX will be set)
|
|
#define DDRAWI_EXTENDEDALIGNMENT 0x00200000l // At least one heap has extended alignment. Ignore alignment in VIDMEMINFO
|
|
#define DDRAWI_CHANGINGMODE 0x00400000l // Currently in the middle of a mode change
|
|
#define DDRAWI_GDIDRV 0x00800000l // Driver is a GDI driver
|
|
#define DDRAWI_ATTACHEDTODESKTOP 0x01000000l // Device is attached to the desktop
|
|
#define DDRAWI_UMODELOADED 0x02000000l // User mode driver dll is loaded
|
|
#define DDRAWI_DDRAWDATANOTFETCHED 0x04000000l // PRIVATE: Marks mode-change data fetched (NT)
|
|
#define DDRAWI_SECONDARYDRIVERLOADED 0x08000000l // PRIVATE: Marks if a secndary PVR-style HAL was loaded
|
|
#define DDRAWI_TESTINGMODES 0x10000000l // PRIVATE: A mode test in is progress
|
|
#define DDRAWI_DRIVERINFO2 0x20000000l // PRIVATE: Driver supports GetDriverInfo2
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef IS_16
|
|
__inline BOOL IsD3DManaged(psurf_lcl)
|
|
LPDDRAWI_DDRAWSURFACE_LCL psurf_lcl;
|
|
#else
|
|
__inline BOOL IsD3DManaged(LPDDRAWI_DDRAWSURFACE_LCL psurf_lcl)
|
|
#endif
|
|
{
|
|
if(psurf_lcl->dwFlags & DDRAWISURF_DRIVERMANAGED)
|
|
{
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
return ((psurf_lcl->lpSurfMore->ddsCapsEx.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE)) ? TRUE : FALSE);
|
|
}
|
|
}
|
|
|
|
#ifdef IS_16
|
|
__inline void MarkDirty(surf_lcl)
|
|
LPDDRAWI_DDRAWSURFACE_LCL surf_lcl;
|
|
#else
|
|
__inline void MarkDirty(LPDDRAWI_DDRAWSURFACE_LCL surf_lcl)
|
|
#endif // IS_16
|
|
{
|
|
if(surf_lcl->lpSurfMore->lpbDirty)
|
|
{
|
|
*(surf_lcl->lpSurfMore->lpbDirty) = TRUE;
|
|
if(surf_lcl->lpSurfMore->lpDD_lcl->dwLocalFlags & DDRAWILCL_DIRECTDRAW7)
|
|
{
|
|
#ifdef DDASSERT
|
|
DDASSERT(surf_lcl->lpSurfMore->lpDD_lcl->pD3DTextureUpdate);
|
|
DDASSERT(surf_lcl->lpSurfMore->lpDD_lcl->pD3DIUnknown);
|
|
#endif
|
|
surf_lcl->lpSurfMore->lpDD_lcl->pD3DTextureUpdate(surf_lcl->lpSurfMore->lpDD_lcl->pD3DIUnknown);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Flush all batched D3D drawprimitives that's using this surface */
|
|
#ifdef IS_16
|
|
__inline void FlushD3DStates(surf_lcl)
|
|
LPDDRAWI_DDRAWSURFACE_LCL surf_lcl;
|
|
#else
|
|
__inline void FlushD3DStates(LPDDRAWI_DDRAWSURFACE_LCL surf_lcl)
|
|
#endif // IS_16
|
|
{
|
|
if(surf_lcl->lpSurfMore->lpDD_lcl->pD3DIUnknown)
|
|
surf_lcl->lpSurfMore->lpDD_lcl->pFlushD3DDevices(surf_lcl);
|
|
}
|
|
|
|
#ifdef IS_16
|
|
__inline BOOL IsToplevel(surf_lcl)
|
|
LPDDRAWI_DDRAWSURFACE_LCL surf_lcl;
|
|
#else
|
|
__inline BOOL IsToplevel(LPDDRAWI_DDRAWSURFACE_LCL surf_lcl)
|
|
#endif // IS_16
|
|
{
|
|
return !((surf_lcl->lpSurfMore->ddsCapsEx.dwCaps2 & DDSCAPS2_MIPMAPSUBLEVEL) ||
|
|
((surf_lcl->lpSurfMore->ddsCapsEx.dwCaps2 & DDSCAPS2_CUBEMAP) &&
|
|
(surf_lcl->lpAttachListFrom != NULL)));
|
|
}
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* VideoPort object interface
|
|
*/
|
|
typedef struct _DDRAWI_DDVIDEOPORT_INT
|
|
{
|
|
LPVOID lpVtbl; // pointer to array of interface methods
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpLcl; // pointer to interface data
|
|
LPDDRAWI_DDVIDEOPORT_INT lpLink; // link to next interface
|
|
DWORD dwIntRefCnt; // interface reference count
|
|
DWORD dwFlags; // Private
|
|
} DDRAWI_DDVIDEOPORT_INT;
|
|
|
|
typedef struct _DDRAWI_DDVIDEOPORT_LCL
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // pointer to DIRECTDRAW_LCL
|
|
DDVIDEOPORTDESC ddvpDesc; // description used at create time
|
|
DDVIDEOPORTINFO ddvpInfo; // most recent video port info
|
|
LPDDRAWI_DDRAWSURFACE_INT lpSurface; // surface receiving the data
|
|
LPDDRAWI_DDRAWSURFACE_INT lpVBISurface; // surface receiving the VBI data
|
|
LPDDRAWI_DDRAWSURFACE_INT *lpFlipInts; // PRIVATE: surfaces currently being autoflipped
|
|
DWORD dwNumAutoflip; // Number of current autoflip surfaces
|
|
DWORD dwProcessID; // ID of process owning this video port
|
|
DWORD dwStateFlags;
|
|
DWORD dwFlags;
|
|
DWORD dwRefCnt;
|
|
FLATPTR fpLastFlip; // Location from which we last flipped
|
|
ULONG_PTR dwReserved1; // Reserved for display driver
|
|
ULONG_PTR dwReserved2; // Reserved for display driver
|
|
HANDLE hDDVideoPort; // NT Kernel-mode handle
|
|
DWORD dwNumVBIAutoflip;//Number of VBI surfaces currently being autoflipped
|
|
LPDDVIDEOPORTDESC lpVBIDesc; // PRIVATE
|
|
LPDDVIDEOPORTDESC lpVideoDesc; // PRIVATE
|
|
LPDDVIDEOPORTINFO lpVBIInfo; // PRIVATE
|
|
LPDDVIDEOPORTINFO lpVideoInfo; // PRIVATE
|
|
DWORD dwVBIProcessID; // ID of process owning this video port
|
|
LPDDRAWI_DDVIDEOPORT_INT lpVPNotify;
|
|
} DDRAWI_DDVIDEOPORT_LCL;
|
|
|
|
#define DDRAWIVPORT_ON 0x00000001 // Video port is pumping data
|
|
#define DDRAWIVPORT_SOFTWARE_AUTOFLIP 0x00000002 // Video port cannot use hardware autoflip
|
|
#define DDRAWIVPORT_COLORKEYANDINTERP 0x00000004 // Overlay cannot bob and colorkey at same time
|
|
#define DDRAWIVPORT_NOKERNELHANDLES 0x00000008 // Unable to allocate kernel resources
|
|
#define DDRAWIVPORT_SOFTWARE_BOB 0x00000010 // All bobbing must be performed in software
|
|
#define DDRAWIVPORT_VBION 0x00000020 // Video is on for the VBI region
|
|
#define DDRAWIVPORT_VIDEOON 0x00000040 // Video is on for the video region
|
|
|
|
/*
|
|
* MotionComp object interface
|
|
*/
|
|
typedef struct _DDRAWI_DDMOTIONCOMP_INT
|
|
{
|
|
LPVOID lpVtbl;
|
|
LPDDRAWI_DDMOTIONCOMP_LCL lpLcl;
|
|
LPDDRAWI_DDMOTIONCOMP_INT lpLink;
|
|
DWORD dwIntRefCnt;
|
|
} DDRAWI_DDMOTIONCOMP_INT;
|
|
|
|
typedef struct _DDRAWI_DDMOTIONCOMP_LCL
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
GUID guid;
|
|
DWORD dwUncompWidth;
|
|
DWORD dwUncompHeight;
|
|
DDPIXELFORMAT ddUncompPixelFormat;
|
|
DWORD dwInternalFlags;
|
|
DWORD dwRefCnt;
|
|
DWORD dwProcessId;
|
|
HANDLE hMoComp;
|
|
DWORD dwDriverReserved1;
|
|
DWORD dwDriverReserved2;
|
|
DWORD dwDriverReserved3;
|
|
LPVOID lpDriverReserved1;
|
|
LPVOID lpDriverReserved2;
|
|
LPVOID lpDriverReserved3;
|
|
} DDRAWI_DDMOTIONCOMP_LCL;
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/*
|
|
* The following structure is equivalent to the DDHALINFO structure defined in DirectDraw 1.0.
|
|
* It is used by DirectDraw internally to interpret the DDHALINFO information passed from drivers written
|
|
* prior to DirectDraw 2.0. New applications and drivers should use the DDHALINFO structure defined after
|
|
* this one. DirectDraw distinguishes between the structures via the dwSize field.
|
|
*/
|
|
typedef struct _DDHALINFO_V1
|
|
{
|
|
DWORD dwSize;
|
|
LPDDHAL_DDCALLBACKS lpDDCallbacks; // direct draw object callbacks
|
|
LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks; // surface object callbacks
|
|
LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks; // palette object callbacks
|
|
VIDMEMINFO vmiData; // video memory info
|
|
DDCAPS_DX1 ddCaps; // hw specific caps
|
|
DWORD dwMonitorFrequency; // monitor frequency in current mode
|
|
DWORD hWndListBox; // list box for debug output
|
|
DWORD dwModeIndex; // current mode: index into array
|
|
LPDWORD lpdwFourCC; // fourcc codes supported
|
|
DWORD dwNumModes; // number of modes supported
|
|
LPDDHALMODEINFO lpModeInfo; // mode information
|
|
DWORD dwFlags; // create flags
|
|
LPVOID lpPDevice; // physical device ptr
|
|
DWORD hInstance; // instance handle of driver
|
|
} DDHALINFO_V1;
|
|
typedef DDHALINFO_V1 FAR *LPDDHALINFO_V1;
|
|
#define DDHALINFOSIZE_V1 sizeof( DDHALINFO_V1)
|
|
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* structure for display driver to call DDHAL_Create with
|
|
*/
|
|
typedef struct _DDHALINFO
|
|
{
|
|
DWORD dwSize;
|
|
LPDDHAL_DDCALLBACKS lpDDCallbacks; // direct draw object callbacks
|
|
LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks; // surface object callbacks
|
|
LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks; // palette object callbacks
|
|
VIDMEMINFO vmiData; // video memory info
|
|
DDCORECAPS ddCaps; // core hw specific caps
|
|
DWORD dwMonitorFrequency; // monitor frequency in current mode
|
|
LPDDHAL_GETDRIVERINFO GetDriverInfo; // callback to get arbitrary vtable from driver
|
|
DWORD dwModeIndex; // current mode: index into array
|
|
LPDWORD lpdwFourCC; // fourcc codes supported
|
|
DWORD dwNumModes; // number of modes supported
|
|
LPDDHALMODEINFO lpModeInfo; // mode information
|
|
DWORD dwFlags; // create flags
|
|
LPVOID lpPDevice; // physical device ptr
|
|
DWORD hInstance; // instance handle of driver
|
|
//------- Fields added in Version 2.0 -------
|
|
//@@BEGIN_DDKSPLIT
|
|
#if 1 //Masked for DDK
|
|
LPD3DHAL_GLOBALDRIVERDATA lpD3DGlobalDriverData; // D3D global Data
|
|
LPD3DHAL_CALLBACKS lpD3DHALCallbacks; // D3D callbacks
|
|
#else //1
|
|
//@@END_DDKSPLIT
|
|
ULONG_PTR lpD3DGlobalDriverData; // D3D global Data
|
|
ULONG_PTR lpD3DHALCallbacks; // D3D callbacks
|
|
//@@BEGIN_DDKSPLIT
|
|
#endif //1
|
|
// For backward compatibility with pre-DX5 runtimes, must not
|
|
// add fields to this structure. Use GetDriverInfo instead.
|
|
//@@END_DDKSPLIT
|
|
LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks; // Execute buffer pseudo object callbacks
|
|
} DDHALINFO;
|
|
typedef DDHALINFO FAR *LPDDHALINFO;
|
|
|
|
#define DDHALINFOSIZE_V2 sizeof( DDHALINFO )
|
|
|
|
#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001l // indicates driver is primary display driver
|
|
#define DDHALINFO_MODEXILLEGAL 0x00000002l // indicates this hardware does not support modex modes
|
|
#define DDHALINFO_GETDRIVERINFOSET 0x00000004l // indicates that GetDriverInfo is set
|
|
#define DDHALINFO_GETDRIVERINFO2 0x00000008l // indicates driver support GetDriverInfo2 variant
|
|
// of GetDriverInfo. New for DX 8.0
|
|
|
|
/*
|
|
* DDRAW16.DLL entry points
|
|
*/
|
|
typedef BOOL (DDAPI *LPDDHAL_SETINFO)( LPDDHALINFO lpDDHalInfo, BOOL reset );
|
|
typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)( LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight );
|
|
typedef void (DDAPI *LPDDHAL_VIDMEMFREE)( LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem );
|
|
|
|
extern BOOL DDAPI DDHAL_SetInfo( LPDDHALINFO lpDDHALInfo, BOOL reset );
|
|
extern FLATPTR DDAPI DDHAL_VidMemAlloc( LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight );
|
|
extern void DDAPI DDHAL_VidMemFree( LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem );
|
|
|
|
|
|
typedef struct
|
|
{
|
|
DWORD dwSize;
|
|
LPDDHAL_SETINFO lpSetInfo;
|
|
LPDDHAL_VIDMEMALLOC lpVidMemAlloc;
|
|
LPDDHAL_VIDMEMFREE lpVidMemFree;
|
|
} DDHALDDRAWFNS;
|
|
typedef DDHALDDRAWFNS FAR *LPDDHALDDRAWFNS;
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structures for Surface Object callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
/*
|
|
* This special flag is seen only by drivers. The DD runtime sets this
|
|
* bit in DDHAL_BLTDATA.dwFlags if the dwAFlags and ddargbScaleFactors
|
|
* members at the end of the DDHAL_BLTDATA structure are valid.
|
|
* The flag is always set if the DDHAL_BLTDATA structure is passed to
|
|
* the driver via the AlphaBlt HAL callback; otherwise, the flag is zero.
|
|
*/
|
|
#define DDBLT_AFLAGS 0x80000000L
|
|
|
|
/*
|
|
* This flag will be set in DDHAL_BLTDATA.dwAFlags if the call was originated
|
|
* by the AlphaBlt API method. If the call was originated by the Blt API,
|
|
* this flag will not be set.
|
|
* Drivers which have a unified Blt/AlphaBlt DDI can use this flag to distinguish
|
|
* between the two API calls.
|
|
*/
|
|
#define DDABLT_SRCOVERDEST 0x00000001L
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* structure for passing information to DDHAL Blt and AlphaBlt fns
|
|
*/
|
|
typedef struct _DDHAL_BLTDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;// dest surface
|
|
RECTL rDest; // dest rect
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; // src surface
|
|
RECTL rSrc; // src rect
|
|
DWORD dwFlags; // blt flags
|
|
DWORD dwROPFlags; // ROP flags (valid for ROPS only)
|
|
DDBLTFX bltFX; // blt FX
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_BLT Blt; // PRIVATE: ptr to callback
|
|
BOOL IsClipped; // clipped blt?
|
|
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
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
|
|
DWORD dwAFlags; // DDABLT_ flags (for AlphaBlt DDI)
|
|
DDARGB ddargbScaleFactors; // RGBA scaling factors (AlphaBlt)
|
|
//@@END_DDKSPLIT
|
|
} DDHAL_BLTDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL Lock fn
|
|
*/
|
|
typedef struct _DDHAL_LOCKDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
DWORD bHasRect; // rArea is valid
|
|
RECTL rArea; // area being locked
|
|
LPVOID lpSurfData; // pointer to screen memory (return value)
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_LOCK Lock; // PRIVATE: ptr to callback
|
|
DWORD dwFlags; // DDLOCK flags
|
|
} DDHAL_LOCKDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL Unlock fn
|
|
*/
|
|
typedef struct _DDHAL_UNLOCKDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_UNLOCK Unlock; // PRIVATE: ptr to callback
|
|
} DDHAL_UNLOCKDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL UpdateOverlay fn
|
|
*/
|
|
typedef struct _DDHAL_UPDATEOVERLAYDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;// dest surface
|
|
RECTL rDest; // dest rect
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; // src surface
|
|
RECTL rSrc; // src rect
|
|
DWORD dwFlags; // flags
|
|
DDOVERLAYFX overlayFX; // overlay FX
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; // PRIVATE: ptr to callback
|
|
} DDHAL_UPDATEOVERLAYDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL UpdateOverlay fn
|
|
*/
|
|
typedef struct _DDHAL_SETOVERLAYPOSITIONDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; // src surface
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;// dest surface
|
|
LONG lXPos; // x position
|
|
LONG lYPos; // y position
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; // PRIVATE: ptr to callback
|
|
} DDHAL_SETOVERLAYPOSITIONDATA;
|
|
/*
|
|
* structure for passing information to DDHAL SetPalette fn
|
|
*/
|
|
typedef struct _DDHAL_SETPALETTEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; // palette to set to surface
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_SETPALETTE SetPalette; // PRIVATE: ptr to callback
|
|
BOOL Attach; // attach this palette?
|
|
} DDHAL_SETPALETTEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL Flip fn
|
|
*/
|
|
typedef struct _DDHAL_FLIPDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; // current surface
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; // target surface (to flip to)
|
|
DWORD dwFlags; // flags
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_FLIP Flip; // PRIVATE: ptr to callback
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft; // current surface
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft; // target surface (to flip to)
|
|
} DDHAL_FLIPDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL DestroySurface fn
|
|
*/
|
|
typedef struct _DDHAL_DESTROYSURFACEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_DESTROYSURFACE DestroySurface;// PRIVATE: ptr to callback
|
|
} DDHAL_DESTROYSURFACEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL SetClipList fn
|
|
*/
|
|
typedef struct _DDHAL_SETCLIPLISTDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_SETCLIPLIST SetClipList; // PRIVATE: ptr to callback
|
|
} DDHAL_SETCLIPLISTDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL AddAttachedSurface fn
|
|
*/
|
|
typedef struct _DDHAL_ADDATTACHEDSURFACEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurfAttached; // surface to attach
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; // PRIVATE: ptr to callback
|
|
} DDHAL_ADDATTACHEDSURFACEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL SetColorKey fn
|
|
*/
|
|
typedef struct _DDHAL_SETCOLORKEYDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
DWORD dwFlags; // flags
|
|
DDCOLORKEY ckNew; // new color key
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_SETCOLORKEY SetColorKey; // PRIVATE: ptr to callback
|
|
} DDHAL_SETCOLORKEYDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetBltStatus fn
|
|
*/
|
|
typedef struct _DDHAL_GETBLTSTATUSDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
DWORD dwFlags; // flags
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; // PRIVATE: ptr to callback
|
|
} DDHAL_GETBLTSTATUSDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetFlipStatus fn
|
|
*/
|
|
typedef struct _DDHAL_GETFLIPSTATUSDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
DWORD dwFlags; // flags
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; // PRIVATE: ptr to callback
|
|
} DDHAL_GETFLIPSTATUSDATA;
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structures for Palette Object callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* structure for passing information to DDHAL DestroyPalette fn
|
|
*/
|
|
typedef struct _DDHAL_DESTROYPALETTEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; // palette struct
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALPALCB_DESTROYPALETTE DestroyPalette; // PRIVATE: ptr to callback
|
|
} DDHAL_DESTROYPALETTEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL SetEntries fn
|
|
*/
|
|
typedef struct _DDHAL_SETENTRIESDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; // palette struct
|
|
DWORD dwBase; // base palette index
|
|
DWORD dwNumEntries; // number of palette entries
|
|
LPPALETTEENTRY lpEntries; // color table
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALPALCB_SETENTRIES SetEntries; // PRIVATE: ptr to callback
|
|
} DDHAL_SETENTRIESDATA;
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structures for Driver Object callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* structure for passing information to DDHAL CreateSurface fn
|
|
*/
|
|
typedef struct _DDHAL_CREATESURFACEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDSURFACEDESC lpDDSurfaceDesc;// description of surface being created
|
|
LPDDRAWI_DDRAWSURFACE_LCL FAR *lplpSList; // list of created surface objects
|
|
DWORD dwSCnt; // number of surfaces in SList
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_CREATESURFACE CreateSurface; // PRIVATE: ptr to callback
|
|
} DDHAL_CREATESURFACEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL CanCreateSurface fn
|
|
*/
|
|
typedef struct _DDHAL_CANCREATESURFACEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDSURFACEDESC lpDDSurfaceDesc; // description of surface being created
|
|
DWORD bIsDifferentPixelFormat;// pixel format differs from primary surface
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_CANCREATESURFACE CanCreateSurface; // PRIVATE: ptr to callback
|
|
} DDHAL_CANCREATESURFACEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL CreatePalette fn
|
|
*/
|
|
typedef struct _DDHAL_CREATEPALETTEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; // ddraw palette struct
|
|
LPPALETTEENTRY lpColorTable; // colors to go in palette
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_CREATEPALETTE CreatePalette; // PRIVATE: ptr to callback
|
|
BOOL is_excl; // process has exclusive mode
|
|
} DDHAL_CREATEPALETTEDATA;
|
|
|
|
/*
|
|
* Return if the vertical blank is in progress
|
|
*/
|
|
#define DDWAITVB_I_TESTVB 0x80000006l
|
|
|
|
/*
|
|
* structure for passing information to DDHAL WaitForVerticalBlank fn
|
|
*/
|
|
typedef struct _DDHAL_WAITFORVERTICALBLANKDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
DWORD dwFlags; // flags
|
|
DWORD bIsInVB; // is in vertical blank
|
|
ULONG_PTR hEvent; // event
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; // PRIVATE: ptr to callback
|
|
} DDHAL_WAITFORVERTICALBLANKDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL DestroyDriver fn
|
|
*/
|
|
typedef struct _DDHAL_DESTROYDRIVERDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_DESTROYDRIVER DestroyDriver; // PRIVATE: ptr to callback
|
|
} DDHAL_DESTROYDRIVERDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL SetMode fn
|
|
*/
|
|
typedef struct _DDHAL_SETMODEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
DWORD dwModeIndex; // new mode
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_SETMODE SetMode; // PRIVATE: ptr to callback
|
|
BOOL inexcl; // in exclusive mode
|
|
BOOL useRefreshRate; // use the refresh rate data in the mode info
|
|
} DDHAL_SETMODEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL driver SetColorKey fn
|
|
*/
|
|
typedef struct _DDHAL_DRVSETCOLORKEYDATA
|
|
{
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct
|
|
DWORD dwFlags; // flags
|
|
DDCOLORKEY ckNew; // new color key
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_SETCOLORKEY SetColorKey; // PRIVATE: ptr to callback
|
|
} DDHAL_DRVSETCOLORKEYDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetScanLine fn
|
|
*/
|
|
typedef struct _DDHAL_GETSCANLINEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
DWORD dwScanLine; // returned scan line
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_GETSCANLINE GetScanLine; // PRIVATE: ptr to callback
|
|
} DDHAL_GETSCANLINEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL SetExclusiveMode fn
|
|
*/
|
|
typedef struct _DDHAL_SETEXCLUSIVEMODEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
DWORD dwEnterExcl; // TRUE if entering exclusive mode, FALSE is leaving
|
|
DWORD dwReserved; // reserved for future use
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; // PRIVATE: ptr to callback
|
|
} DDHAL_SETEXCLUSIVEMODEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL FlipToGDISurface fn
|
|
*/
|
|
typedef struct _DDHAL_FLIPTOGDISURFACEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
DWORD dwToGDI; // TRUE if flipping to the GDI surface, FALSE if flipping away
|
|
DWORD dwReserved; // reserved for future use
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; // PRIVATE: ptr to callback
|
|
} DDHAL_FLIPTOGDISURFACEDATA;
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structures for VideoPort callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* structure for passing information to DDHAL CanCreateVideoPort fn
|
|
*/
|
|
typedef struct _DDHAL_CANCREATEVPORTDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDVIDEOPORTDESC lpDDVideoPortDesc;
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort; // PRIVATE: ptr to callback
|
|
} DDHAL_CANCREATEVPORTDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL CreateVideoPort fn
|
|
*/
|
|
typedef struct _DDHAL_CREATEVPORTDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDVIDEOPORTDESC lpDDVideoPortDesc;
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port created
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_CREATEVIDEOPORT CreateVideoPort; // PRIVATE: ptr to callback
|
|
} DDHAL_CREATEVPORTDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL FlipVideoPort fn
|
|
*/
|
|
typedef struct _DDHAL_FLIPVPORTDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; // current surface
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; // target surface
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_FLIP FlipVideoPort; // PRIVATE: ptr to callback
|
|
} DDHAL_FLIPVPORTDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoPortBandwidth fn
|
|
*/
|
|
typedef struct _DDHAL_GETVPORTBANDWIDTHDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
LPDDPIXELFORMAT lpddpfFormat; // Format for bandwidth
|
|
DWORD dwWidth;
|
|
DWORD dwHeight;
|
|
DWORD dwFlags; // Prescale factor for bandwidth
|
|
LPDDVIDEOPORTBANDWIDTH lpBandwidth; // Returned bandwidth parameters
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_GETBANDWIDTH GetVideoPortBandwidth; // PRIVATE: ptr to callback
|
|
} DDHAL_GETVPORTBANDWIDTHDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoPortInputFormats fn
|
|
*/
|
|
typedef struct _DDHAL_GETVPORTINPUTFORMATDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
DWORD dwFlags; // VBI, regular, or both
|
|
LPDDPIXELFORMAT lpddpfFormat; // Array of formats
|
|
DWORD dwNumFormats; // # of formats in array
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_GETINPUTFORMATS GetVideoPortInputFormats; // PRIVATE: ptr to callback
|
|
} DDHAL_GETVPORTINPUTFORMATDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoPortOutputFormats fn
|
|
*/
|
|
typedef struct _DDHAL_GETVPORTOUTPUTFORMATDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
DWORD dwFlags; // VBI, regular, or both
|
|
LPDDPIXELFORMAT lpddpfInputFormat; // Input format
|
|
LPDDPIXELFORMAT lpddpfOutputFormats; // Array of output formats
|
|
DWORD dwNumFormats; // # of formats in array
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_GETOUTPUTFORMATS GetVideoPortOutputFormats; // PRIVATE: ptr to callback
|
|
} DDHAL_GETVPORTOUTPUTFORMATDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoPortField fn
|
|
*/
|
|
typedef struct _DDHAL_GETVPORTFIELDDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
BOOL bField; // TRUE if even
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_GETFIELD GetVideoPortField; // PRIVATE: ptr to callback
|
|
} DDHAL_GETVPORTFIELDDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoPortLine fn
|
|
*/
|
|
typedef struct _DDHAL_GETVPORTLINEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
DWORD dwLine; // Current line counter
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_GETLINE GetVideoPortLine; // PRIVATE: ptr to callback
|
|
} DDHAL_GETVPORTLINEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoPortConnectInfo fn
|
|
*/
|
|
typedef struct _DDHAL_GETVPORTCONNECTDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
DWORD dwPortId; // ID of desired video port
|
|
LPDDVIDEOPORTCONNECT lpConnect; // Array of DDVIDEOPORTCONNECT structures
|
|
DWORD dwNumEntries; // # of structures in array
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_GETVPORTCONNECT GetVideoPortConnectInfo; // PRIVATE: ptr to callback
|
|
} DDHAL_GETVPORTCONNECTDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL DestroyVideoPort fn
|
|
*/
|
|
typedef struct _DDHAL_DESTROYVPORTDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_DESTROYVPORT DestroyVideoPort; // PRIVATE: ptr to callback
|
|
} DDHAL_DESTROYVPORTDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoPortFlipStatus fn
|
|
*/
|
|
typedef struct _DDHAL_GETVPORTFLIPSTATUSDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
FLATPTR fpSurface; // surface struct
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_GETFLIPSTATUS GetVideoPortFlipStatus; // PRIVATE: ptr to callback
|
|
} DDHAL_GETVPORTFLIPSTATUSDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL UpdateVideoPort fn
|
|
*/
|
|
typedef struct _DDHAL_UPDATEVPORTDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
LPDDRAWI_DDRAWSURFACE_INT *lplpDDSurface; // surface struct
|
|
LPDDRAWI_DDRAWSURFACE_INT *lplpDDVBISurface; // VBI surface structure
|
|
LPDDVIDEOPORTINFO lpVideoInfo; // Video information
|
|
DWORD dwFlags; // DDRAWI_VPORTSTART, DDRAWI_VPORTSTOP, DDRAWI_VPORTUPDATE
|
|
DWORD dwNumAutoflip; // # of autoflip surfaces. If > 1, lpDDSurface and lpDDVBISurface are arrays.
|
|
DWORD dwNumVBIAutoflip; // # of autoflip surfaces. If > 1, lpDDSurface and lpDDVBISurface are arrays.
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_UPDATE UpdateVideoPort; // PRIVATE: ptr to callback
|
|
} DDHAL_UPDATEVPORTDATA;
|
|
|
|
#define DDRAWI_VPORTSTART 0x0001
|
|
#define DDRAWI_VPORTSTOP 0x0002
|
|
#define DDRAWI_VPORTUPDATE 0x0003
|
|
|
|
/*
|
|
* structure for passing information to DDHAL WaitForVideoPortSync fn
|
|
*/
|
|
typedef struct _DDHAL_WAITFORVPORTSYNCDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
DWORD dwFlags; // DDVPEVENT_XXXX
|
|
DWORD dwLine;
|
|
DWORD dwTimeOut; // Max time to wait before returning
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_WAITFORSYNC WaitForVideoPortSync; // PRIVATE: ptr to callback
|
|
} DDHAL_WAITFORVPORTSYNCDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoSignalStatus fn
|
|
*/
|
|
typedef struct _DDHAL_GETVPORTSIGNALDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
DWORD dwStatus; // Video signal status
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_GETSIGNALSTATUS GetVideoSignalStatus;// PRIVATE: ptr to callback
|
|
} DDHAL_GETVPORTSIGNALDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetVideoSignalStatus fn
|
|
*/
|
|
typedef struct _DDHAL_VPORTCOLORDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
DWORD dwFlags; // Video signal status
|
|
LPDDCOLORCONTROL lpColorData;
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALVPORTCB_COLORCONTROL ColorControl; // PRIVATE: ptr to callback
|
|
} DDHAL_VPORTCOLORDATA;
|
|
|
|
#define DDRAWI_VPORTGETCOLOR 0x0001
|
|
#define DDRAWI_VPORTSETCOLOR 0x0002
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structures for Color Control callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* structure for passing information to DDHAL ColorControl fn
|
|
*/
|
|
typedef struct _DDHAL_COLORCONTROLDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface
|
|
LPDDCOLORCONTROL lpColorData; // color control information
|
|
DWORD dwFlags; // DDRAWI_GETCOLOR/DDRAWI_SETCOLOR
|
|
HRESULT ddRVal; // return value
|
|
LPDDHALCOLORCB_COLORCONTROL ColorControl; // PRIVATE: ptr to callback
|
|
} DDHAL_COLORCONTROLDATA;
|
|
|
|
#define DDRAWI_GETCOLOR 0x0001
|
|
#define DDRAWI_SETCOLOR 0x0002
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structure for GetDriverData callback
|
|
*
|
|
***************************************************************************/
|
|
|
|
typedef struct _DDHAL_GETDRIVERINFODATA {
|
|
|
|
// Input fields filled in by DirectDraw
|
|
DWORD dwSize; // Size of this structure
|
|
DWORD dwFlags; // Flags
|
|
GUID guidInfo; // GUID that DirectX is querying for
|
|
DWORD dwExpectedSize; // Size of callbacks structure expected by DirectDraw.
|
|
LPVOID lpvData; // Buffer that will receive the requested data
|
|
|
|
// Output fields filled in by driver
|
|
DWORD dwActualSize; // Size of callbacks structure expected by driver
|
|
HRESULT ddRVal; // Return value from driver
|
|
|
|
// Input field: Context information for driver
|
|
// On Win95, this is the dwReserved3 field of the DIRECTDRAW_GBL
|
|
// On NT, this is the hDD field of DIRECTDRAW_GBL
|
|
ULONG_PTR dwContext; // Context Information
|
|
|
|
} DDHAL_GETDRIVERINFODATA;
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structure for misc. driver callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetAvailDriverMemory fn
|
|
*/
|
|
typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
DDSCAPS DDSCaps; // caps for type of surface memory
|
|
DWORD dwTotal; // total memory for this kind of surface
|
|
DWORD dwFree; // free memory for this kind of surface
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; // PRIVATE: ptr to callback
|
|
DDSCAPSEX ddsCapsEx; // Added in V6. Driver should check DDVERSION info
|
|
// to see if this field is present.
|
|
} DDHAL_GETAVAILDRIVERMEMORYDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHEL UpdateNonLocalHeap
|
|
*/
|
|
typedef struct _DDHAL_UPDATENONLOCALHEAPDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
DWORD dwHeap; // heap index
|
|
FLATPTR fpGARTLin; // linear GART address of start of heap
|
|
FLATPTR fpGARTDev; // high physical GART address of start of heap
|
|
ULONG_PTR ulPolicyMaxBytes; // maximum amount of AGP memory to use
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; // PRIVATE: ptr to callback
|
|
} DDHAL_UPDATENONLOCALHEAPDATA;
|
|
|
|
/*
|
|
* Heap Alignment Data Structures
|
|
*/
|
|
typedef struct _DDHAL_GETHEAPALIGNMENTDATA
|
|
{
|
|
ULONG_PTR dwInstance; // driver context as returned from 32-bit driver init routine
|
|
DWORD dwHeap; // heap index passed by DirectDraw
|
|
HRESULT ddRVal; // return value
|
|
LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; // PRIVATE: ptr to callback.
|
|
HEAPALIGNMENT Alignment; // Filled in by driver. Defined in dmemmgr.h
|
|
} DDHAL_GETHEAPALIGNMENTDATA;
|
|
|
|
/*
|
|
* These are the only caps you can set in DDHAL_GETHEAPALIGNMENTDATA.Alignment.ddsCaps.
|
|
* Any other caps will be rejected by DirectDraw.
|
|
*/
|
|
|
|
#define DDHAL_ALIGNVALIDCAPS (DDSCAPS_OFFSCREENPLAIN | \
|
|
DDSCAPS_EXECUTEBUFFER | \
|
|
DDSCAPS_OVERLAY | \
|
|
DDSCAPS_TEXTURE | \
|
|
DDSCAPS_ZBUFFER | \
|
|
DDSCAPS_ALPHA | \
|
|
DDSCAPS_FLIP )
|
|
|
|
/*
|
|
* Note that GetSysmemBltStatus uses the same parameter block as GetBltStatus,
|
|
* namely DDHAL_GETBLTSTATUSDATA
|
|
*/
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef POSTPONED2
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structures for Miscellaneous2 callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* Structure that contains the information describing a sprite in the
|
|
* display list that is passed to SetSpriteDisplayList(). This is
|
|
* similar to the DDSPRITE structure used by applications, except
|
|
* that the ddckDestKey, ddckSrcKey, dwRectCnt, and lpRect members
|
|
* below are "reserved" in the DDSPRITE structure.
|
|
*/
|
|
typedef struct _DDSPRITEI {
|
|
RECT rcDest; // destination rectangle
|
|
LPDIRECTDRAWSURFACE lpDDSSrc; // source surface
|
|
RECT rcSrc; // source rectangle
|
|
DWORD dwFlags; // DDSPRITE_ flags
|
|
DWORD dwRectCnt; // no. of rects in clip region
|
|
LPRECT lpRect; // array of clip rects
|
|
DDSPRITEFX ddSpriteFX; // sprite special FX
|
|
} DDSPRITEI, *LPDDSPRITEI;
|
|
|
|
/*
|
|
* Structure for passing information to DDHAL SetSpriteDisplayList function
|
|
*/
|
|
typedef struct _DDHAL_SETSPRITEDISPLAYLISTDATA {
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // dest surface struct
|
|
LPDDSPRITEI *lplpDDSprite; // sprite display list
|
|
DWORD dwCount; // number of sprites in list
|
|
DWORD dwSize; // size of each struct in list
|
|
DWORD dwFlags; // flags
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDTargetSurface; // target surface (to flip to)
|
|
DWORD dwRectCnt; // no. of rects in clip region
|
|
LPRECT lpRect; // array of clip rects
|
|
HRESULT ddRVal; // return value
|
|
//LPDDHAL_SETSPRITEDISPLAYLIST SetSpriteDisplayList; // PRIVATE: ptr to callback
|
|
} DDHAL_SETSPRITEDISPLAYLISTDATA;
|
|
|
|
/*
|
|
* Structure for passing information to DDHAL Resize function
|
|
*/
|
|
typedef struct _DDHAL_RESIZEDATA {
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // target surface struct
|
|
DWORD dwFlags; // flags
|
|
DWORD dwWidth; // new width of surface
|
|
DWORD dwHeight; // new height of surface
|
|
HRESULT ddRVal; // return value
|
|
//LPDDHAL_RESIZE Resize; // PRIVATE: ptr to callback
|
|
} DDHAL_RESIZEDATA;
|
|
|
|
/*
|
|
* Structure for passing information to DDHAL CaptureComposionBuffer function
|
|
*/
|
|
typedef struct _DDHAL_CAPTURECOMPOSITIONBUFFERDATA {
|
|
LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // dest surface struct
|
|
DWORD dwFlags; // flags
|
|
HRESULT ddRVal; // return value
|
|
//LPDDHAL_CAPTURECOMPOSITIONBUFFER CaptureCompostionBuffer; // PRIVATE: ptr to callback
|
|
} DDHAL_CAPTURECOMPOSITIONBUFFERDATA;
|
|
|
|
#endif //POSTPONED2
|
|
//@@END_DDKSPLIT
|
|
|
|
typedef struct _DDHAL_CREATESURFACEEXDATA {
|
|
DWORD dwFlags; // Currently always 0 and not used
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; // list of created surface objects
|
|
HRESULT ddRVal; // return value
|
|
} DDHAL_CREATESURFACEEXDATA;
|
|
|
|
typedef struct _DDHAL_GETDRIVERSTATEDATA {
|
|
DWORD dwFlags; // Flags to indicate the data
|
|
// required
|
|
union
|
|
{
|
|
// LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct
|
|
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
|
|
} DDHAL_GETDRIVERSTATEDATA;
|
|
|
|
typedef struct _DDHAL_DESTROYDDLOCALDATA
|
|
{
|
|
DWORD dwFlags;
|
|
LPDDRAWI_DIRECTDRAW_LCL pDDLcl;
|
|
HRESULT ddRVal;
|
|
} DDHAL_DESTROYDDLOCALDATA;
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structure for kernel callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* structure for passing information to DDHAL SyncSurfaceData fn
|
|
*/
|
|
typedef struct _DDHAL_SYNCSURFACEDATA
|
|
{
|
|
DWORD dwSize; // Size of this structure
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // Surface to sync with
|
|
DWORD dwSurfaceOffset; // Offset in frame buffer of surface
|
|
ULONG_PTR fpLockPtr; // Surface lock ptr
|
|
LONG lPitch; // Surface pitch
|
|
DWORD dwOverlayOffset; // Added to dwSurfaceOffset for origin, clipping, etc.
|
|
DWORD dwOverlaySrcWidth; // Src width of overlay
|
|
DWORD dwOverlaySrcHeight; // Src height of overlay
|
|
DWORD dwOverlayDestWidth; // Dest width of overlay
|
|
DWORD dwOverlayDestHeight; // Dest height of overlay
|
|
ULONG_PTR dwDriverReserved1; // Reserved for the HAL
|
|
ULONG_PTR dwDriverReserved2; // Reserved for the HAL
|
|
ULONG_PTR dwDriverReserved3; // Reserved for the HAL
|
|
HRESULT ddRVal;
|
|
} DDHAL_SYNCSURFACEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL SyncVideoPortData fn
|
|
*/
|
|
typedef struct _DDHAL_SYNCVIDEOPORTDATA
|
|
{
|
|
DWORD dwSize; // Size of this structure
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; // driver struct
|
|
LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; // Video port object
|
|
DWORD dwOriginOffset; // Start address relative to surface
|
|
DWORD dwHeight; // Height of total video region (per field)
|
|
DWORD dwVBIHeight; // Height of VBI region (per field)
|
|
ULONG_PTR dwDriverReserved1; // Reserved for the HAL
|
|
ULONG_PTR dwDriverReserved2; // Reserved for the HAL
|
|
ULONG_PTR dwDriverReserved3; // Reserved for the HAL
|
|
HRESULT ddRVal;
|
|
} DDHAL_SYNCVIDEOPORTDATA;
|
|
|
|
//@@BEGIN_DDKSPLIT
|
|
#ifdef POSTPONED
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structures for Optimized Surface callbacks
|
|
*
|
|
***************************************************************************/
|
|
typedef struct _DDHAL_CANOPTIMIZESURFACEDATA
|
|
{
|
|
DWORD dwFlags; //in: Not used
|
|
DWORD dwSize; //in: For future expansion
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; //in: Driver Struct
|
|
DDOPTSURFACEDESC ddOptSurfDesc; //in: OptSurf description
|
|
DDSURFACEDESC2 ddSurfaceDesc; //in: Surface Description
|
|
DWORD bCanOptimize; //out: Can optimize or not
|
|
ULONG_PTR dwReserved1; //in: Not used
|
|
HRESULT ddRVal; //out: Returned value
|
|
} DDHAL_CANOPTIMIZESURFACEDATA;
|
|
|
|
typedef struct _DDHAL_OPTIMIZESURFACEDATA
|
|
{
|
|
DWORD dwFlags; //in: Not used
|
|
DWORD dwSize; //in: For future expansion
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; //in: Driver Struct
|
|
DDOPTSURFACEDESC ddOptSurfDesc; //in-out: OptSurf description
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSSrc; //in: Source surface
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSDest; //in: Destination surface
|
|
ULONG_PTR dwReserved1; //in: Not used
|
|
HRESULT ddRVal; //out: Returned value
|
|
} DDHAL_OPTIMIZESURFACEDATA;
|
|
|
|
typedef struct _DDHAL_UNOPTIMIZESURFACEDATA
|
|
{
|
|
DWORD dwFlags; //in: Not used
|
|
DWORD dwSize; //in: For future expansion
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; //in: Driver Struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSSrc; //in: Source surface
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSDest; //in: Destination surface
|
|
ULONG_PTR dwReserved1; //in: Not used
|
|
HRESULT ddRVal; //out: Returned value
|
|
} DDHAL_UNOPTIMIZESURFACEDATA;
|
|
|
|
typedef struct _DDHAL_COPYOPTSURFACEDATA
|
|
{
|
|
DWORD dwFlags; //in: Not used
|
|
DWORD dwSize; //in: For future expansion
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; //in: Driver Struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSSrc; //in: Source surface
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDDSDest; //in: Destination surface
|
|
ULONG_PTR dwReserved1; //in: Not used
|
|
HRESULT ddRVal; //out: Returned value
|
|
} DDHAL_COPYOPTSURFACEDATA;
|
|
|
|
typedef struct _DDHAL_KMODESVCDATA
|
|
{
|
|
DWORD dwFlags; //in-out:
|
|
DWORD dwSize; //in: For future expansion
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD; //in: Driver Struct
|
|
DWORD dwNumBytes; //in-out: Number of bytes
|
|
// communicated
|
|
LPVOID lpData; //in-out: The actual data
|
|
// communicated
|
|
ULONG_PTR dwReserved1; //in: Not used
|
|
HRESULT ddRVal; //out: Returned value
|
|
} DDHAL_OPTSURFKMODESVCDATA;
|
|
|
|
#endif //POSTPONED
|
|
//@@END_DDKSPLIT
|
|
|
|
/****************************************************************************
|
|
*
|
|
* DDHAL structure for motion comp callbacks
|
|
*
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetMoCompGuids
|
|
*/
|
|
typedef struct _DDHAL_GETMOCOMPGUIDSDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
DWORD dwNumGuids;
|
|
LPGUID lpGuids;
|
|
HRESULT ddRVal;
|
|
LPDDHALMOCOMPCB_GETGUIDS GetMoCompGuids;
|
|
} DDHAL_GETMOCOMPGUIDSDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetMoCompFormats
|
|
*/
|
|
typedef struct _DDHAL_GETMOCOMPFORMATSDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPGUID lpGuid;
|
|
DWORD dwNumFormats;
|
|
LPDDPIXELFORMAT lpFormats;
|
|
HRESULT ddRVal;
|
|
LPDDHALMOCOMPCB_GETFORMATS GetMoCompFormats;
|
|
} DDHAL_GETMOCOMPFORMATSDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL CreateMoComp
|
|
*/
|
|
typedef struct _DDHAL_CREATEMOCOMPDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp;
|
|
LPGUID lpGuid;
|
|
DWORD dwUncompWidth;
|
|
DWORD dwUncompHeight;
|
|
DDPIXELFORMAT ddUncompPixelFormat;
|
|
LPVOID lpData;
|
|
DWORD dwDataSize;
|
|
HRESULT ddRVal;
|
|
LPDDHALMOCOMPCB_CREATE CreateMoComp;
|
|
} DDHAL_CREATEMOCOMPDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetMoCompBuffInfo
|
|
*/
|
|
typedef struct _DDMCCOMPBUFFERINFO
|
|
{
|
|
DWORD dwSize; // [in] size of the struct
|
|
DWORD dwNumCompBuffers; // [out] number of buffers required for compressed data
|
|
DWORD dwWidthToCreate; // [out] Width of surface to create
|
|
DWORD dwHeightToCreate; // [out] Height of surface to create
|
|
DWORD dwBytesToAllocate; // [out] Total number of bytes used by each surface
|
|
DDSCAPS2 ddCompCaps; // [out] caps to create surfaces to store compressed data
|
|
DDPIXELFORMAT ddPixelFormat; // [out] format to create surfaces to store compressed data
|
|
} DDMCCOMPBUFFERINFO, *LPDDMCCOMPBUFFERINFO;
|
|
|
|
typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPGUID lpGuid;
|
|
DWORD dwWidth; // [in] width of uncompressed data
|
|
DWORD dwHeight; // [in] height of uncompressed data
|
|
DDPIXELFORMAT ddPixelFormat; // [in] pixel-format of uncompressed data
|
|
DWORD dwNumTypesCompBuffs;// [in/out] number of memory types required for comp buffers
|
|
LPDDMCCOMPBUFFERINFO lpCompBuffInfo; // [in] driver supplied info regarding comp buffers (allocated by client)
|
|
HRESULT ddRVal; // [out]
|
|
LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo;
|
|
} DDHAL_GETMOCOMPCOMPBUFFDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL GetMoCompBuffInfo
|
|
*/
|
|
typedef struct _DDHAL_GETINTERNALMOCOMPDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPGUID lpGuid;
|
|
DWORD dwWidth; // [in] width of uncompressed data
|
|
DWORD dwHeight; // [in] height of uncompressed data
|
|
DDPIXELFORMAT ddPixelFormat; // [in] pixel-format of uncompressed data
|
|
DWORD dwScratchMemAlloc; // [out] amount of scratch memory will the hal allocate for its private use
|
|
HRESULT ddRVal; // [out]
|
|
LPDDHALMOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo;
|
|
} DDHAL_GETINTERNALMOCOMPDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL BeginMoCompFrame
|
|
*/
|
|
typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp;
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpDestSurface; // [in] destination buffer in which to decoding this frame
|
|
DWORD dwInputDataSize; // [in] size of other misc input data to begin frame
|
|
LPVOID lpInputData; // [in] pointer to misc input data
|
|
DWORD dwOutputDataSize; // [in] size of other misc output data to begin frame
|
|
LPVOID lpOutputData; // [in] pointer to output misc data (allocated by client)
|
|
HRESULT ddRVal; // [out]
|
|
LPDDHALMOCOMPCB_BEGINFRAME BeginMoCompFrame;
|
|
} DDHAL_BEGINMOCOMPFRAMEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL EndMoCompFrame
|
|
*/
|
|
typedef struct _DDHAL_ENDMOCOMPFRAMEDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp;
|
|
LPVOID lpInputData;
|
|
DWORD dwInputDataSize;
|
|
HRESULT ddRVal;
|
|
LPDDHALMOCOMPCB_ENDFRAME EndMoCompFrame;
|
|
} DDHAL_ENDMOCOMPFRAMEDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL RenderMoComp
|
|
*/
|
|
typedef struct _DDMCBUFFERINFO
|
|
{
|
|
DWORD dwSize; // [in] size of the struct
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpCompSurface; // [in] pointer to buffer containing compressed data
|
|
DWORD dwDataOffset; // [in] offset of relevant data from the beginning of buffer
|
|
DWORD dwDataSize; // [in] size of relevant data
|
|
LPVOID lpPrivate; // Reserved for DirectDraw;
|
|
} DDMCBUFFERINFO, *LPDDMCBUFFERINFO;
|
|
|
|
|
|
typedef struct _DDHAL_RENDERMOCOMPDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp;
|
|
DWORD dwNumBuffers; // [in] Number of entries in the lpMacroBlockInfo array
|
|
LPDDMCBUFFERINFO lpBufferInfo; // [in] Surfaces containing macro block info
|
|
DWORD dwFunction; // [in] Function
|
|
LPVOID lpInputData;
|
|
DWORD dwInputDataSize;
|
|
LPVOID lpOutputData;
|
|
DWORD dwOutputDataSize;
|
|
HRESULT ddRVal; // [out]
|
|
LPDDHALMOCOMPCB_RENDER RenderMoComp;
|
|
} DDHAL_RENDERMOCOMPDATA;
|
|
|
|
/*
|
|
* structure for passing information to DDHAL QueryMoCompStatus
|
|
*/
|
|
typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp;
|
|
LPDDRAWI_DDRAWSURFACE_LCL lpSurface; // [in] Surface being queried
|
|
DWORD dwFlags; // [in] DDMCQUERY_XXX falgs
|
|
HRESULT ddRVal; // [out]
|
|
LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus;
|
|
} DDHAL_QUERYMOCOMPSTATUSDATA;
|
|
|
|
#define DDMCQUERY_READ 0x00000001
|
|
//@@BEGIN_DDKSPLIT
|
|
#define DDMCQUERY_VALID 0x00000001
|
|
//@@END_DDKSPLIT
|
|
|
|
/*
|
|
* structure for passing information to DDHAL DestroyVideo
|
|
*/
|
|
typedef struct _DDHAL_DESTROYMOCOMPDATA
|
|
{
|
|
LPDDRAWI_DIRECTDRAW_LCL lpDD;
|
|
LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp;
|
|
HRESULT ddRVal;
|
|
LPDDHALMOCOMPCB_DESTROY DestroyMoComp;
|
|
} DDHAL_DESTROYMOCOMPDATA;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|