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