ddrawi.h revision af062818b47340eef15700d2f0211576ba3506ee
/*
* DirectDraw driver interface
* (DirectX 7 version)
*
* Copyright (C) 2001 Ove Kaaven
*
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_DDRAWI_H
#define __WINE_DDRAWI_H
#ifdef __cplusplus
extern "C" {
#endif
#include <ddraw.h>
#include <dciddi.h> /* the DD HAL is layered onto DCI escapes */
/* the DirectDraw versions */
/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
#define DD_HAL_VERSION 0x0100
/* more DCICOMMAND escapes */
#define DDCREATEDRIVEROBJECT 10
#define DDGET32BITDRIVERNAME 11
#define DDNEWCALLBACKFNS 12
#define DDVERSIONINFO 13
#define MAX_DRIVER_NAME CCHDEVICENAME
/*****************************************************************************
* Initialization stuff
*/
typedef struct {
char szName[260];
char szEntryPoint[64];
typedef struct {
/* pointer to video memory */
/* predeclare some structures */
typedef struct _DDHALINFO *LPDDHALINFO;
typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;
typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;
typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;
typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT;
typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL;
typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL;
typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE;
typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE;
typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT;
typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL;
typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL;
typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT;
typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL;
typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL;
typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT;
typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL;
typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT;
typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL;
/* structure GUIDs for GetDriverInfo */
DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );
/* ...videport stuff here... */
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 );
/* ...kernel stuff here... */
DEFINE_GUID( GUID_D3DExtendedCaps, 0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 );
DEFINE_GUID( GUID_ZPixelFormats, 0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE );
DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
/* ...more stuff here... */
DEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 );
/* ...motioncomp stuff here... */
DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A );
/*****************************************************************************
* driver->ddraw callbacks
*/
typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight);
typedef struct {
/*****************************************************************************
* mode info structure
*/
typedef struct _DDHALMODEINFO {
#define DDMODEINFO_PALETTIZED 0x0001
#define DDMODEINFO_MODEX 0x0002
#define DDMODEINFO_UNSUPPORTED 0x0004
#define DDMODEINFO_STANDARDVGA 0x0008
#define DDMODEINFO_MAXREFRESH 0x0010
#define DDMODEINFO_STEREO 0x0020
/*****************************************************************************
* video memory info structure
*/
typedef struct _VIDMEM {
union {
union {
#define VIDMEM_ISLINEAR 0x00000001
#define VIDMEM_ISRECTANGULAR 0x00000002
#define VIDMEM_ISHEAP 0x00000004
#define VIDMEM_ISNONLOCAL 0x00000008
#define VIDMEM_ISWC 0x00000010
#define VIDMEM_ISDISABLED 0x00000020
typedef struct _VIDMEMINFO {
typedef struct _HEAPALIAS {
} HEAPALIAS,*LPHEAPALIAS;
typedef struct _HEAPALIASINFO {
#define HEAPALIASINFO_MAPPEDREAL 0x00000001
#define HEAPALIASINFO_MAPPEDDUMMY 0x00000002
/*****************************************************************************
* capabilities structures
*/
typedef struct _DDCORECAPS {
typedef struct _DDNONLOCALVIDMEMCAPS {
typedef struct _DDSCAPSEX {
} DDSCAPSEX,*LPDDSCAPSEX;
/*****************************************************************************
* ddraw->driver callbacks
*/
#define DDHAL_DRIVER_NOTHANDLED 0
#define DDHAL_DRIVER_HANDLED 1
#define DDHAL_DRIVER_NOCKEYHW 2
typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA;
typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA;
typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA;
typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA;
typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA;
typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA;
typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA;
typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA;
typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA;
typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA;
typedef struct _DDHAL_DDCALLBACKS {
/* DirectX 2 */
typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA;
typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA;
typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA;
typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA;
typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA;
typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA;
typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA;
typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA;
typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA;
typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA;
typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA;
typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA;
typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA;
typedef struct _DDHAL_DDSURFACECALLBACKS {
typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA;
typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA;
typedef struct _DDHAL_DDPALETTECALLBACKS {
typedef struct _DDHAL_DDEXEBUFCALLBACKS {
typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA;
typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA;
typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA;
typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS {
typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA;
typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA;
typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA;
typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS {
/*****************************************************************************
* driver info structure
*
* The HAL is queried for additional callbacks via the GetDriverInfo callback.
*/
typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;
typedef struct _DDHALINFO {
/* DirectX 2 */
} DDHALINFO;
#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001
#define DDHALINFO_MODEXILLEGAL 0x00000002
#define DDHALINFO_GETDRIVERINFOSET 0x00000004
/* where the high-level ddraw implementation stores the callbacks */
typedef struct _DDHAL_CALLBACKS {
/* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */
/*****************************************************************************
* parameter structures
*/
typedef struct _DDHAL_DESTROYDRIVERDATA {
typedef struct _DDHAL_SETMODEDATA {
typedef struct _DDHAL_CREATESURFACEDATA {
typedef struct _DDHAL_CANCREATESURFACEDATA {
typedef struct _DDHAL_CREATEPALETTEDATA {
typedef struct _DDHAL_SETEXCLUSIVEMODEDATA {
/* surfaces */
typedef struct _DDHAL_DESTROYSURFACEDATA {
typedef struct _DDHAL_FLIPDATA {
typedef struct _DDHAL_LOCKDATA {
typedef struct _DDHAL_UNLOCKDATA {
typedef struct _DDHAL_BLTDATA {
typedef struct _DDHAL_UPDATEOVERLAYDATA {
typedef struct _DDHAL_SETPALETTEDATA {
/* palettes */
typedef struct _DDHAL_DESTROYPALETTEDATA {
typedef struct _DDHAL_SETENTRIESDATA {
typedef struct _DDHAL_GETDRIVERINFODATA {
/*****************************************************************************
* high-level ddraw implementation structures
*/
typedef struct _IUNKNOWN_LIST {
struct _IUNKNOWN_LIST * lpLink;
typedef struct _PROCESS_LIST {
struct _PROCESS_LIST * lpLink;
typedef struct _ATTACHLIST {
struct _ATTACHLIST * lpLink;
#define DDAL_IMPLICIT 0x00000001
typedef struct _ACCESSRECTLIST {
struct _ACCESSRECTLIST * lpLink;
#define ACCESSRECT_VRAMSTYLE 0x00000001
#define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002
#define ACCESSRECT_BROKEN 0x00000004
typedef struct _DBLNODE {
typedef struct _DDRAWI_DIRECTDRAW_INT {
typedef struct _DDRAWI_DIRECTDRAW_LCL {
/* DirectX 2 */
/* DirectX 5.0 */
/* DirectX 5.0A */
/* DirectX 6.0 */
#define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001
#define DDRAWILCL_ISFULLSCREEN 0x00000002
#define DDRAWILCL_SETCOOPCALLED 0x00000004
#define DDRAWILCL_ACTIVEYES 0x00000008
#define DDRAWILCL_ACTIVENO 0x00000010
#define DDRAWILCL_HOOKEDHWND 0x00000020
#define DDRAWILCL_ALLOWMODEX 0x00000040
#define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080
#define DDRAWILCL_MODEHASBEENCHANGED 0x00000100
#define DDRAWILCL_CREATEDWINDOW 0x00000200
#define DDRAWILCL_DIRTYDC 0x00000400
#define DDRAWILCL_DISABLEINACTIVATE 0x00000800
#define DDRAWILCL_CURSORCLIPPED 0x00001000
#define DDRAWILCL_EXPLICITMONITOR 0x00002000
#define DDRAWILCL_MULTITHREADED 0x00004000
#define DDRAWILCL_FPUSETUP 0x00008000
#define DDRAWILCL_POWEREDDOWN 0x00010000
#define DDRAWILCL_DIRECTDRAW7 0x00020000
#define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000
#define DDRAWILCL_FPUPRESERVE 0x00080000
typedef struct _DDRAWI_DIRECTDRAW_GBL {
char cObsolete[12];
volatile LPWORD lpwPDeviceFlags;
/* DirectX 2 */
/* DirectX 5.0 */
/* DirectX 5.0A */
char cDriverName[MAX_DRIVER_NAME];
/* DirectX 6.0 */
#define DDRAWI_VIRTUALDESKTOP 0x00000008
#define DDRAWI_MODEX 0x00000010
#define DDRAWI_DISPLAYDRV 0x00000020
#define DDRAWI_FULLSCREEN 0x00000040
#define DDRAWI_MODECHANGED 0x00000080
#define DDRAWI_NOHARDWARE 0x00000100
#define DDRAWI_PALETTEINIT 0x00000200
#define DDRAWI_NOEMULATION 0x00000400
/* more... */
/* surfaces */
typedef struct _DDRAWI_DDRAWSURFACE_INT {
typedef struct _DDRAWI_DDRAWSURFACE_GBL {
union {
union {
union {
union {
/* optional (defaults to primary surface pixelformat) */
#define DDRAWISURFGBL_MEMFREE 0x00000001
#define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002
#define DDRAWISURFGBL_ISGDISURFACE 0x00000004
#define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008
#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010
#define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020
#define DDRAWISURFGBL_LOCKBROKEN 0x00000040
#define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080
#define DDRAWISURFGBL_ISCLIENTMEM 0x00000100
#define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200
#define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400
#define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600
#define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800
#define DDRAWISURFGBL_VPORTDATA 0x00001000
#define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000
#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000
#define DDRAWISURFGBL_FASTLOCKHELD 0x00008000
#define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000
typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {
union {
/* the MS version of this macro was somewhat obfuscated and unreadable
* (possibly because of mediocre MS coders)... so I simplified it...
* (and so I commit no copyright violations either, hah) */
#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \
typedef struct _DDRAWI_DDRAWSURFACE_MORE {
/* DirectX 5.0 */
typedef struct _DDRAWI_DDRAWSURFACE_LCL {
/* overlays only */
#define DDRAWISURF_ATTACHED 0x00000001
#define DDRAWISURF_IMPLICITCREATE 0x00000002
#define DDRAWISURF_ISFREE 0x00000004
#define DDRAWISURF_ATTACHED_FROM 0x00000008
#define DDRAWISURF_IMPLICITROOT 0x00000010
#define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020
#define DDRAWISURF_DATAISALIASED 0x00000040
#define DDRAWISURF_HASDC 0x00000080
#define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100
#define DDRAWISURF_HASCKEYDESTBLT 0x00000200
#define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400
#define DDRAWISURF_HASCKEYSRCBLT 0x00000800
#define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000
#define DDRAWISURF_HASPIXELFORMAT 0x00002000
#define DDRAWISURF_HASOVERLAYDATA 0x00004000
#define DDRAWISURF_SETGAMMA 0x00008000
/* more... */
#define DDRAWISURF_INVALID 0x10000000
/* palettes */
typedef struct _DDRAWI_DDRAWPALETTE_INT {
typedef struct _DDRAWI_DDRAWPALETTE_GBL {
union {
/* DirectX 5.0 */
/* DirectX 6.0 */
/* DirectX 7.0 */
#define DDRAWIPAL_256 0x00000001
#define DDRAWIPAL_16 0x00000002
#define DDRAWIPAL_GDI 0x00000004
#define DDRAWIPAL_STORED_8 0x00000008
#define DDRAWIPAL_STORED_16 0x00000010
#define DDRAWIPAL_STORED_24 0x00000020
#define DDRAWIPAL_EXCLUSIVE 0x00000040
#define DDRAWIPAL_INHEL 0x00000080
#define DDRAWIPAL_DIRTY 0x00000100
#define DDRAWIPAL_ALLOW256 0x00000200
#define DDRAWIPAL_4 0x00000400
#define DDRAWIPAL_2 0x00000800
#define DDRAWIPAL_STORED_8INDEX 0x00001000
#define DDRAWIPAL_ALPHA 0x00002000
typedef struct _DDRAWI_DDRAWPALETTE_LCL {
/* DirectX 6.0 */
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __WINE_DDRAWI_H */