2 * DirectDraw driver interface
5 * Copyright (C) 2001 Ove Kaaven
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.
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.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #ifndef __DDRAWI_INCLUDED__
23 #define __DDRAWI_INCLUDED__
31 #ifndef __DDK_DDRAWINT_H
32 typedef struct _DDVIDEOPORTCAPS
*LPDDVIDEOPORTCAPS
; /* should be in dvp.h */
33 typedef struct _DDKERNELCAPS
*LPDDKERNELCAPS
; /* should be in ddkernel.h */
34 typedef struct _VMEMHEAP
*LPVMEMHEAP
; /* should be in dmemmgr.h */
39 /* the DirectDraw versions */
40 #define DD_VERSION 0x0200 /* compatibility version */
41 #define DD_RUNTIME_VERSION 0x0700 /* actual version */
43 /* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
44 #define DD_HAL_VERSION 0x0100
46 /* more DCICOMMAND escapes */
47 #define DDCREATEDRIVEROBJECT 10
48 #define DDGET32BITDRIVERNAME 11
49 #define DDNEWCALLBACKFNS 12
50 #define DDVERSIONINFO 13
52 #define MAX_DRIVER_NAME CCHDEVICENAME
54 /*****************************************************************************
55 * Initialization stuff
59 char szEntryPoint
[64];
61 } DD32BITDRIVERDATA
,*LPDD32BITDRIVERDATA
;
65 ULONG_PTR dwReserved1
;
66 ULONG_PTR dwReserved2
;
67 } DDVERSIONDATA
,*LPDDVERSIONDATA
;
69 typedef DWORD (PASCAL
*LPDD32BITDRIVERINIT
)(DWORD dwContext
);
71 #ifndef __DDK_DDRAWINT_H
72 /* pointer to video memory */
73 typedef ULONG_PTR FLATPTR
;
76 /* predeclare some structures */
77 typedef struct _DDHALINFO
*LPDDHALINFO
;
78 typedef struct _DDRAWI_DIRECTDRAW_INT
*LPDDRAWI_DIRECTDRAW_INT
;
79 typedef struct _DDRAWI_DIRECTDRAW_LCL
*LPDDRAWI_DIRECTDRAW_LCL
;
80 typedef struct _DDRAWI_DIRECTDRAW_GBL
*LPDDRAWI_DIRECTDRAW_GBL
;
81 typedef struct _DDRAWI_DDRAWSURFACE_INT
*LPDDRAWI_DDRAWSURFACE_INT
;
82 typedef struct _DDRAWI_DDRAWSURFACE_LCL
*LPDDRAWI_DDRAWSURFACE_LCL
;
83 typedef struct _DDRAWI_DDRAWSURFACE_GBL
*LPDDRAWI_DDRAWSURFACE_GBL
;
84 typedef struct _DDRAWI_DDRAWSURFACE_MORE
*LPDDRAWI_DDRAWSURFACE_MORE
;
85 typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE
*LPDDRAWI_DDRAWSURFACE_GBL_MORE
;
86 typedef struct _DDRAWI_DDRAWPALETTE_INT
*LPDDRAWI_DDRAWPALETTE_INT
;
87 typedef struct _DDRAWI_DDRAWPALETTE_LCL
*LPDDRAWI_DDRAWPALETTE_LCL
;
88 typedef struct _DDRAWI_DDRAWPALETTE_GBL
*LPDDRAWI_DDRAWPALETTE_GBL
;
89 typedef struct _DDRAWI_DDRAWCLIPPER_INT
*LPDDRAWI_DDRAWCLIPPER_INT
;
90 typedef struct _DDRAWI_DDRAWCLIPPER_LCL
*LPDDRAWI_DDRAWCLIPPER_LCL
;
91 typedef struct _DDRAWI_DDRAWCLIPPER_GBL
*LPDDRAWI_DDRAWCLIPPER_GBL
;
92 typedef struct _DDRAWI_DDVIDEOPORT_INT
*LPDDRAWI_DDVIDEOPORT_INT
;
93 typedef struct _DDRAWI_DDVIDEOPORT_LCL
*LPDDRAWI_DDVIDEOPORT_LCL
;
94 typedef struct _DDRAWI_DDMOTIONCOMP_INT
*LPDDRAWI_DDMOTIONCOMP_INT
;
95 typedef struct _DDRAWI_DDMOTIONCOMP_LCL
*LPDDRAWI_DDMOTIONCOMP_LCL
;
97 /*****************************************************************************
98 * driver->ddraw callbacks
100 typedef BOOL (DDAPI
*LPDDHAL_SETINFO
)(LPDDHALINFO lpDDHalInfo
, BOOL reset
);
101 typedef FLATPTR (DDAPI
*LPDDHAL_VIDMEMALLOC
)(LPDDRAWI_DIRECTDRAW_GBL lpDD
, int heap
, DWORD dwWidth
, DWORD dwHeight
);
102 typedef void (DDAPI
*LPDDHAL_VIDMEMFREE
)(LPDDRAWI_DIRECTDRAW_GBL lpDD
, int heap
, FLATPTR fpMem
);
106 LPDDHAL_SETINFO lpSetInfo
;
107 LPDDHAL_VIDMEMALLOC lpVidMemAlloc
;
108 LPDDHAL_VIDMEMFREE lpVidMemFree
;
109 } DDHALDDRAWFNS
,*LPDDHALDDRAWFNS
;
111 /*****************************************************************************
112 * mode info structure
114 typedef struct _DDHALMODEINFO
{
124 DWORD dwAlphaBitMask
;
125 } DDHALMODEINFO
,*LPDDHALMODEINFO
;
127 #define DDMODEINFO_PALETTIZED 0x0001
128 #define DDMODEINFO_MODEX 0x0002
129 #define DDMODEINFO_UNSUPPORTED 0x0004
130 #define DDMODEINFO_STANDARDVGA 0x0008
131 #define DDMODEINFO_MAXREFRESH 0x0010
132 #define DDMODEINFO_STEREO 0x0020
134 /*****************************************************************************
135 * video memory info structure
137 typedef struct _VIDMEM
{
152 #ifndef __DDK_DDRAWINT_H
153 #define VIDMEM_ISLINEAR 0x00000001
154 #define VIDMEM_ISRECTANGULAR 0x00000002
155 #define VIDMEM_ISHEAP 0x00000004
156 #define VIDMEM_ISNONLOCAL 0x00000008
157 #define VIDMEM_ISWC 0x00000010
158 #define VIDMEM_ISDISABLED 0x00000020
161 typedef struct _VIDMEMINFO
{
164 DWORD dwDisplayWidth
;
165 DWORD dwDisplayHeight
;
167 DDPIXELFORMAT ddpfDisplay
;
168 DWORD dwOffscreenAlign
;
169 DWORD dwOverlayAlign
;
170 DWORD dwTextureAlign
;
171 DWORD dwZBufferAlign
;
175 } VIDMEMINFO
,*LPVIDMEMINFO
;
177 typedef struct _HEAPALIAS
{
181 } HEAPALIAS
,*LPHEAPALIAS
;
183 typedef struct _HEAPALIASINFO
{
187 LPHEAPALIAS lpAliases
;
188 } HEAPALIASINFO
,*LPHEAPALIASINFO
;
190 #define HEAPALIASINFO_MAPPEDREAL 0x00000001
191 #define HEAPALIASINFO_MAPPEDDUMMY 0x00000002
193 /*****************************************************************************
194 * capabilities structures
196 typedef struct _DDCORECAPS
{
205 DWORD dwAlphaBltConstBitDepths
;
206 DWORD dwAlphaBltPixelBitDepths
;
207 DWORD dwAlphaBltSurfaceBitDepths
;
208 DWORD dwAlphaOverlayConstBitDepths
;
209 DWORD dwAlphaOverlayPixelBitDepths
;
210 DWORD dwAlphaOverlaySurfaceBitDepths
;
211 DWORD dwZBufferBitDepths
;
214 DWORD dwMaxVisibleOverlays
;
215 DWORD dwCurrVisibleOverlays
;
216 DWORD dwNumFourCCCodes
;
217 DWORD dwAlignBoundarySrc
;
218 DWORD dwAlignSizeSrc
;
219 DWORD dwAlignBoundaryDest
;
220 DWORD dwAlignSizeDest
;
221 DWORD dwAlignStrideAlign
;
222 DWORD dwRops
[DD_ROP_SPACE
];
224 DWORD dwMinOverlayStretch
;
225 DWORD dwMaxOverlayStretch
;
226 DWORD dwMinLiveVideoStretch
;
227 DWORD dwMaxLiveVideoStretch
;
228 DWORD dwMinHwCodecStretch
;
229 DWORD dwMaxHwCodecStretch
;
236 DWORD dwSVBRops
[DD_ROP_SPACE
];
240 DWORD dwVSBRops
[DD_ROP_SPACE
];
244 DWORD dwSSBRops
[DD_ROP_SPACE
];
245 DWORD dwMaxVideoPorts
;
246 DWORD dwCurrVideoPorts
;
248 } DDCORECAPS
,*LPDDCORECAPS
;
250 typedef struct _DDNONLOCALVIDMEMCAPS
{
254 DWORD dwNLVBCKeyCaps
;
256 DWORD dwNLVBRops
[DD_ROP_SPACE
];
257 } DDNONLOCALVIDMEMCAPS
,*LPDDNONLOCALVIDMEMCAPS
;
259 #define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2
260 #define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1
261 #define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2
263 /*****************************************************************************
264 * ddraw->driver callbacks
266 #define DDHAL_DRIVER_NOTHANDLED 0
267 #define DDHAL_DRIVER_HANDLED 1
268 #define DDHAL_DRIVER_NOCKEYHW 2
270 typedef struct _DDHAL_DESTROYDRIVERDATA
*LPDDHAL_DESTROYDRIVERDATA
;
271 typedef struct _DDHAL_CREATESURFACEDATA
*LPDDHAL_CREATESURFACEDATA
;
272 typedef struct _DDHAL_DRVSETCOLORKEYDATA
*LPDDHAL_DRVSETCOLORKEYDATA
;
273 typedef struct _DDHAL_SETMODEDATA
*LPDDHAL_SETMODEDATA
;
274 typedef struct _DDHAL_WAITFORVERTICALBLANKDATA
*LPDDHAL_WAITFORVERTICALBLANKDATA
;
275 typedef struct _DDHAL_CANCREATESURFACEDATA
*LPDDHAL_CANCREATESURFACEDATA
;
276 typedef struct _DDHAL_CREATEPALETTEDATA
*LPDDHAL_CREATEPALETTEDATA
;
277 typedef struct _DDHAL_GETSCANLINEDATA
*LPDDHAL_GETSCANLINEDATA
;
278 typedef struct _DDHAL_SETEXCLUSIVEMODEDATA
*LPDDHAL_SETEXCLUSIVEMODEDATA
;
279 typedef struct _DDHAL_FLIPTOGDISURFACEDATA
*LPDDHAL_FLIPTOGDISURFACEDATA
;
281 typedef DWORD (PASCAL
*LPDDHAL_DESTROYDRIVER
) (LPDDHAL_DESTROYDRIVERDATA
);
282 typedef DWORD (PASCAL
*LPDDHAL_CREATESURFACE
) (LPDDHAL_CREATESURFACEDATA
);
283 typedef DWORD (PASCAL
*LPDDHAL_SETCOLORKEY
) (LPDDHAL_DRVSETCOLORKEYDATA
);
284 typedef DWORD (PASCAL
*LPDDHAL_SETMODE
) (LPDDHAL_SETMODEDATA
);
285 typedef DWORD (PASCAL
*LPDDHAL_WAITFORVERTICALBLANK
)(LPDDHAL_WAITFORVERTICALBLANKDATA
);
286 typedef DWORD (PASCAL
*LPDDHAL_CANCREATESURFACE
) (LPDDHAL_CANCREATESURFACEDATA
);
287 typedef DWORD (PASCAL
*LPDDHAL_CREATEPALETTE
) (LPDDHAL_CREATEPALETTEDATA
);
288 typedef DWORD (PASCAL
*LPDDHAL_GETSCANLINE
) (LPDDHAL_GETSCANLINEDATA
);
289 typedef DWORD (PASCAL
*LPDDHAL_SETEXCLUSIVEMODE
) (LPDDHAL_SETEXCLUSIVEMODEDATA
);
290 typedef DWORD (PASCAL
*LPDDHAL_FLIPTOGDISURFACE
) (LPDDHAL_FLIPTOGDISURFACEDATA
);
292 typedef struct _DDHAL_DDCALLBACKS
{
295 LPDDHAL_DESTROYDRIVER DestroyDriver
;
296 LPDDHAL_CREATESURFACE CreateSurface
;
297 LPDDHAL_SETCOLORKEY SetColorKey
;
298 LPDDHAL_SETMODE SetMode
;
299 LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank
;
300 LPDDHAL_CANCREATESURFACE CanCreateSurface
;
301 LPDDHAL_CREATEPALETTE CreatePalette
;
302 LPDDHAL_GETSCANLINE GetScanLine
;
304 LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode
;
305 LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface
;
306 } DDHAL_DDCALLBACKS
,*LPDDHAL_DDCALLBACKS
;
308 typedef struct _DDHAL_DESTROYSURFACEDATA
*LPDDHAL_DESTROYSURFACEDATA
;
309 typedef struct _DDHAL_FLIPDATA
*LPDDHAL_FLIPDATA
;
310 typedef struct _DDHAL_SETCLIPLISTDATA
*LPDDHAL_SETCLIPLISTDATA
;
311 typedef struct _DDHAL_LOCKDATA
*LPDDHAL_LOCKDATA
;
312 typedef struct _DDHAL_UNLOCKDATA
*LPDDHAL_UNLOCKDATA
;
313 typedef struct _DDHAL_BLTDATA
*LPDDHAL_BLTDATA
;
314 typedef struct _DDHAL_SETCOLORKEYDATA
*LPDDHAL_SETCOLORKEYDATA
;
315 typedef struct _DDHAL_ADDATTACHEDSURFACEDATA
*LPDDHAL_ADDATTACHEDSURFACEDATA
;
316 typedef struct _DDHAL_GETBLTSTATUSDATA
*LPDDHAL_GETBLTSTATUSDATA
;
317 typedef struct _DDHAL_GETFLIPSTATUSDATA
*LPDDHAL_GETFLIPSTATUSDATA
;
318 typedef struct _DDHAL_UPDATEOVERLAYDATA
*LPDDHAL_UPDATEOVERLAYDATA
;
319 typedef struct _DDHAL_SETOVERLAYPOSITIONDATA
*LPDDHAL_SETOVERLAYPOSITIONDATA
;
320 typedef struct _DDHAL_SETPALETTEDATA
*LPDDHAL_SETPALETTEDATA
;
322 typedef DWORD (PASCAL
*LPDDHALSURFCB_DESTROYSURFACE
) (LPDDHAL_DESTROYSURFACEDATA
);
323 typedef DWORD (PASCAL
*LPDDHALSURFCB_FLIP
) (LPDDHAL_FLIPDATA
);
324 typedef DWORD (PASCAL
*LPDDHALSURFCB_SETCLIPLIST
) (LPDDHAL_SETCLIPLISTDATA
);
325 typedef DWORD (PASCAL
*LPDDHALSURFCB_LOCK
) (LPDDHAL_LOCKDATA
);
326 typedef DWORD (PASCAL
*LPDDHALSURFCB_UNLOCK
) (LPDDHAL_UNLOCKDATA
);
327 typedef DWORD (PASCAL
*LPDDHALSURFCB_BLT
) (LPDDHAL_BLTDATA
);
328 typedef DWORD (PASCAL
*LPDDHALSURFCB_SETCOLORKEY
) (LPDDHAL_SETCOLORKEYDATA
);
329 typedef DWORD (PASCAL
*LPDDHALSURFCB_ADDATTACHEDSURFACE
)(LPDDHAL_ADDATTACHEDSURFACEDATA
);
330 typedef DWORD (PASCAL
*LPDDHALSURFCB_GETBLTSTATUS
) (LPDDHAL_GETBLTSTATUSDATA
);
331 typedef DWORD (PASCAL
*LPDDHALSURFCB_GETFLIPSTATUS
) (LPDDHAL_GETFLIPSTATUSDATA
);
332 typedef DWORD (PASCAL
*LPDDHALSURFCB_UPDATEOVERLAY
) (LPDDHAL_UPDATEOVERLAYDATA
);
333 typedef DWORD (PASCAL
*LPDDHALSURFCB_SETOVERLAYPOSITION
)(LPDDHAL_SETOVERLAYPOSITIONDATA
);
334 typedef DWORD (PASCAL
*LPDDHALSURFCB_SETPALETTE
) (LPDDHAL_SETPALETTEDATA
);
336 typedef struct _DDHAL_DDSURFACECALLBACKS
{
339 LPDDHALSURFCB_DESTROYSURFACE DestroySurface
;
340 LPDDHALSURFCB_FLIP Flip
;
341 LPDDHALSURFCB_SETCLIPLIST SetClipList
;
342 LPDDHALSURFCB_LOCK Lock
;
343 LPDDHALSURFCB_UNLOCK Unlock
;
344 LPDDHALSURFCB_BLT Blt
;
345 LPDDHALSURFCB_SETCOLORKEY SetColorKey
;
346 LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface
;
347 LPDDHALSURFCB_GETBLTSTATUS GetBltStatus
;
348 LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus
;
349 LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay
;
350 LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition
;
352 LPDDHALSURFCB_SETPALETTE SetPalette
;
353 } DDHAL_DDSURFACECALLBACKS
,*LPDDHAL_DDSURFACECALLBACKS
;
355 typedef struct _DDHAL_DESTROYPALETTEDATA
*LPDDHAL_DESTROYPALETTEDATA
;
356 typedef struct _DDHAL_SETENTRIESDATA
*LPDDHAL_SETENTRIESDATA
;
358 typedef DWORD (PASCAL
*LPDDHALPALCB_DESTROYPALETTE
)(LPDDHAL_DESTROYPALETTEDATA
);
359 typedef DWORD (PASCAL
*LPDDHALPALCB_SETENTRIES
) (LPDDHAL_SETENTRIESDATA
);
361 typedef struct _DDHAL_DDPALETTECALLBACKS
{
364 LPDDHALPALCB_DESTROYPALETTE DestroyPalette
;
365 LPDDHALPALCB_SETENTRIES SetEntries
;
366 } DDHAL_DDPALETTECALLBACKS
,*LPDDHAL_DDPALETTECALLBACKS
;
368 typedef DWORD (PASCAL
*LPDDHALEXEBUFCB_CANCREATEEXEBUF
)(LPDDHAL_CANCREATESURFACEDATA
);
369 typedef DWORD (PASCAL
*LPDDHALEXEBUFCB_CREATEEXEBUF
) (LPDDHAL_CREATESURFACEDATA
);
370 typedef DWORD (PASCAL
*LPDDHALEXEBUFCB_DESTROYEXEBUF
) (LPDDHAL_DESTROYSURFACEDATA
);
371 typedef DWORD (PASCAL
*LPDDHALEXEBUFCB_LOCKEXEBUF
) (LPDDHAL_LOCKDATA
);
372 typedef DWORD (PASCAL
*LPDDHALEXEBUFCB_UNLOCKEXEBUF
) (LPDDHAL_UNLOCKDATA
);
374 typedef struct _DDHAL_DDEXEBUFCALLBACKS
{
377 LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer
;
378 LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer
;
379 LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer
;
380 LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer
;
381 LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer
;
382 } DDHAL_DDEXEBUFCALLBACKS
,*LPDDHAL_DDEXEBUFCALLBACKS
;
384 typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA
*LPDDHAL_GETAVAILDRIVERMEMORYDATA
;
385 typedef struct _DDHAL_UPDATENONLOCALHEAPDATA
*LPDDHAL_UPDATENONLOCALHEAPDATA
;
386 typedef struct _DDHAL_GETHEAPALIGNMENTDATA
*LPDDHAL_GETHEAPALIGNMENTDATA
;
388 typedef DWORD (PASCAL
*LPDDHAL_GETAVAILDRIVERMEMORY
)(LPDDHAL_GETAVAILDRIVERMEMORYDATA
);
389 typedef DWORD (PASCAL
*LPDDHAL_UPDATENONLOCALHEAP
) (LPDDHAL_UPDATENONLOCALHEAPDATA
);
390 typedef DWORD (PASCAL
*LPDDHAL_GETHEAPALIGNMENT
) (LPDDHAL_GETHEAPALIGNMENTDATA
);
392 typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS
{
395 LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory
;
396 LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap
;
397 LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment
;
398 LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus
;
399 } DDHAL_DDMISCELLANEOUSCALLBACKS
,*LPDDHAL_DDMISCELLANEOUSCALLBACKS
;
401 typedef struct _DDHAL_CREATESURFACEEXDATA
*LPDDHAL_CREATESURFACEEXDATA
;
402 typedef struct _DDHAL_GETDRIVERSTATEDATA
*LPDDHAL_GETDRIVERSTATEDATA
;
403 typedef struct _DDHAL_DESTROYDDLOCALDATA
*LPDDHAL_DESTROYDDLOCALDATA
;
405 typedef DWORD (PASCAL
*LPDDHAL_CREATESURFACEEX
)(LPDDHAL_CREATESURFACEEXDATA
);
406 typedef DWORD (PASCAL
*LPDDHAL_GETDRIVERSTATE
) (LPDDHAL_GETDRIVERSTATEDATA
);
407 typedef DWORD (PASCAL
*LPDDHAL_DESTROYDDLOCAL
) (LPDDHAL_DESTROYDDLOCALDATA
);
409 typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS
{
413 LPDDHAL_CREATESURFACEEX CreateSurfaceEx
;
414 LPDDHAL_GETDRIVERSTATE GetDriverState
;
415 LPDDHAL_DESTROYDDLOCAL DestroyDDLocal
;
416 } DDHAL_DDMISCELLANEOUS2CALLBACKS
,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS
;
418 typedef HRESULT (WINAPI
*LPDDGAMMACALIBRATORPROC
)(LPDDGAMMARAMP
, LPBYTE
);
420 /*****************************************************************************
421 * driver info structure
423 * The HAL is queried for additional callbacks via the GetDriverInfo callback.
425 typedef struct _DDHAL_GETDRIVERINFODATA
*LPDDHAL_GETDRIVERINFODATA
;
426 typedef DWORD (PASCAL
*LPDDHAL_GETDRIVERINFO
)(LPDDHAL_GETDRIVERINFODATA
);
428 typedef struct _DDHALINFO
{
430 LPDDHAL_DDCALLBACKS lpDDCallbacks
;
431 LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks
;
432 LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks
;
435 DWORD dwMonitorFrequency
;
436 LPDDHAL_GETDRIVERINFO GetDriverInfo
;
440 LPDDHALMODEINFO lpModeInfo
;
445 ULONG_PTR lpD3DGlobalDriverData
;
446 ULONG_PTR lpD3DHALCallbacks
;
447 LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks
;
450 #define DDHALINFO_ISPRIMARYDISPLAY 0x00000001
451 #define DDHALINFO_MODEXILLEGAL 0x00000002
452 #define DDHALINFO_GETDRIVERINFOSET 0x00000004
454 /* where the high-level ddraw implementation stores the callbacks */
455 typedef struct _DDHAL_CALLBACKS
{
456 DDHAL_DDCALLBACKS cbDDCallbacks
;
457 DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks
;
458 DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks
;
459 DDHAL_DDCALLBACKS HALDD
;
460 DDHAL_DDSURFACECALLBACKS HALDDSurface
;
461 DDHAL_DDPALETTECALLBACKS HALDDPalette
;
462 DDHAL_DDCALLBACKS HELDD
;
463 DDHAL_DDSURFACECALLBACKS HELDDSurface
;
464 DDHAL_DDPALETTECALLBACKS HELDDPalette
;
465 DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks
;
466 DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf
;
467 DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf
;
468 /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */
469 } DDHAL_CALLBACKS
,*LPDDHAL_CALLBACKS
;
471 /*****************************************************************************
472 * parameter structures
474 typedef struct _DDHAL_DESTROYDRIVERDATA
{
475 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
477 LPDDHAL_DESTROYDRIVER DestroyDriver
;
478 } DDHAL_DESTROYDRIVERDATA
;
480 typedef struct _DDHAL_SETMODEDATA
{
481 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
484 LPDDHAL_SETMODE SetMode
;
489 typedef struct _DDHAL_CREATESURFACEDATA
{
490 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
491 LPDDSURFACEDESC lpDDSurfaceDesc
;
492 LPDDRAWI_DDRAWSURFACE_LCL
* lplpSList
;
495 LPDDHAL_CREATESURFACE CreateSurface
;
496 } DDHAL_CREATESURFACEDATA
;
498 typedef struct _DDHAL_CANCREATESURFACEDATA
{
499 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
500 LPDDSURFACEDESC lpDDSurfaceDesc
;
501 DWORD bIsDifferentPixelFormat
;
503 LPDDHAL_CANCREATESURFACE CanCreateSurface
;
504 } DDHAL_CANCREATESURFACEDATA
;
506 typedef struct _DDHAL_CREATEPALETTEDATA
{
507 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
508 LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette
;
509 LPPALETTEENTRY lpColorTable
;
511 LPDDHAL_CREATEPALETTE CreatePalette
;
513 } DDHAL_CREATEPALETTEDATA
;
515 typedef struct _DDHAL_SETEXCLUSIVEMODEDATA
{
516 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
520 LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode
;
521 } DDHAL_SETEXCLUSIVEMODEDATA
;
524 typedef struct _DDHAL_DESTROYSURFACEDATA
{
525 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
526 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
;
528 LPDDHALSURFCB_DESTROYSURFACE DestroySurface
;
529 } DDHAL_DESTROYSURFACEDATA
;
531 typedef struct _DDHAL_FLIPDATA
{
532 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
533 LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr
;
534 LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg
;
537 LPDDHALSURFCB_FLIP Flip
;
538 LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft
;
539 LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft
;
542 typedef struct _DDHAL_LOCKDATA
{
543 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
544 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
;
549 LPDDHALSURFCB_LOCK Lock
;
553 typedef struct _DDHAL_UNLOCKDATA
{
554 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
555 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
;
557 LPDDHALSURFCB_UNLOCK Unlock
;
560 typedef struct _DDHAL_BLTDATA
{
561 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
562 LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface
;
564 LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface
;
570 LPDDHALSURFCB_BLT Blt
;
578 typedef struct _DDHAL_SETPALETTEDATA
{
579 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
580 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
;
581 LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette
;
583 LPDDHALSURFCB_SETPALETTE SetPalette
;
585 } DDHAL_SETPALETTEDATA
;
588 typedef struct _DDHAL_DESTROYPALETTEDATA
{
589 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
590 LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette
;
592 LPDDHALPALCB_DESTROYPALETTE DestroyPalette
;
593 } DDHAL_DESTROYPALETTEDATA
;
595 typedef struct _DDHAL_SETENTRIESDATA
{
596 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
597 LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette
;
600 LPPALETTEENTRY lpEntries
;
602 LPDDHALPALCB_SETENTRIES SetEntries
;
603 } DDHAL_SETENTRIESDATA
;
605 typedef struct _DDHAL_GETDRIVERINFODATA
{
609 DWORD dwExpectedSize
;
614 } DDHAL_GETDRIVERINFODATA
;
616 /*****************************************************************************
617 * high-level ddraw implementation structures
620 typedef DWORD IUnknown
; /* FIXME: implement proper definition */
622 typedef struct _IUNKNOWN_LIST
{
623 struct _IUNKNOWN_LIST
* lpLink
;
625 IUnknown
* lpIUnknown
;
626 } IUNKNOWN_LIST
,*LPIUNKNOWN_LIST
;
628 typedef struct _PROCESS_LIST
{
629 struct _PROCESS_LIST
* lpLink
;
634 } PROCESS_LIST
,*LPPROCESS_LIST
;
636 typedef struct _ATTACHLIST
{
638 struct _ATTACHLIST
* lpLink
;
639 LPDDRAWI_DDRAWSURFACE_LCL lpAttached
;
640 LPDDRAWI_DDRAWSURFACE_INT lpIAttached
;
641 } ATTACHLIST
,*LPATTACHLIST
;
643 #define DDAL_IMPLICIT 0x00000001
645 typedef struct _ACCESSRECTLIST
{
646 struct _ACCESSRECTLIST
* lpLink
;
648 LPDDRAWI_DIRECTDRAW_LCL lpOwner
;
649 LPVOID lpSurfaceData
;
651 LPHEAPALIASINFO lpHeapAliasInfo
;
652 } ACCESSRECTLIST
,*LPACCESSRECTLIST
;
654 #define ACCESSRECT_VRAMSTYLE 0x00000001
655 #define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002
656 #define ACCESSRECT_BROKEN 0x00000004
658 typedef struct _DBLNODE
{
659 struct _DBLNODE
* next
;
660 struct _DBLNODE
* prev
;
661 LPDDRAWI_DDRAWSURFACE_LCL object
;
662 LPDDRAWI_DDRAWSURFACE_INT object_int
;
663 } DBLNODE
,*LPDBLNODE
;
665 typedef struct _DDRAWI_DIRECTDRAW_INT
{
667 LPDDRAWI_DIRECTDRAW_LCL lpLcl
;
668 LPDDRAWI_DIRECTDRAW_INT lpLink
;
670 } DDRAWI_DIRECTDRAW_INT
;
672 typedef struct _DDRAWI_DIRECTDRAW_LCL
{
674 LPDDRAWI_DIRECTDRAW_GBL lpGbl
;
679 IUnknown
* pUnkOuter
;
684 LPDDRAWI_DDRAWSURFACE_INT lpPrimary
;
685 LPDDRAWI_DDRAWSURFACE_INT lpCB
;
686 DWORD dwPreferredMode
;
688 HINSTANCE hD3DInstance
;
689 IUnknown
* pD3DIUnknown
;
690 LPDDHAL_CALLBACKS lpDDCB
;
693 DWORD dwAppHackFlags
;
701 ULONG_PTR hGammaCalibrator
;
702 LPDDGAMMACALIBRATORPROC lpGammaCalibrator
;
703 } DDRAWI_DIRECTDRAW_LCL
;
705 #define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001
706 #define DDRAWILCL_ISFULLSCREEN 0x00000002
707 #define DDRAWILCL_SETCOOPCALLED 0x00000004
708 #define DDRAWILCL_ACTIVEYES 0x00000008
709 #define DDRAWILCL_ACTIVENO 0x00000010
710 #define DDRAWILCL_HOOKEDHWND 0x00000020
711 #define DDRAWILCL_ALLOWMODEX 0x00000040
712 #define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080
713 #define DDRAWILCL_MODEHASBEENCHANGED 0x00000100
714 #define DDRAWILCL_CREATEDWINDOW 0x00000200
715 #define DDRAWILCL_DIRTYDC 0x00000400
716 #define DDRAWILCL_DISABLEINACTIVATE 0x00000800
717 #define DDRAWILCL_CURSORCLIPPED 0x00001000
718 #define DDRAWILCL_EXPLICITMONITOR 0x00002000
719 #define DDRAWILCL_MULTITHREADED 0x00004000
720 #define DDRAWILCL_FPUSETUP 0x00008000
721 #define DDRAWILCL_POWEREDDOWN 0x00010000
722 #define DDRAWILCL_DIRECTDRAW7 0x00020000
723 #define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000
724 #define DDRAWILCL_FPUPRESERVE 0x00080000
726 typedef struct _DDRAWI_DIRECTDRAW_GBL
{
729 FLATPTR fpPrimaryOrig
;
733 LPDDHAL_CALLBACKS lpDDCBtmp
;
734 LPDDRAWI_DDRAWSURFACE_INT dsList
;
735 LPDDRAWI_DDRAWPALETTE_INT palList
;
736 LPDDRAWI_DDRAWCLIPPER_INT clipperList
;
737 LPDDRAWI_DIRECTDRAW_GBL lp16DD
;
739 DWORD dwCurrOverlays
;
740 DWORD dwMonitorFrequency
;
741 DDCORECAPS ddHELCaps
;
743 DDCOLORKEY ddckCKDestOverlay
;
744 DDCOLORKEY ddckCKSrcOverlay
;
746 LPVOID lpDriverHandle
;
747 LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner
;
749 DWORD dwModeIndexOrig
;
753 LPDDHALMODEINFO lpModeInfo
;
754 PROCESS_LIST plProcessList
;
755 DWORD dwSurfaceLockCount
;
756 DWORD dwAliasedLockCnt
;
757 ULONG_PTR dwReserved3
;
762 DBLNODE dbnOverlayRoot
;
763 volatile LPWORD lpwPDeviceFlags
;
765 DWORD dwWin16LockCnt
;
769 DWORD dwSaveNumModes
;
771 ULONG_PTR lpD3DGlobalDriverData
;
772 ULONG_PTR lpD3DHALCallbacks
;
773 DDCORECAPS ddBothCaps
;
775 LPDDVIDEOPORTCAPS lpDDVideoPortCaps
;
776 LPDDRAWI_DDVIDEOPORT_INT dvpList
;
777 ULONG_PTR lpD3DHALCallbacks2
;
782 LPHEAPALIASINFO phaiHeapAliases
;
783 ULONG_PTR hKernelHandle
;
784 ULONG_PTR pfnNotifyProc
;
785 LPDDKERNELCAPS lpDDKernelCaps
;
786 LPDDNONLOCALVIDMEMCAPS lpddNLVCaps
;
787 LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps
;
788 LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps
;
789 ULONG_PTR lpD3DExtendedCaps
;
793 char cDriverName
[MAX_DRIVER_NAME
];
795 ULONG_PTR lpD3DHALCallbacks3
;
796 DWORD dwNumZPixelFormats
;
797 LPDDPIXELFORMAT lpZPixelFormats
;
798 LPDDRAWI_DDMOTIONCOMP_INT mcList
;
800 DDSCAPSEX ddsCapsMore
;
801 } DDRAWI_DIRECTDRAW_GBL
;
803 #define DDRAWI_VIRTUALDESKTOP 0x00000008
804 #define DDRAWI_MODEX 0x00000010
805 #define DDRAWI_DISPLAYDRV 0x00000020
806 #define DDRAWI_FULLSCREEN 0x00000040
807 #define DDRAWI_MODECHANGED 0x00000080
808 #define DDRAWI_NOHARDWARE 0x00000100
809 #define DDRAWI_PALETTEINIT 0x00000200
810 #define DDRAWI_NOEMULATION 0x00000400
814 typedef struct _DDRAWI_DDRAWSURFACE_INT
{
816 LPDDRAWI_DDRAWSURFACE_LCL lpLcl
;
817 LPDDRAWI_DDRAWSURFACE_INT lpLink
;
819 } DDRAWI_DDRAWSURFACE_INT
;
821 typedef struct _DDRAWI_DDRAWSURFACE_GBL
{
825 LPACCESSRECTLIST lpRectList
;
829 LPVMEMHEAP lpVidMemHeap
;
833 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
844 ULONG_PTR dwReserved1
; /* for display driver use */
845 /* optional (defaults to primary surface pixelformat) */
846 DDPIXELFORMAT ddpfSurface
;
847 } DDRAWI_DDRAWSURFACE_GBL
;
849 #define DDRAWISURFGBL_MEMFREE 0x00000001
850 #define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002
851 #define DDRAWISURFGBL_ISGDISURFACE 0x00000004
852 #define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008
853 #define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010
854 #define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020
855 #define DDRAWISURFGBL_LOCKBROKEN 0x00000040
856 #define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080
857 #define DDRAWISURFGBL_ISCLIENTMEM 0x00000100
858 #define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200
859 #define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400
860 #define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600
861 #define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800
862 #define DDRAWISURFGBL_VPORTDATA 0x00001000
863 #define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000
864 #define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000
865 #define DDRAWISURFGBL_FASTLOCKHELD 0x00008000
866 #define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000
868 typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE
{
871 DWORD dwPhysicalPageTable
;
872 FLATPTR fpPhysicalVidMem
;
876 ULONG_PTR dwSavedDCContext
;
877 FLATPTR fpAliasedVidMem
;
878 ULONG_PTR dwDriverReserved
;
879 ULONG_PTR dwHELReserved
;
881 ULONG_PTR hKernelSurface
;
882 DWORD dwKernelRefCnt
;
883 LPDDCOLORCONTROL lpColorInfo
;
885 DWORD dwContentsStamp
;
886 LPVOID lpvUnswappedDriverReserved
;
887 LPVOID lpDDRAWReserved2
;
888 DWORD dwDDRAWReserved1
;
889 DWORD dwDDRAWReserved2
;
890 FLATPTR fpAliasOfVidMem
;
891 } DDRAWI_DDRAWSURFACE_GBL_MORE
;
893 /* the MS version of this macro was somewhat obfuscated and unreadable
894 * (possibly because of mediocre MS coders)... so I simplified it...
895 * (and so I commit no copyright violations either, hah) */
896 #define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \
897 (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1))
899 typedef struct _DDRAWI_DDRAWSURFACE_MORE
{
901 IUNKNOWN_LIST
* lpIUnknowns
;
902 LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl
;
903 DWORD dwPageLockCount
;
904 DWORD dwBytesAllocated
;
905 LPDDRAWI_DIRECTDRAW_INT lpDD_int
;
907 LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper
;
909 LPHEAPALIASINFO lpHeapAliasInfo
;
910 DWORD dwOverlayFlags
;
912 LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort
;
913 LPDDOVERLAYFX lpddOverlayFX
;
915 DWORD dwTextureStage
;
916 LPVOID lpDDRAWReserved
;
917 LPVOID lpDDRAWReserved2
;
918 LPVOID lpDDrawReserved3
;
919 DWORD dwDDrawReserved4
;
920 LPVOID lpDDrawReserved5
;
922 LPDWORD lpOriginalGammaRamp
;
923 LPVOID lpDDrawReserved6
;
924 DWORD dwSurfaceHandle
;
925 DWORD qwDDrawReserved8
[2];
926 LPVOID lpDDrawReserved9
;
928 LPDDSURFACEDESC2 pCreatedDDSurfaceDesc2
;
929 LPDDRAWI_DDRAWSURFACE_LCL
*slist
;
932 } DDRAWI_DDRAWSURFACE_MORE
;
934 typedef struct _DDRAWI_DDRAWSURFACE_LCL
{
935 LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore
;
936 LPDDRAWI_DDRAWSURFACE_GBL lpGbl
;
937 ULONG_PTR hDDSurface
;
938 LPATTACHLIST lpAttachList
;
939 LPATTACHLIST lpAttachListFrom
;
944 LPDDRAWI_DDRAWPALETTE_INT lpDDPalette
;
945 LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper
;
946 DWORD dwModeCreatedIn
;
947 DWORD dwBackBufferCount
;
948 DDCOLORKEY ddckCKDestBlt
;
949 DDCOLORKEY ddckCKSrcBlt
;
951 ULONG_PTR dwReserved1
; /* for display driver use */
953 DDCOLORKEY ddckCKSrcOverlay
;
954 DDCOLORKEY ddckCKDestOverlay
;
955 LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying
;
956 DBLNODE dbnOverlayNode
;
963 } DDRAWI_DDRAWSURFACE_LCL
;
965 #define DDRAWISURF_ATTACHED 0x00000001
966 #define DDRAWISURF_IMPLICITCREATE 0x00000002
967 #define DDRAWISURF_ISFREE 0x00000004
968 #define DDRAWISURF_ATTACHED_FROM 0x00000008
969 #define DDRAWISURF_IMPLICITROOT 0x00000010
970 #define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020
971 #define DDRAWISURF_DATAISALIASED 0x00000040
972 #define DDRAWISURF_HASDC 0x00000080
973 #define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100
974 #define DDRAWISURF_HASCKEYDESTBLT 0x00000200
975 #define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400
976 #ifndef DDRAWISURF_HASCKEYSRCBLT
977 #define DDRAWISURF_HASCKEYSRCBLT 0x00000800
979 #define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000
980 #ifndef DDRAWISURF_HASPIXELFORMAT
981 #define DDRAWISURF_HASPIXELFORMAT 0x00002000
983 #ifndef DDRAWISURF_HASOVERLAYDATA
984 #define DDRAWISURF_HASOVERLAYDATA 0x00004000
986 #define DDRAWISURF_SETGAMMA 0x00008000
988 #ifndef DDRAWISURF_INVALID
989 #define DDRAWISURF_INVALID 0x10000000
993 typedef struct _DDRAWI_DDRAWPALETTE_INT
{
995 LPDDRAWI_DDRAWPALETTE_LCL lpLcl
;
996 LPDDRAWI_DDRAWPALETTE_INT lpLink
;
998 } DDRAWI_DDRAWPALETTE_INT
;
1000 typedef struct _DDRAWI_DDRAWPALETTE_GBL
{
1003 LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl
;
1005 LPPALETTEENTRY lpColorTable
;
1007 ULONG_PTR dwReserved1
; /* for display driver use */
1008 HPALETTE hHELGDIPalette
;
1011 DWORD dwDriverReserved
;
1012 DWORD dwContentsStamp
;
1017 } DDRAWI_DDRAWPALETTE_GBL
;
1019 #define DDRAWIPAL_256 0x00000001
1020 #define DDRAWIPAL_16 0x00000002
1021 #define DDRAWIPAL_GDI 0x00000004
1022 #define DDRAWIPAL_STORED_8 0x00000008
1023 #define DDRAWIPAL_STORED_16 0x00000010
1024 #define DDRAWIPAL_STORED_24 0x00000020
1025 #define DDRAWIPAL_EXCLUSIVE 0x00000040
1026 #define DDRAWIPAL_INHEL 0x00000080
1027 #define DDRAWIPAL_DIRTY 0x00000100
1028 #define DDRAWIPAL_ALLOW256 0x00000200
1029 #define DDRAWIPAL_4 0x00000400
1030 #define DDRAWIPAL_2 0x00000800
1031 #define DDRAWIPAL_STORED_8INDEX 0x00001000
1032 #define DDRAWIPAL_ALPHA 0x00002000
1034 typedef struct _DDRAWI_DDRAWPALETTE_LCL
{
1036 LPDDRAWI_DDRAWPALETTE_GBL lpGbl
;
1037 ULONG_PTR dwUnused0
;
1038 DWORD dwLocalRefCnt
;
1039 IUnknown
* pUnkOuter
;
1040 LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl
;
1041 ULONG_PTR dwReserved1
;
1043 ULONG_PTR dwDDRAWReserved1
;
1044 ULONG_PTR dwDDRAWReserved2
;
1045 ULONG_PTR dwDDRAWReserved3
;
1046 } DDRAWI_DDRAWPALETTE_LCL
;
1048 typedef struct _DDHAL_GETMOCOMPGUIDSDATA FAR
*LPDDHAL_GETMOCOMPGUIDSDATA
;
1049 typedef struct _DDHAL_GETMOCOMPFORMATSDATA FAR
*LPDDHAL_GETMOCOMPFORMATSDATA
;
1050 typedef struct _DDHAL_CREATEMOCOMPDATA FAR
*LPDDHAL_CREATEMOCOMPDATA
;
1051 typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA FAR
*LPDDHAL_GETMOCOMPCOMPBUFFDATA
;
1052 typedef struct _DDHAL_GETINTERNALMOCOMPDATA FAR
*LPDDHAL_GETINTERNALMOCOMPDATA
;
1053 typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA FAR
*LPDDHAL_BEGINMOCOMPFRAMEDATA
;
1054 typedef struct _DDHAL_ENDMOCOMPFRAMEDATA FAR
*LPDDHAL_ENDMOCOMPFRAMEDATA
;
1055 typedef struct _DDHAL_RENDERMOCOMPDATA FAR
*LPDDHAL_RENDERMOCOMPDATA
;
1056 typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA FAR
*LPDDHAL_QUERYMOCOMPSTATUSDATA
;
1057 typedef struct _DDHAL_DESTROYMOCOMPDATA FAR
*LPDDHAL_DESTROYMOCOMPDATA
;
1058 typedef struct _DDHAL_COLORCONTROLDATA FAR
*LPDDHAL_COLORCONTROLDATA
;
1060 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_GETGUIDS
)( LPDDHAL_GETMOCOMPGUIDSDATA
);
1061 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_GETFORMATS
)( LPDDHAL_GETMOCOMPFORMATSDATA
);
1062 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_CREATE
)( LPDDHAL_CREATEMOCOMPDATA
);
1063 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_GETCOMPBUFFINFO
)( LPDDHAL_GETMOCOMPCOMPBUFFDATA
);
1064 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_GETINTERNALINFO
)( LPDDHAL_GETINTERNALMOCOMPDATA
);
1065 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_BEGINFRAME
)( LPDDHAL_BEGINMOCOMPFRAMEDATA
);
1066 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_ENDFRAME
)( LPDDHAL_ENDMOCOMPFRAMEDATA
);
1067 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_RENDER
)( LPDDHAL_RENDERMOCOMPDATA
);
1068 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_QUERYSTATUS
)( LPDDHAL_QUERYMOCOMPSTATUSDATA
);
1069 typedef DWORD (FAR PASCAL
*LPDDHALMOCOMPCB_DESTROY
)( LPDDHAL_DESTROYMOCOMPDATA
);
1070 typedef DWORD (FAR PASCAL
*LPDDHALCOLORCB_COLORCONTROL
)(LPDDHAL_COLORCONTROLDATA
);
1072 typedef struct _DDMCCOMPBUFFERINFO
1074 DWORD dwSize
; // [in] size of the struct
1075 DWORD dwNumCompBuffers
; // [out] number of buffers required for compressed data
1076 DWORD dwWidthToCreate
; // [out] Width of surface to create
1077 DWORD dwHeightToCreate
; // [out] Height of surface to create
1078 DWORD dwBytesToAllocate
; // [out] Total number of bytes used by each surface
1079 DDSCAPS2 ddCompCaps
; // [out] caps to create surfaces to store compressed data
1080 DDPIXELFORMAT ddPixelFormat
; // [out] format to create surfaces to store compressed data
1081 } DDMCCOMPBUFFERINFO
, *LPDDMCCOMPBUFFERINFO
;
1083 typedef struct _DDMCBUFFERINFO
1085 DWORD dwSize
; // [in] size of the struct
1086 LPDDRAWI_DDRAWSURFACE_LCL lpCompSurface
; // [in] pointer to buffer containing compressed data
1087 DWORD dwDataOffset
; // [in] offset of relevant data from the beginning of buffer
1088 DWORD dwDataSize
; // [in] size of relevant data
1089 LPVOID lpPrivate
; // Reserved for DirectDraw;
1090 } DDMCBUFFERINFO
, *LPDDMCBUFFERINFO
;
1092 typedef struct _DDHAL_GETDRIVERSTATEDATA
{
1096 ULONG_PTR dwhContext
;
1101 } DDHAL_GETDRIVERSTATEDATA
;
1103 typedef struct _DDHAL_ADDATTACHEDSURFACEDATA
1105 LPDDRAWI_DIRECTDRAW_GBL lpDD
;
1106 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
;
1107 LPDDRAWI_DDRAWSURFACE_LCL lpSurfAttached
;
1109 LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface
;
1110 } DDHAL_ADDATTACHEDSURFACEDATA
;
1112 typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA
1114 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1115 LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp
;
1116 LPDDRAWI_DDRAWSURFACE_LCL lpDestSurface
; // [in] destination buffer in which to decoding this frame
1117 DWORD dwInputDataSize
; // [in] size of other misc input data to begin frame
1118 LPVOID lpInputData
; // [in] pointer to misc input data
1119 DWORD dwOutputDataSize
; // [in] size of other misc output data to begin frame
1120 LPVOID lpOutputData
; // [in] pointer to output misc data (allocated by client)
1121 HRESULT ddRVal
; // [out]
1122 LPDDHALMOCOMPCB_BEGINFRAME BeginMoCompFrame
;
1123 } DDHAL_BEGINMOCOMPFRAMEDATA
;
1125 typedef struct _DDHAL_COLORCONTROLDATA
1127 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1128 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
; // surface
1129 LPDDCOLORCONTROL lpColorData
; // color control information
1130 DWORD dwFlags
; // DDRAWI_GETCOLOR/DDRAWI_SETCOLOR
1131 HRESULT ddRVal
; // return value
1132 LPDDHALCOLORCB_COLORCONTROL ColorControl
; // PRIVATE: ptr to callback
1133 } DDHAL_COLORCONTROLDATA
;
1135 typedef struct _DDHAL_CREATEMOCOMPDATA
1137 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1138 LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp
;
1140 DWORD dwUncompWidth
;
1141 DWORD dwUncompHeight
;
1142 DDPIXELFORMAT ddUncompPixelFormat
;
1146 LPDDHALMOCOMPCB_CREATE CreateMoComp
;
1147 } DDHAL_CREATEMOCOMPDATA
;
1149 typedef struct _DDHAL_DESTROYMOCOMPDATA
1151 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1152 LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp
;
1154 LPDDHALMOCOMPCB_DESTROY DestroyMoComp
;
1155 } DDHAL_DESTROYMOCOMPDATA
;
1157 typedef struct _DDHAL_ENDMOCOMPFRAMEDATA
1159 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1160 LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp
;
1162 DWORD dwInputDataSize
;
1164 LPDDHALMOCOMPCB_ENDFRAME EndMoCompFrame
;
1165 } DDHAL_ENDMOCOMPFRAMEDATA
;
1167 typedef struct _DDHAL_FLIPTOGDISURFACEDATA
1169 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1170 DWORD dwToGDI
; // TRUE if flipping to the GDI surface, FALSE if flipping away
1171 DWORD dwReserved
; // reserved for future use
1172 HRESULT ddRVal
; // return value
1173 LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface
; // PRIVATE: ptr to callback
1174 } DDHAL_FLIPTOGDISURFACEDATA
;
1176 typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA
1178 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1179 DDSCAPS DDSCaps
; // caps for type of surface memory
1180 DWORD dwTotal
; // total memory for this kind of surface
1181 DWORD dwFree
; // free memory for this kind of surface
1182 HRESULT ddRVal
; // return value
1183 LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory
; // PRIVATE: ptr to callback
1184 DDSCAPSEX ddsCapsEx
; // Added in V6. Driver should check DDVERSION info
1185 // to see if this field is present.
1186 } DDHAL_GETAVAILDRIVERMEMORYDATA
;
1188 typedef struct _DDHAL_GETBLTSTATUSDATA
1190 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1191 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
; // surface struct
1192 DWORD dwFlags
; // flags
1193 HRESULT ddRVal
; // return value
1194 LPDDHALSURFCB_GETBLTSTATUS GetBltStatus
; // PRIVATE: ptr to callback
1195 } DDHAL_GETBLTSTATUSDATA
;
1197 typedef struct _DDHAL_GETFLIPSTATUSDATA
1199 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1200 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
; // surface struct
1201 DWORD dwFlags
; // flags
1202 HRESULT ddRVal
; // return value
1203 LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus
; // PRIVATE: ptr to callback
1204 } DDHAL_GETFLIPSTATUSDATA
;
1206 typedef struct _DDHAL_GETINTERNALMOCOMPDATA
1208 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1210 DWORD dwWidth
; // [in] width of uncompressed data
1211 DWORD dwHeight
; // [in] height of uncompressed data
1212 DDPIXELFORMAT ddPixelFormat
; // [in] pixel-format of uncompressed data
1213 DWORD dwScratchMemAlloc
; // [out] amount of scratch memory will the hal allocate for its private use
1214 HRESULT ddRVal
; // [out]
1215 LPDDHALMOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo
;
1216 } DDHAL_GETINTERNALMOCOMPDATA
;
1218 typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA
1220 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1222 DWORD dwWidth
; // [in] width of uncompressed data
1223 DWORD dwHeight
; // [in] height of uncompressed data
1224 DDPIXELFORMAT ddPixelFormat
; // [in] pixel-format of uncompressed data
1225 DWORD dwNumTypesCompBuffs
;// [in/out] number of memory types required for comp buffers
1226 LPDDMCCOMPBUFFERINFO lpCompBuffInfo
; // [in] driver supplied info regarding comp buffers (allocated by client)
1227 HRESULT ddRVal
; // [out]
1228 LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo
;
1229 } DDHAL_GETMOCOMPCOMPBUFFDATA
;
1231 typedef struct _DDHAL_GETMOCOMPGUIDSDATA
1233 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1237 LPDDHALMOCOMPCB_GETGUIDS GetMoCompGuids
;
1238 } DDHAL_GETMOCOMPGUIDSDATA
;
1240 typedef struct _DDHAL_GETMOCOMPFORMATSDATA
1242 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1245 LPDDPIXELFORMAT lpFormats
;
1247 LPDDHALMOCOMPCB_GETFORMATS GetMoCompFormats
;
1248 } DDHAL_GETMOCOMPFORMATSDATA
;
1250 typedef struct _DDHAL_GETSCANLINEDATA
1252 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1253 DWORD dwScanLine
; // returned scan line
1254 HRESULT ddRVal
; // return value
1255 LPDDHAL_GETSCANLINE GetScanLine
; // PRIVATE: ptr to callback
1256 } DDHAL_GETSCANLINEDATA
;
1258 typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA
1260 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1261 LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp
;
1262 LPDDRAWI_DDRAWSURFACE_LCL lpSurface
; // [in] Surface being queried
1263 DWORD dwFlags
; // [in] DDMCQUERY_XXX falgs
1264 HRESULT ddRVal
; // [out]
1265 LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus
;
1266 } DDHAL_QUERYMOCOMPSTATUSDATA
;
1268 typedef struct _DDHAL_RENDERMOCOMPDATA
1270 LPDDRAWI_DIRECTDRAW_LCL lpDD
;
1271 LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp
;
1272 DWORD dwNumBuffers
; // [in] Number of entries in the lpMacroBlockInfo array
1273 LPDDMCBUFFERINFO lpBufferInfo
; // [in] Surfaces containing macro block info
1274 DWORD dwFunction
; // [in] Function
1276 DWORD dwInputDataSize
;
1277 LPVOID lpOutputData
;
1278 DWORD dwOutputDataSize
;
1279 HRESULT ddRVal
; // [out]
1280 LPDDHALMOCOMPCB_RENDER RenderMoComp
;
1281 } DDHAL_RENDERMOCOMPDATA
;
1283 typedef struct _DDHAL_SETCOLORKEYDATA
1285 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1286 LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface
; // surface struct
1287 DWORD dwFlags
; // flags
1288 DDCOLORKEY ckNew
; // new color key
1289 HRESULT ddRVal
; // return value
1290 LPDDHALSURFCB_SETCOLORKEY SetColorKey
; // PRIVATE: ptr to callback
1291 } DDHAL_SETCOLORKEYDATA
;
1293 typedef struct _DDHAL_SETOVERLAYPOSITIONDATA
1295 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1296 LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface
; // src surface
1297 LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface
;// dest surface
1298 LONG lXPos
; // x position
1299 LONG lYPos
; // y position
1300 HRESULT ddRVal
; // return value
1301 LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition
; // PRIVATE: ptr to callback
1302 } DDHAL_SETOVERLAYPOSITIONDATA
;
1304 typedef struct _DDHAL_UPDATEOVERLAYDATA
1306 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1307 LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface
;// dest surface
1308 RECTL rDest
; // dest rect
1309 LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface
; // src surface
1310 RECTL rSrc
; // src rect
1311 DWORD dwFlags
; // flags
1312 DDOVERLAYFX overlayFX
; // overlay FX
1313 HRESULT ddRVal
; // return value
1314 LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay
; // PRIVATE: ptr to callback
1315 } DDHAL_UPDATEOVERLAYDATA
;
1317 typedef struct _DDHAL_WAITFORVERTICALBLANKDATA
1319 LPDDRAWI_DIRECTDRAW_GBL lpDD
; // driver struct
1320 DWORD dwFlags
; // flags
1321 DWORD bIsInVB
; // is in vertical blank
1322 ULONG_PTR hEvent
; // event
1323 HRESULT ddRVal
; // return value
1324 LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank
; // PRIVATE: ptr to callback
1325 } DDHAL_WAITFORVERTICALBLANKDATA
;
1331 #endif /* __DDRAWI_INCLUDED__ */