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