1 /* 2 * DirectDraw driver interface 3 * (DirectX 7 version) 4 * 5 * Copyright (C) 2001 Ove Kaaven 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 20 */ 21 22 #ifndef __DDRAWI_INCLUDED__ 23 #define __DDRAWI_INCLUDED__ 24 25 #include <_mingw_dxhelper.h> 26 #include <ddraw.h> 27 #include <dciddi.h> /* the DD HAL is layered onto DCI escapes */ 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */ 34 typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */ 35 typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */ 36 37 #define DDAPI WINAPI 38 39 /* the DirectDraw versions */ 40 #define DD_VERSION 0x0200 /* compatibility version */ 41 #define DD_RUNTIME_VERSION 0x0700 /* actual version */ 42 43 /* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */ 44 #define DD_HAL_VERSION 0x0100 45 46 /* more DCICOMMAND escapes */ 47 #define DDCREATEDRIVEROBJECT 10 48 #define DDGET32BITDRIVERNAME 11 49 #define DDNEWCALLBACKFNS 12 50 #define DDVERSIONINFO 13 51 52 #define MAX_DRIVER_NAME CCHDEVICENAME 53 54 /***************************************************************************** 55 * Initialization stuff 56 */ 57 typedef struct { 58 char szName[260]; 59 char szEntryPoint[64]; 60 DWORD dwContext; 61 } DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA; 62 63 typedef struct { 64 DWORD dwHALVersion; 65 ULONG_PTR dwReserved1; 66 ULONG_PTR dwReserved2; 67 } DDVERSIONDATA,*LPDDVERSIONDATA; 68 69 typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext); 70 71 /* pointer to video memory */ 72 typedef ULONG_PTR FLATPTR; 73 74 /* predeclare some structures */ 75 typedef struct _DDHALINFO *LPDDHALINFO; 76 typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT; 77 typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL; 78 typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL; 79 typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT; 80 typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL; 81 typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL; 82 typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE; 83 typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE; 84 typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT; 85 typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL; 86 typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL; 87 typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT; 88 typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL; 89 typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL; 90 typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT; 91 typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL; 92 typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT; 93 typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL; 94 95 /* structure GUIDs for GetDriverInfo */ 96 DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A ); 97 /* ...videport stuff here... */ 98 DEFINE_GUID( GUID_D3DCallbacks2, 0x0BA584E1,0x70B6,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A ); 99 DEFINE_GUID( GUID_D3DCallbacks3, 0xDDF41230,0xEC0A,0x11D0,0xA9,0xB6,0x00,0xAA,0x00,0xC0,0x99,0x3E ); 100 DEFINE_GUID( GUID_NonLocalVidMemCaps, 0x86C4FA80,0x8D84,0x11D0,0x94,0xE8,0x00,0xC0,0x4F,0xC3,0x41,0x37 ); 101 /* ...kernel stuff here... */ 102 DEFINE_GUID( GUID_D3DExtendedCaps, 0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 ); 103 DEFINE_GUID( GUID_ZPixelFormats, 0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE ); 104 DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 ); 105 DEFINE_GUID( GUID_DDStereoMode, 0xF828169C,0xA8E8,0x11D2,0xA1,0xF2,0x00,0xA0,0xC9,0x83,0xEA,0xF6 ); 106 /* ...more stuff here... */ 107 DEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 ); 108 /* ...motioncomp stuff here... */ 109 DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A ); 110 111 /***************************************************************************** 112 * driver->ddraw callbacks 113 */ 114 typedef BOOL (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset); 115 typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight); 116 typedef void (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem); 117 118 typedef struct { 119 DWORD dwSize; 120 LPDDHAL_SETINFO lpSetInfo; 121 LPDDHAL_VIDMEMALLOC lpVidMemAlloc; 122 LPDDHAL_VIDMEMFREE lpVidMemFree; 123 } DDHALDDRAWFNS,*LPDDHALDDRAWFNS; 124 125 /***************************************************************************** 126 * mode info structure 127 */ 128 typedef struct _DDHALMODEINFO { 129 DWORD dwWidth; 130 DWORD dwHeight; 131 LONG lPitch; 132 DWORD dwBPP; 133 WORD wFlags; 134 WORD wRefreshRate; 135 DWORD dwRBitMask; 136 DWORD dwGBitMask; 137 DWORD dwBBitMask; 138 DWORD dwAlphaBitMask; 139 } DDHALMODEINFO,*LPDDHALMODEINFO; 140 141 #define DDMODEINFO_PALETTIZED 0x0001 142 #define DDMODEINFO_MODEX 0x0002 143 #define DDMODEINFO_UNSUPPORTED 0x0004 144 #define DDMODEINFO_STANDARDVGA 0x0008 145 #define DDMODEINFO_MAXREFRESH 0x0010 146 #define DDMODEINFO_STEREO 0x0020 147 148 /***************************************************************************** 149 * video memory info structure 150 */ 151 typedef struct _VIDMEM { 152 DWORD dwFlags; 153 FLATPTR fpStart; 154 union { 155 FLATPTR fpEnd; 156 DWORD dwWidth; 157 } DUMMYUNIONNAME1; 158 DDSCAPS ddsCaps; 159 DDSCAPS ddsCapsAlt; 160 union { 161 LPVMEMHEAP lpHeap; 162 DWORD dwHeight; 163 } DUMMYUNIONNAME2; 164 } VIDMEM,*LPVIDMEM; 165 166 #define VIDMEM_ISLINEAR 0x00000001 167 #define VIDMEM_ISRECTANGULAR 0x00000002 168 #define VIDMEM_ISHEAP 0x00000004 169 #define VIDMEM_ISNONLOCAL 0x00000008 170 #define VIDMEM_ISWC 0x00000010 171 #define VIDMEM_HEAPDISABLED 0x00000020 172 173 typedef struct _VIDMEMINFO { 174 FLATPTR fpPrimary; 175 DWORD dwFlags; 176 DWORD dwDisplayWidth; 177 DWORD dwDisplayHeight; 178 LONG lDisplayPitch; 179 DDPIXELFORMAT ddpfDisplay; 180 DWORD dwOffscreenAlign; 181 DWORD dwOverlayAlign; 182 DWORD dwTextureAlign; 183 DWORD dwZBufferAlign; 184 DWORD dwAlphaAlign; 185 DWORD dwNumHeaps; 186 LPVIDMEM pvmList; 187 } VIDMEMINFO,*LPVIDMEMINFO; 188 189 typedef struct _HEAPALIAS { 190 FLATPTR fpVidMem; 191 LPVOID lpAlias; 192 DWORD dwAliasSize; 193 } HEAPALIAS,*LPHEAPALIAS; 194 195 typedef struct _HEAPALIASINFO { 196 DWORD dwRefCnt; 197 DWORD dwFlags; 198 DWORD dwNumHeaps; 199 LPHEAPALIAS lpAliases; 200 } HEAPALIASINFO,*LPHEAPALIASINFO; 201 202 #define HEAPALIASINFO_MAPPEDREAL 0x00000001 203 #define HEAPALIASINFO_MAPPEDDUMMY 0x00000002 204 205 /***************************************************************************** 206 * capabilities structures 207 */ 208 typedef struct _DDCORECAPS { 209 DWORD dwSize; 210 DWORD dwCaps; 211 DWORD dwCaps2; 212 DWORD dwCKeyCaps; 213 DWORD dwFXCaps; 214 DWORD dwFXAlphaCaps; 215 DWORD dwPalCaps; 216 DWORD dwSVCaps; 217 DWORD dwAlphaBltConstBitDepths; 218 DWORD dwAlphaBltPixelBitDepths; 219 DWORD dwAlphaBltSurfaceBitDepths; 220 DWORD dwAlphaOverlayConstBitDepths; 221 DWORD dwAlphaOverlayPixelBitDepths; 222 DWORD dwAlphaOverlaySurfaceBitDepths; 223 DWORD dwZBufferBitDepths; 224 DWORD dwVidMemTotal; 225 DWORD dwVidMemFree; 226 DWORD dwMaxVisibleOverlays; 227 DWORD dwCurrVisibleOverlays; 228 DWORD dwNumFourCCCodes; 229 DWORD dwAlignBoundarySrc; 230 DWORD dwAlignSizeSrc; 231 DWORD dwAlignBoundaryDest; 232 DWORD dwAlignSizeDest; 233 DWORD dwAlignStrideAlign; 234 DWORD dwRops[DD_ROP_SPACE]; 235 DDSCAPS ddsCaps; 236 DWORD dwMinOverlayStretch; 237 DWORD dwMaxOverlayStretch; 238 DWORD dwMinLiveVideoStretch; 239 DWORD dwMaxLiveVideoStretch; 240 DWORD dwMinHwCodecStretch; 241 DWORD dwMaxHwCodecStretch; 242 DWORD dwReserved1; 243 DWORD dwReserved2; 244 DWORD dwReserved3; 245 DWORD dwSVBCaps; 246 DWORD dwSVBCKeyCaps; 247 DWORD dwSVBFXCaps; 248 DWORD dwSVBRops[DD_ROP_SPACE]; 249 DWORD dwVSBCaps; 250 DWORD dwVSBCKeyCaps; 251 DWORD dwVSBFXCaps; 252 DWORD dwVSBRops[DD_ROP_SPACE]; 253 DWORD dwSSBCaps; 254 DWORD dwSSBCKeyCaps; 255 DWORD dwSSBFXCaps; 256 DWORD dwSSBRops[DD_ROP_SPACE]; 257 DWORD dwMaxVideoPorts; 258 DWORD dwCurrVideoPorts; 259 DWORD dwSVBCaps2; 260 } DDCORECAPS,*LPDDCORECAPS; 261 262 typedef struct _DDNONLOCALVIDMEMCAPS { 263 DWORD dwSize; 264 DWORD dwNLVBCaps; 265 DWORD dwNLVBCaps2; 266 DWORD dwNLVBCKeyCaps; 267 DWORD dwNLVBFXCaps; 268 DWORD dwNLVBRops[DD_ROP_SPACE]; 269 } DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS; 270 271 #define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2 272 #define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1 273 #define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2 274 275 /***************************************************************************** 276 * ddraw->driver callbacks 277 */ 278 #define DDHAL_DRIVER_NOTHANDLED 0 279 #define DDHAL_DRIVER_HANDLED 1 280 #define DDHAL_DRIVER_NOCKEYHW 2 281 282 typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA; 283 typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA; 284 typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA; 285 typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA; 286 typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA; 287 typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA; 288 typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA; 289 typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA; 290 typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA; 291 typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA; 292 293 typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA); 294 typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA); 295 typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA); 296 typedef DWORD (PASCAL *LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA); 297 typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA); 298 typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA ); 299 typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA); 300 typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA); 301 typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA); 302 typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA); 303 304 typedef struct _DDHAL_DDCALLBACKS { 305 DWORD dwSize; 306 DWORD dwFlags; 307 LPDDHAL_DESTROYDRIVER DestroyDriver; 308 LPDDHAL_CREATESURFACE CreateSurface; 309 LPDDHAL_SETCOLORKEY SetColorKey; 310 LPDDHAL_SETMODE SetMode; 311 LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; 312 LPDDHAL_CANCREATESURFACE CanCreateSurface; 313 LPDDHAL_CREATEPALETTE CreatePalette; 314 LPDDHAL_GETSCANLINE GetScanLine; 315 /* DirectX 2 */ 316 LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; 317 LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; 318 } DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS; 319 320 typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA; 321 typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA; 322 typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA; 323 typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA; 324 typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA; 325 typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA; 326 typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA; 327 typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA; 328 typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA; 329 typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA; 330 typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA; 331 typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA; 332 typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA; 333 334 typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA); 335 typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA); 336 typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA); 337 typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA); 338 typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA); 339 typedef DWORD (PASCAL *LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA); 340 typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA); 341 typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA); 342 typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA); 343 typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA); 344 typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA); 345 typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA); 346 typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA); 347 348 typedef struct _DDHAL_DDSURFACECALLBACKS { 349 DWORD dwSize; 350 DWORD dwFlags; 351 LPDDHALSURFCB_DESTROYSURFACE DestroySurface; 352 LPDDHALSURFCB_FLIP Flip; 353 LPDDHALSURFCB_SETCLIPLIST SetClipList; 354 LPDDHALSURFCB_LOCK Lock; 355 LPDDHALSURFCB_UNLOCK Unlock; 356 LPDDHALSURFCB_BLT Blt; 357 LPDDHALSURFCB_SETCOLORKEY SetColorKey; 358 LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; 359 LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; 360 LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; 361 LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; 362 LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; 363 LPVOID reserved4; 364 LPDDHALSURFCB_SETPALETTE SetPalette; 365 } DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS; 366 367 typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA; 368 typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA; 369 370 typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA); 371 typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA); 372 373 typedef struct _DDHAL_DDPALETTECALLBACKS { 374 DWORD dwSize; 375 DWORD dwFlags; 376 LPDDHALPALCB_DESTROYPALETTE DestroyPalette; 377 LPDDHALPALCB_SETENTRIES SetEntries; 378 } DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS; 379 380 typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA); 381 typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA); 382 typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA); 383 typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA); 384 typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA); 385 386 typedef struct _DDHAL_DDEXEBUFCALLBACKS { 387 DWORD dwSize; 388 DWORD dwFlags; 389 LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer; 390 LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer; 391 LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer; 392 LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer; 393 LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer; 394 } DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS; 395 396 typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA; 397 typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA; 398 typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA; 399 400 typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA); 401 typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP) (LPDDHAL_UPDATENONLOCALHEAPDATA); 402 typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT) (LPDDHAL_GETHEAPALIGNMENTDATA); 403 404 typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS { 405 DWORD dwSize; 406 DWORD dwFlags; 407 LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; 408 LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; 409 LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; 410 LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus; 411 } DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS; 412 413 typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA; 414 typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA; 415 typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA; 416 417 typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA); 418 typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA); 419 typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA); 420 421 typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS { 422 DWORD dwSize; 423 DWORD dwFlags; 424 LPVOID Reserved; 425 LPDDHAL_CREATESURFACEEX CreateSurfaceEx; 426 LPDDHAL_GETDRIVERSTATE GetDriverState; 427 LPDDHAL_DESTROYDDLOCAL DestroyDDLocal; 428 } DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS; 429 430 typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE); 431 432 /***************************************************************************** 433 * driver info structure 434 * 435 * The HAL is queried for additional callbacks via the GetDriverInfo callback. 436 */ 437 typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA; 438 typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA); 439 440 typedef struct _DDHALINFO { 441 DWORD dwSize; 442 LPDDHAL_DDCALLBACKS lpDDCallbacks; 443 LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks; 444 LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks; 445 VIDMEMINFO vmiData; 446 DDCORECAPS ddCaps; 447 DWORD dwMonitorFrequency; 448 LPDDHAL_GETDRIVERINFO GetDriverInfo; 449 DWORD dwModeIndex; 450 LPDWORD lpdwFourCC; 451 DWORD dwNumModes; 452 LPDDHALMODEINFO lpModeInfo; 453 DWORD dwFlags; 454 LPVOID lpPDevice; 455 DWORD hInstance; 456 /* DirectX 2 */ 457 ULONG_PTR lpD3DGlobalDriverData; 458 ULONG_PTR lpD3DHALCallbacks; 459 LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks; 460 } DDHALINFO; 461 462 #define DDHALINFO_ISPRIMARYDISPLAY 0x00000001 463 #define DDHALINFO_MODEXILLEGAL 0x00000002 464 #define DDHALINFO_GETDRIVERINFOSET 0x00000004 465 466 /* where the high-level ddraw implementation stores the callbacks */ 467 typedef struct _DDHAL_CALLBACKS { 468 DDHAL_DDCALLBACKS cbDDCallbacks; 469 DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks; 470 DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks; 471 DDHAL_DDCALLBACKS HALDD; 472 DDHAL_DDSURFACECALLBACKS HALDDSurface; 473 DDHAL_DDPALETTECALLBACKS HALDDPalette; 474 DDHAL_DDCALLBACKS HELDD; 475 DDHAL_DDSURFACECALLBACKS HELDDSurface; 476 DDHAL_DDPALETTECALLBACKS HELDDPalette; 477 DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks; 478 DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf; 479 DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf; 480 /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */ 481 } DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS; 482 483 /***************************************************************************** 484 * parameter structures 485 */ 486 typedef struct _DDHAL_DESTROYDRIVERDATA { 487 LPDDRAWI_DIRECTDRAW_GBL lpDD; 488 HRESULT ddRVal; 489 LPDDHAL_DESTROYDRIVER DestroyDriver; 490 } DDHAL_DESTROYDRIVERDATA; 491 492 typedef struct _DDHAL_SETMODEDATA { 493 LPDDRAWI_DIRECTDRAW_GBL lpDD; 494 DWORD dwModeIndex; 495 HRESULT ddRVal; 496 LPDDHAL_SETMODE SetMode; 497 BOOL inexcl; 498 BOOL useRefreshRate; 499 } DDHAL_SETMODEDATA; 500 501 typedef struct _DDHAL_CREATESURFACEDATA { 502 LPDDRAWI_DIRECTDRAW_GBL lpDD; 503 LPDDSURFACEDESC lpDDSurfaceDesc; 504 LPDDRAWI_DDRAWSURFACE_LCL * lplpSList; 505 DWORD dwSCnt; 506 HRESULT ddRVal; 507 LPDDHAL_CREATESURFACE CreateSurface; 508 } DDHAL_CREATESURFACEDATA; 509 510 typedef struct _DDHAL_CANCREATESURFACEDATA { 511 LPDDRAWI_DIRECTDRAW_GBL lpDD; 512 LPDDSURFACEDESC lpDDSurfaceDesc; 513 DWORD bIsDifferentPixelFormat; 514 HRESULT ddRVal; 515 LPDDHAL_CANCREATESURFACE CanCreateSurface; 516 } DDHAL_CANCREATESURFACEDATA; 517 518 typedef struct _DDHAL_CREATEPALETTEDATA { 519 LPDDRAWI_DIRECTDRAW_GBL lpDD; 520 LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; 521 LPPALETTEENTRY lpColorTable; 522 HRESULT ddRVal; 523 LPDDHAL_CREATEPALETTE CreatePalette; 524 BOOL is_excl; 525 } DDHAL_CREATEPALETTEDATA; 526 527 typedef struct _DDHAL_SETEXCLUSIVEMODEDATA { 528 LPDDRAWI_DIRECTDRAW_GBL lpDD; 529 DWORD dwEnterExcl; 530 DWORD dwReserved; 531 HRESULT ddRVal; 532 LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; 533 } DDHAL_SETEXCLUSIVEMODEDATA; 534 535 /* surfaces */ 536 typedef struct _DDHAL_DESTROYSURFACEDATA { 537 LPDDRAWI_DIRECTDRAW_GBL lpDD; 538 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; 539 HRESULT ddRVal; 540 LPDDHALSURFCB_DESTROYSURFACE DestroySurface; 541 } DDHAL_DESTROYSURFACEDATA; 542 543 typedef struct _DDHAL_FLIPDATA { 544 LPDDRAWI_DIRECTDRAW_GBL lpDD; 545 LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; 546 LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; 547 DWORD dwFlags; 548 HRESULT ddRVal; 549 LPDDHALSURFCB_FLIP Flip; 550 LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft; 551 LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft; 552 } DDHAL_FLIPDATA; 553 554 typedef struct _DDHAL_LOCKDATA { 555 LPDDRAWI_DIRECTDRAW_GBL lpDD; 556 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; 557 DWORD bHasRect; 558 RECTL rArea; 559 LPVOID lpSurfData; 560 HRESULT ddRVal; 561 LPDDHALSURFCB_LOCK Lock; 562 DWORD dwFlags; 563 } DDHAL_LOCKDATA; 564 565 typedef struct _DDHAL_UNLOCKDATA { 566 LPDDRAWI_DIRECTDRAW_GBL lpDD; 567 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; 568 HRESULT ddRVal; 569 LPDDHALSURFCB_UNLOCK Unlock; 570 } DDHAL_UNLOCKDATA; 571 572 typedef struct _DDHAL_BLTDATA { 573 LPDDRAWI_DIRECTDRAW_GBL lpDD; 574 LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; 575 RECTL rDest; 576 LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; 577 RECTL rSrc; 578 DWORD dwFlags; 579 DWORD dwROPFlags; 580 DDBLTFX bltFX; 581 HRESULT ddRVal; 582 LPDDHALSURFCB_BLT Blt; 583 BOOL IsClipped; 584 RECTL rOrigDest; 585 RECTL rOrigSrc; 586 DWORD dwRectCnt; 587 LPRECT prDestRects; 588 } DDHAL_BLTDATA; 589 590 typedef struct _DDHAL_UPDATEOVERLAYDATA { 591 LPDDRAWI_DIRECTDRAW_GBL lpDD; 592 LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; 593 RECTL rDest; 594 LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; 595 RECTL rSrc; 596 DWORD dwFlags; 597 DDOVERLAYFX overlayFX; 598 HRESULT ddRVal; 599 LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; 600 } DDHAL_UPDATEOVERLAYDATA; 601 602 typedef struct _DDHAL_SETPALETTEDATA { 603 LPDDRAWI_DIRECTDRAW_GBL lpDD; 604 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; 605 LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; 606 HRESULT ddRVal; 607 LPDDHALSURFCB_SETPALETTE SetPalette; 608 BOOL Attach; 609 } DDHAL_SETPALETTEDATA; 610 611 /* palettes */ 612 typedef struct _DDHAL_DESTROYPALETTEDATA { 613 LPDDRAWI_DIRECTDRAW_GBL lpDD; 614 LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; 615 HRESULT ddRVal; 616 LPDDHALPALCB_DESTROYPALETTE DestroyPalette; 617 } DDHAL_DESTROYPALETTEDATA; 618 619 typedef struct _DDHAL_SETENTRIESDATA { 620 LPDDRAWI_DIRECTDRAW_GBL lpDD; 621 LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; 622 DWORD dwBase; 623 DWORD dwNumEntries; 624 LPPALETTEENTRY lpEntries; 625 HRESULT ddRVal; 626 LPDDHALPALCB_SETENTRIES SetEntries; 627 } DDHAL_SETENTRIESDATA; 628 629 typedef struct _DDHAL_GETDRIVERINFODATA { 630 DWORD dwSize; 631 DWORD dwFlags; 632 GUID guidInfo; 633 DWORD dwExpectedSize; 634 LPVOID lpvData; 635 DWORD dwActualSize; 636 HRESULT ddRVal; 637 ULONG_PTR dwContext; 638 } DDHAL_GETDRIVERINFODATA; 639 640 /***************************************************************************** 641 * high-level ddraw implementation structures 642 */ 643 typedef struct _IUNKNOWN_LIST { 644 struct _IUNKNOWN_LIST * lpLink; 645 LPGUID lpGuid; 646 IUnknown * lpIUnknown; 647 } IUNKNOWN_LIST,*LPIUNKNOWN_LIST; 648 649 typedef struct _PROCESS_LIST { 650 struct _PROCESS_LIST * lpLink; 651 DWORD dwProcessId; 652 DWORD dwRefCnt; 653 DWORD dwAlphaDepth; 654 DWORD dwZDepth; 655 } PROCESS_LIST,*LPPROCESS_LIST; 656 657 typedef struct _ATTACHLIST { 658 DWORD dwFlags; 659 struct _ATTACHLIST * lpLink; 660 LPDDRAWI_DDRAWSURFACE_LCL lpAttached; 661 LPDDRAWI_DDRAWSURFACE_INT lpIAttached; 662 } ATTACHLIST,*LPATTACHLIST; 663 664 #define DDAL_IMPLICIT 0x00000001 665 666 typedef struct _ACCESSRECTLIST { 667 struct _ACCESSRECTLIST * lpLink; 668 RECT rDest; 669 LPDDRAWI_DIRECTDRAW_LCL lpOwner; 670 LPVOID lpSurfaceData; 671 DWORD dwFlags; 672 LPHEAPALIASINFO lpHeapAliasInfo; 673 } ACCESSRECTLIST,*LPACCESSRECTLIST; 674 675 #define ACCESSRECT_VRAMSTYLE 0x00000001 676 #define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002 677 #define ACCESSRECT_BROKEN 0x00000004 678 679 typedef struct _DBLNODE { 680 struct _DBLNODE * next; 681 struct _DBLNODE * prev; 682 LPDDRAWI_DDRAWSURFACE_LCL object; 683 LPDDRAWI_DDRAWSURFACE_INT object_int; 684 } DBLNODE,*LPDBLNODE; 685 686 typedef struct _DDRAWI_DIRECTDRAW_INT { 687 LPVOID lpVtbl; 688 LPDDRAWI_DIRECTDRAW_LCL lpLcl; 689 LPDDRAWI_DIRECTDRAW_INT lpLink; 690 DWORD dwIntRefCnt; 691 } DDRAWI_DIRECTDRAW_INT; 692 693 typedef struct _DDRAWI_DIRECTDRAW_LCL { 694 DWORD lpDDMore; 695 LPDDRAWI_DIRECTDRAW_GBL lpGbl; 696 DWORD dwUnused0; 697 DWORD dwLocalFlags; 698 DWORD dwLocalRefCnt; 699 DWORD dwProcessId; 700 IUnknown * pUnkOuter; 701 DWORD dwObsolete1; 702 ULONG_PTR hWnd; 703 ULONG_PTR hDC; 704 DWORD dwErrorMode; 705 LPDDRAWI_DDRAWSURFACE_INT lpPrimary; 706 LPDDRAWI_DDRAWSURFACE_INT lpCB; 707 DWORD dwPreferredMode; 708 /* DirectX 2 */ 709 HINSTANCE hD3DInstance; 710 IUnknown * pD3DIUnknown; 711 LPDDHAL_CALLBACKS lpDDCB; 712 ULONG_PTR hDDVxd; 713 /* DirectX 5.0 */ 714 DWORD dwAppHackFlags; 715 /* DirectX 5.0A */ 716 ULONG_PTR hFocusWnd; 717 DWORD dwHotTracking; 718 DWORD dwIMEState; 719 /* DirectX 6.0 */ 720 ULONG_PTR hWndPopup; 721 ULONG_PTR hDD; 722 ULONG_PTR hGammaCalibrator; 723 LPDDGAMMACALIBRATORPROC lpGammaCalibrator; 724 } DDRAWI_DIRECTDRAW_LCL; 725 726 #define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001 727 #define DDRAWILCL_ISFULLSCREEN 0x00000002 728 #define DDRAWILCL_SETCOOPCALLED 0x00000004 729 #define DDRAWILCL_ACTIVEYES 0x00000008 730 #define DDRAWILCL_ACTIVENO 0x00000010 731 #define DDRAWILCL_HOOKEDHWND 0x00000020 732 #define DDRAWILCL_ALLOWMODEX 0x00000040 733 #define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080 734 #define DDRAWILCL_MODEHASBEENCHANGED 0x00000100 735 #define DDRAWILCL_CREATEDWINDOW 0x00000200 736 #define DDRAWILCL_DIRTYDC 0x00000400 737 #define DDRAWILCL_DISABLEINACTIVATE 0x00000800 738 #define DDRAWILCL_CURSORCLIPPED 0x00001000 739 #define DDRAWILCL_EXPLICITMONITOR 0x00002000 740 #define DDRAWILCL_MULTITHREADED 0x00004000 741 #define DDRAWILCL_FPUSETUP 0x00008000 742 #define DDRAWILCL_POWEREDDOWN 0x00010000 743 #define DDRAWILCL_DIRECTDRAW7 0x00020000 744 #define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000 745 #define DDRAWILCL_FPUPRESERVE 0x00080000 746 747 typedef struct _DDRAWI_DIRECTDRAW_GBL { 748 DWORD dwRefCnt; 749 DWORD dwFlags; 750 FLATPTR fpPrimaryOrig; 751 DDCORECAPS ddCaps; 752 DWORD dwInternal1; 753 DWORD dwUnused1[9]; 754 LPDDHAL_CALLBACKS lpDDCBtmp; 755 LPDDRAWI_DDRAWSURFACE_INT dsList; 756 LPDDRAWI_DDRAWPALETTE_INT palList; 757 LPDDRAWI_DDRAWCLIPPER_INT clipperList; 758 LPDDRAWI_DIRECTDRAW_GBL lp16DD; 759 DWORD dwMaxOverlays; 760 DWORD dwCurrOverlays; 761 DWORD dwMonitorFrequency; 762 DDCORECAPS ddHELCaps; 763 DWORD dwUnused2[50]; 764 DDCOLORKEY ddckCKDestOverlay; 765 DDCOLORKEY ddckCKSrcOverlay; 766 VIDMEMINFO vmiData; 767 LPVOID lpDriverHandle; 768 LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner; 769 DWORD dwModeIndex; 770 DWORD dwModeIndexOrig; 771 DWORD dwNumFourCC; 772 LPDWORD lpdwFourCC; 773 DWORD dwNumModes; 774 LPDDHALMODEINFO lpModeInfo; 775 PROCESS_LIST plProcessList; 776 DWORD dwSurfaceLockCount; 777 DWORD dwAliasedLockCnt; 778 ULONG_PTR dwReserved3; 779 ULONG_PTR hDD; 780 char cObsolete[12]; 781 DWORD dwReserved1; 782 DWORD dwReserved2; 783 DBLNODE dbnOverlayRoot; 784 volatile LPWORD lpwPDeviceFlags; 785 DWORD dwPDevice; 786 DWORD dwWin16LockCnt; 787 DWORD dwUnused3; 788 DWORD hInstance; 789 DWORD dwEvent16; 790 DWORD dwSaveNumModes; 791 /* DirectX 2 */ 792 ULONG_PTR lpD3DGlobalDriverData; 793 ULONG_PTR lpD3DHALCallbacks; 794 DDCORECAPS ddBothCaps; 795 /* DirectX 5.0 */ 796 LPDDVIDEOPORTCAPS lpDDVideoPortCaps; 797 LPDDRAWI_DDVIDEOPORT_INT dvpList; 798 ULONG_PTR lpD3DHALCallbacks2; 799 RECT rectDevice; 800 DWORD cMonitors; 801 LPVOID gpbmiSrc; 802 LPVOID gpbmiDest; 803 LPHEAPALIASINFO phaiHeapAliases; 804 ULONG_PTR hKernelHandle; 805 ULONG_PTR pfnNotifyProc; 806 LPDDKERNELCAPS lpDDKernelCaps; 807 LPDDNONLOCALVIDMEMCAPS lpddNLVCaps; 808 LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps; 809 LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps; 810 ULONG_PTR lpD3DExtendedCaps; 811 /* DirectX 5.0A */ 812 DWORD dwDOSBoxEvent; 813 RECT rectDesktop; 814 char cDriverName[MAX_DRIVER_NAME]; 815 /* DirectX 6.0 */ 816 ULONG_PTR lpD3DHALCallbacks3; 817 DWORD dwNumZPixelFormats; 818 LPDDPIXELFORMAT lpZPixelFormats; 819 LPDDRAWI_DDMOTIONCOMP_INT mcList; 820 DWORD hDDVxd; 821 DDSCAPSEX ddsCapsMore; 822 } DDRAWI_DIRECTDRAW_GBL; 823 824 #define DDRAWI_VIRTUALDESKTOP 0x00000008 825 #define DDRAWI_MODEX 0x00000010 826 #define DDRAWI_DISPLAYDRV 0x00000020 827 #define DDRAWI_FULLSCREEN 0x00000040 828 #define DDRAWI_MODECHANGED 0x00000080 829 #define DDRAWI_NOHARDWARE 0x00000100 830 #define DDRAWI_PALETTEINIT 0x00000200 831 #define DDRAWI_NOEMULATION 0x00000400 832 /* more... */ 833 834 /* surfaces */ 835 typedef struct _DDRAWI_DDRAWSURFACE_INT { 836 LPVOID lpVtbl; 837 LPDDRAWI_DDRAWSURFACE_LCL lpLcl; 838 LPDDRAWI_DDRAWSURFACE_INT lpLink; 839 DWORD dwIntRefCnt; 840 } DDRAWI_DDRAWSURFACE_INT; 841 842 typedef struct _DDRAWI_DDRAWSURFACE_GBL { 843 DWORD dwRefCnt; 844 DWORD dwGlobalFlags; 845 union { 846 LPACCESSRECTLIST lpRectList; 847 DWORD dwBlockSizeY; 848 } DUMMYUNIONNAME1; 849 union { 850 LPVMEMHEAP lpVidMemHeap; 851 DWORD dwBlockSizeX; 852 } DUMMYUNIONNAME2; 853 union { 854 LPDDRAWI_DIRECTDRAW_GBL lpDD; 855 LPVOID lpDDHandle; 856 } DUMMYUNIONNAME3; 857 FLATPTR fpVidMem; 858 union { 859 LONG lPitch; 860 DWORD dwLinearSize; 861 } DUMMYUNIONNAME4; 862 WORD wHeight; 863 WORD wWidth; 864 DWORD dwUsageCount; 865 ULONG_PTR dwReserved1; /* for display driver use */ 866 /* optional (defaults to primary surface pixelformat) */ 867 DDPIXELFORMAT ddpfSurface; 868 } DDRAWI_DDRAWSURFACE_GBL; 869 870 #define DDRAWISURFGBL_MEMFREE 0x00000001 871 #define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002 872 #define DDRAWISURFGBL_ISGDISURFACE 0x00000004 873 #define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008 874 #define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010 875 #define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020 876 #define DDRAWISURFGBL_LOCKBROKEN 0x00000040 877 #define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080 878 #define DDRAWISURFGBL_ISCLIENTMEM 0x00000100 879 #define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200 880 #define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400 881 #define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600 882 #define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800 883 #define DDRAWISURFGBL_VPORTDATA 0x00001000 884 #define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000 885 #define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000 886 #define DDRAWISURFGBL_FASTLOCKHELD 0x00008000 887 #define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000 888 889 typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE { 890 DWORD dwSize; 891 union { 892 DWORD dwPhysicalPageTable; 893 FLATPTR fpPhysicalVidMem; 894 } DUMMYUNIONNAME1; 895 LPDWORD pPageTable; 896 DWORD cPages; 897 ULONG_PTR dwSavedDCContext; 898 FLATPTR fpAliasedVidMem; 899 ULONG_PTR dwDriverReserved; 900 ULONG_PTR dwHELReserved; 901 DWORD cPageUnlocks; 902 ULONG_PTR hKernelSurface; 903 DWORD dwKernelRefCnt; 904 LPDDCOLORCONTROL lpColorInfo; 905 FLATPTR fpNTAlias; 906 DWORD dwContentsStamp; 907 LPVOID lpvUnswappedDriverReserved; 908 LPVOID lpDDRAWReserved2; 909 DWORD dwDDRAWReserved1; 910 DWORD dwDDRAWReserved2; 911 FLATPTR fpAliasOfVidMem; 912 } DDRAWI_DDRAWSURFACE_GBL_MORE; 913 914 /* the MS version of this macro was somewhat obfuscated and unreadable 915 * (possibly because of mediocre MS coders)... so I simplified it... 916 * (and so I commit no copyright violations either, hah) */ 917 #define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \ 918 (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1)) 919 920 typedef struct _DDRAWI_DDRAWSURFACE_MORE { 921 DWORD dwSize; 922 IUNKNOWN_LIST * lpIUnknowns; 923 LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; 924 DWORD dwPageLockCount; 925 DWORD dwBytesAllocated; 926 LPDDRAWI_DIRECTDRAW_INT lpDD_int; 927 DWORD dwMipMapCount; 928 LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper; 929 /* DirectX 5.0 */ 930 LPHEAPALIASINFO lpHeapAliasInfo; 931 DWORD dwOverlayFlags; 932 VOID *rgjunc; 933 LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; 934 LPDDOVERLAYFX lpddOverlayFX; 935 DDSCAPSEX ddsCapsEx; 936 DWORD dwTextureStage; 937 LPVOID lpDDRAWReserved; 938 LPVOID lpDDRAWReserved2; 939 LPVOID lpDDrawReserved3; 940 DWORD dwDDrawReserved4; 941 LPVOID lpDDrawReserved5; 942 LPDWORD lpGammaRamp; 943 LPDWORD lpOriginalGammaRamp; 944 LPVOID lpDDrawReserved6; 945 DWORD dwSurfaceHandle; 946 DWORD qwDDrawReserved8[2]; 947 LPVOID lpDDrawReserved9; 948 DWORD cSurfaces; 949 LPDDSURFACEDESC2 pCreatedDDSurfaceDesc2; 950 LPDDRAWI_DDRAWSURFACE_LCL *slist; 951 DWORD dwFVF; 952 LPVOID lpVB; 953 } DDRAWI_DDRAWSURFACE_MORE; 954 955 typedef struct _DDRAWI_DDRAWSURFACE_LCL { 956 LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore; 957 LPDDRAWI_DDRAWSURFACE_GBL lpGbl; 958 ULONG_PTR hDDSurface; 959 LPATTACHLIST lpAttachList; 960 LPATTACHLIST lpAttachListFrom; 961 DWORD dwLocalRefCnt; 962 DWORD dwProcessId; 963 DWORD dwFlags; 964 DDSCAPS ddsCaps; 965 LPDDRAWI_DDRAWPALETTE_INT lpDDPalette; 966 LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper; 967 DWORD dwModeCreatedIn; 968 DWORD dwBackBufferCount; 969 DDCOLORKEY ddckCKDestBlt; 970 DDCOLORKEY ddckCKSrcBlt; 971 ULONG_PTR hDC; 972 ULONG_PTR dwReserved1; /* for display driver use */ 973 /* overlays only */ 974 DDCOLORKEY ddckCKSrcOverlay; 975 DDCOLORKEY ddckCKDestOverlay; 976 LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying; 977 DBLNODE dbnOverlayNode; 978 RECT rcOverlaySrc; 979 RECT rcOverlayDest; 980 DWORD dwClrXparent; 981 DWORD dwAlpha; 982 LONG lOverlayX; 983 LONG lOverlayY; 984 } DDRAWI_DDRAWSURFACE_LCL; 985 986 #define DDRAWISURF_ATTACHED 0x00000001 987 #define DDRAWISURF_IMPLICITCREATE 0x00000002 988 #define DDRAWISURF_ISFREE 0x00000004 989 #define DDRAWISURF_ATTACHED_FROM 0x00000008 990 #define DDRAWISURF_IMPLICITROOT 0x00000010 991 #define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020 992 #define DDRAWISURF_DATAISALIASED 0x00000040 993 #define DDRAWISURF_HASDC 0x00000080 994 #define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100 995 #define DDRAWISURF_HASCKEYDESTBLT 0x00000200 996 #define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400 997 #define DDRAWISURF_HASCKEYSRCBLT 0x00000800 998 #define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000 999 #define DDRAWISURF_HASPIXELFORMAT 0x00002000 1000 #define DDRAWISURF_HASOVERLAYDATA 0x00004000 1001 #define DDRAWISURF_SETGAMMA 0x00008000 1002 /* more... */ 1003 #define DDRAWISURF_INVALID 0x10000000 1004 1005 /* palettes */ 1006 typedef struct _DDRAWI_DDRAWPALETTE_INT { 1007 LPVOID lpVtbl; 1008 LPDDRAWI_DDRAWPALETTE_LCL lpLcl; 1009 LPDDRAWI_DDRAWPALETTE_INT lpLink; 1010 DWORD dwIntRefCnt; 1011 } DDRAWI_DDRAWPALETTE_INT; 1012 1013 typedef struct _DDRAWI_DDRAWPALETTE_GBL { 1014 DWORD dwRefCnt; 1015 DWORD dwFlags; 1016 LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; 1017 DWORD dwProcessId; 1018 LPPALETTEENTRY lpColorTable; 1019 union { 1020 ULONG_PTR dwReserved1; /* for display driver use */ 1021 HPALETTE hHELGDIPalette; 1022 } DUMMYUNIONNAME1; 1023 /* DirectX 5.0 */ 1024 DWORD dwDriverReserved; 1025 DWORD dwContentsStamp; 1026 /* DirectX 6.0 */ 1027 DWORD dwSaveStamp; 1028 /* DirectX 7.0 */ 1029 DWORD dwHandle; 1030 } DDRAWI_DDRAWPALETTE_GBL; 1031 1032 #define DDRAWIPAL_256 0x00000001 1033 #define DDRAWIPAL_16 0x00000002 1034 #define DDRAWIPAL_GDI 0x00000004 1035 #define DDRAWIPAL_STORED_8 0x00000008 1036 #define DDRAWIPAL_STORED_16 0x00000010 1037 #define DDRAWIPAL_STORED_24 0x00000020 1038 #define DDRAWIPAL_EXCLUSIVE 0x00000040 1039 #define DDRAWIPAL_INHEL 0x00000080 1040 #define DDRAWIPAL_DIRTY 0x00000100 1041 #define DDRAWIPAL_ALLOW256 0x00000200 1042 #define DDRAWIPAL_4 0x00000400 1043 #define DDRAWIPAL_2 0x00000800 1044 #define DDRAWIPAL_STORED_8INDEX 0x00001000 1045 #define DDRAWIPAL_ALPHA 0x00002000 1046 1047 typedef struct _DDRAWI_DDRAWPALETTE_LCL { 1048 DWORD lpPalMore; 1049 LPDDRAWI_DDRAWPALETTE_GBL lpGbl; 1050 ULONG_PTR dwUnused0; 1051 DWORD dwLocalRefCnt; 1052 IUnknown * pUnkOuter; 1053 LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; 1054 ULONG_PTR dwReserved1; 1055 /* DirectX 6.0 */ 1056 ULONG_PTR dwDDRAWReserved1; 1057 ULONG_PTR dwDDRAWReserved2; 1058 ULONG_PTR dwDDRAWReserved3; 1059 } DDRAWI_DDRAWPALETTE_LCL; 1060 1061 #ifdef __cplusplus 1062 } /* extern "C" */ 1063 #endif 1064 1065 #endif /* __DDRAWI_INCLUDED__ */ 1066