Release 20010305.
[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 #define DDAPI WINAPI
15
16 /* the DirectDraw versions */
17 #define DD_VERSION              0x0200 /* compatibility version */
18 #define DD_RUNTIME_VERSION      0x0700 /* actual version */
19
20 /* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
21 #define DD_HAL_VERSION  0x0100
22
23 /* more DCICOMMAND escapes */
24 #define DDCREATEDRIVEROBJECT    10
25 #define DDGET32BITDRIVERNAME    11
26 #define DDNEWCALLBACKFNS        12
27 #define DDVERSIONINFO           13
28
29 /*****************************************************************************
30  * Initialization stuff
31  */
32 typedef struct {
33     char szName[260];
34     char szEntryPoint[64];
35     DWORD dwContext;
36 } DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;
37
38 typedef struct {
39     DWORD dwHALVersion;
40     ULONG_PTR dwReserved1;
41     ULONG_PTR dwReserved2;
42 } DDVERSIONDATA,*LPDDVERSIONDATA;
43
44 typedef DWORD PASCAL (*LPDD32BITDRIVERINIT)(DWORD dwContext);
45
46 /* pointer to video memory */
47 typedef ULONG_PTR FLATPTR;
48
49 /* predeclare some structures */
50 typedef struct _DDHALINFO *LPDDHALINFO;
51 typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;
52 typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;
53 typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;
54
55 /*****************************************************************************
56  * driver->ddraw callbacks
57  */
58 typedef BOOL    DDAPI (*LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset);
59 typedef FLATPTR DDAPI (*LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight);
60 typedef void    DDAPI (*LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem);
61
62 typedef struct {
63     DWORD               dwSize;
64     LPDDHAL_SETINFO     lpSetInfo;
65     LPDDHAL_VIDMEMALLOC lpVidMemAlloc;
66     LPDDHAL_VIDMEMFREE  lpVidMemFree;
67 } DDHALDDRAWFNS,*LPDDHALDDRAWFNS;
68
69 /*****************************************************************************
70  * mode info structure
71  */
72 typedef struct _DDHALMODEINFO {
73     DWORD       dwWidth;
74     DWORD       dwHeight;
75     LONG        lPitch;
76     DWORD       dwBPP;
77     WORD        wFlags;
78     WORD        wRefreshRate;
79     DWORD       dwRBitMask;
80     DWORD       dwGBitMask;
81     DWORD       dwBBitMask;
82     DWORD       dwAlphaBitMask;
83 } DDHALMODEINFO,*LPDDHALMODEINFO;
84
85 #define DDMODEINFO_PALETTIZED   0x0001
86 #define DDMODEINFO_MODEX        0x0002
87 #define DDMODEINFO_UNSUPPORTED  0x0004
88 #define DDMODEINFO_STANDARDVGA  0x0008
89 #define DDMODEINFO_MAXREFRESH   0x0010
90 #define DDMODEINFO_STEREO       0x0020
91
92 /*****************************************************************************
93  * video memory info structure
94  */
95 typedef struct _VIDMEM {
96     DWORD       dwFlags;
97     FLATPTR     fpStart;
98     union {
99         FLATPTR fpEnd;
100         DWORD   dwWidth;
101     } DUMMYUNIONNAME1;
102     DDSCAPS     ddsCaps;
103     DDSCAPS     ddsCapsAlt;
104     union {
105         FLATPTR lpHeap;
106         DWORD   dwHeight;
107     } DUMMYUNIONNAME2;
108 } VIDMEM,*LPVIDMEM;
109
110 #define VIDMEM_ISLINEAR         0x00000001
111 #define VIDMEM_ISRECTANGULAR    0x00000002
112 #define VIDMEM_ISHEAP           0x00000004
113 #define VIDMEM_ISNONLOCAL       0x00000008
114 #define VIDMEM_ISWC             0x00000010
115 #define VIDMEM_ISDISABLED       0x00000020
116
117 typedef struct _VIDMEMINFO {
118     FLATPTR             fpPrimary;
119     DWORD               dwFlags;
120     DWORD               dwDisplayWidth;
121     DWORD               dwDisplayHeight;
122     LONG                lDisplayPitch;
123     DDPIXELFORMAT       ddpfDisplay;
124     DWORD               dwOffscreenAlign;
125     DWORD               dwOverlayAlign;
126     DWORD               dwTextureAlign;
127     DWORD               dwZBufferAlign;
128     DWORD               dwAlphaAlign;
129     DWORD               dwNumHeaps;
130     LPVIDMEM            pvmList;
131 } VIDMEMINFO,*LPVIDMEMINFO;
132
133 /*****************************************************************************
134  * core capabilities structure
135  */
136 typedef struct _DDCORECAPS {
137     DWORD       dwSize;
138     DWORD       dwCaps;
139     DWORD       dwCaps2;
140     DWORD       dwCKeyCaps;
141     DWORD       dwFXCaps;
142     DWORD       dwFXAlphaCaps;
143     DWORD       dwPalCaps;
144     DWORD       dwSVCaps;
145     DWORD       dwAlphaBltConstBitDepths;
146     DWORD       dwAlphaBltPixelBitDepths;
147     DWORD       dwAlphaBltSurfaceBitDepths;
148     DWORD       dwAlphaOverlayConstBitDepths;
149     DWORD       dwAlphaOverlayPixelBitDepths;
150     DWORD       dwAlphaOverlaySurfaceBitDepths;
151     DWORD       dwZBufferBitDepths;
152     DWORD       dwVidMemTotal;
153     DWORD       dwVidMemFree;
154     DWORD       dwMaxVisibleOverlays;
155     DWORD       dwCurrVisibleOverlays;
156     DWORD       dwNumFourCCCodes;
157     DWORD       dwAlignBoundarySrc;
158     DWORD       dwAlignSizeSrc;
159     DWORD       dwAlignBoundaryDest;
160     DWORD       dwAlignSizeDest;
161     DWORD       dwAlignStrideAlign;
162     DWORD       dwRops[DD_ROP_SPACE];
163     DDSCAPS     ddsCaps;
164     DWORD       dwMinOverlayStretch;
165     DWORD       dwMaxOverlayStretch;
166     DWORD       dwMinLiveVideoStretch;
167     DWORD       dwMaxLiveVideoStretch;
168     DWORD       dwMinHwCodecStretch;
169     DWORD       dwMaxHwCodecStretch;
170     DWORD       dwReserved1;
171     DWORD       dwReserved2;
172     DWORD       dwReserved3;
173     DWORD       dwSVBCaps;
174     DWORD       dwSVBCKeyCaps;
175     DWORD       dwSVBFXCaps;
176     DWORD       dwSVBRops[DD_ROP_SPACE];
177     DWORD       dwVSBCaps;
178     DWORD       dwVSBCKeyCaps;
179     DWORD       dwVSBFXCaps;
180     DWORD       dwVSBRops[DD_ROP_SPACE];
181     DWORD       dwSSBCaps;
182     DWORD       dwSSBCKeyCaps;
183     DWORD       dwSSBFXCaps;
184     DWORD       dwSSBRops[DD_ROP_SPACE];
185     DWORD       dwMaxVideoPorts;
186     DWORD       dwCurrVideoPorts;
187     DWORD       dwSVBCaps2;
188 } DDCORECAPS,*LPDDCORECAPS;
189
190 /*****************************************************************************
191  * ddraw->driver callbacks
192  */
193 #define DDHAL_DRIVER_NOTHANDLED 0
194 #define DDHAL_DRIVER_HANDLED    1
195 #define DDHAL_DRIVER_NOCKEYHW   2
196
197 typedef struct _DDHAL_DESTROYDRIVERDATA         *LPDDHAL_DESTROYDRIVERDATA;
198 typedef struct _DDHAL_CREATESURFACEDATA         *LPDDHAL_CREATESURFACEDATA;
199 typedef struct _DDHAL_DRVSETCOLORKEYDATA        *LPDDHAL_DRVSETCOLORKEYDATA;
200 typedef struct _DDHAL_SETMODEDATA               *LPDDHAL_SETMODEDATA;
201 typedef struct _DDHAL_WAITFORVERTICALBLANKDATA  *LPDDHAL_WAITFORVERTICALBLANKDATA;
202 typedef struct _DDHAL_CANCREATESURFACEDATA      *LPDDHAL_CANCREATESURFACEDATA;
203 typedef struct _DDHAL_CREATEPALETTEDATA         *LPDDHAL_CREATEPALETTEDATA;
204 typedef struct _DDHAL_GETSCANLINEDATA           *LPDDHAL_GETSCANLINEDATA;
205 typedef struct _DDHAL_SETEXCLUSIVEMODEDATA      *LPDDHAL_SETEXCLUSIVEMODEDATA;
206 typedef struct _DDHAL_FLIPTOGDISURFACEDATA      *LPDDHAL_FLIPTOGDISURFACEDATA;
207
208 typedef DWORD PASCAL (*LPDDHAL_DESTROYDRIVER)       (LPDDHAL_DESTROYDRIVERDATA);
209 typedef DWORD PASCAL (*LPDDHAL_CREATESURFACE)       (LPDDHAL_CREATESURFACEDATA);
210 typedef DWORD PASCAL (*LPDDHAL_SETCOLORKEY)         (LPDDHAL_DRVSETCOLORKEYDATA);
211 typedef DWORD PASCAL (*LPDDHAL_SETMODE)             (LPDDHAL_SETMODEDATA);
212 typedef DWORD PASCAL (*LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA);
213 typedef DWORD PASCAL (*LPDDHAL_CANCREATESURFACE)    (LPDDHAL_CANCREATESURFACEDATA );
214 typedef DWORD PASCAL (*LPDDHAL_CREATEPALETTE)       (LPDDHAL_CREATEPALETTEDATA);
215 typedef DWORD PASCAL (*LPDDHAL_GETSCANLINE)         (LPDDHAL_GETSCANLINEDATA);
216 typedef DWORD PASCAL (*LPDDHAL_SETEXCLUSIVEMODE)    (LPDDHAL_SETEXCLUSIVEMODEDATA);
217 typedef DWORD PASCAL (*LPDDHAL_FLIPTOGDISURFACE)    (LPDDHAL_FLIPTOGDISURFACEDATA);
218
219 typedef struct _DDHAL_DDCALLBACKS {
220     DWORD                               dwSize;
221     DWORD                               dwFlags;
222     LPDDHAL_DESTROYDRIVER               DestroyDriver;
223     LPDDHAL_CREATESURFACE               CreateSurface;
224     LPDDHAL_SETCOLORKEY                 SetColorKey;
225     LPDDHAL_SETMODE                     SetMode;
226     LPDDHAL_WAITFORVERTICALBLANK        WaitForVerticalBlank;
227     LPDDHAL_CANCREATESURFACE            CanCreateSurface;
228     LPDDHAL_CREATEPALETTE               CreatePalette;
229     LPDDHAL_GETSCANLINE                 GetScanLine;
230     /* DirectX 2 */
231     LPDDHAL_SETEXCLUSIVEMODE            SetExclusiveMode;
232     LPDDHAL_FLIPTOGDISURFACE            FlipToGDISurface;
233 } DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS;
234
235 typedef struct _DDHAL_DESTROYSURFACEDATA        *LPDDHAL_DESTROYSURFACEDATA;
236 typedef struct _DDHAL_FLIPDATA                  *LPDDHAL_FLIPDATA;
237 typedef struct _DDHAL_SETCLIPLISTDATA           *LPDDHAL_SETCLIPLISTDATA;
238 typedef struct _DDHAL_LOCKDATA                  *LPDDHAL_LOCKDATA;
239 typedef struct _DDHAL_UNLOCKDATA                *LPDDHAL_UNLOCKDATA;
240 typedef struct _DDHAL_BLTDATA                   *LPDDHAL_BLTDATA;
241 typedef struct _DDHAL_SETCOLORKEYDATA           *LPDDHAL_SETCOLORKEYDATA;
242 typedef struct _DDHAL_ADDATTACHEDSURFACEDATA    *LPDDHAL_ADDATTACHEDSURFACEDATA;
243 typedef struct _DDHAL_GETBLTSTATUSDATA          *LPDDHAL_GETBLTSTATUSDATA;
244 typedef struct _DDHAL_GETFLIPSTATUSDATA         *LPDDHAL_GETFLIPSTATUSDATA;
245 typedef struct _DDHAL_UPDATEOVERLAYDATA         *LPDDHAL_UPDATEOVERLAYDATA;
246 typedef struct _DDHAL_SETOVERLAYPOSITIONDATA    *LPDDHAL_SETOVERLAYPOSITIONDATA;
247 typedef struct _DDHAL_SETPALETTEDATA            *LPDDHAL_SETPALETTEDATA;
248
249 typedef DWORD PASCAL (*LPDDHALSURFCB_DESTROYSURFACE)    (LPDDHAL_DESTROYSURFACEDATA);
250 typedef DWORD PASCAL (*LPDDHALSURFCB_FLIP)              (LPDDHAL_FLIPDATA);
251 typedef DWORD PASCAL (*LPDDHALSURFCB_SETCLIPLIST)       (LPDDHAL_SETCLIPLISTDATA);
252 typedef DWORD PASCAL (*LPDDHALSURFCB_LOCK)              (LPDDHAL_LOCKDATA);
253 typedef DWORD PASCAL (*LPDDHALSURFCB_UNLOCK)            (LPDDHAL_UNLOCKDATA);
254 typedef DWORD PASCAL (*LPDDHALSURFCB_BLT)               (LPDDHAL_BLTDATA);
255 typedef DWORD PASCAL (*LPDDHALSURFCB_SETCOLORKEY)       (LPDDHAL_SETCOLORKEYDATA);
256 typedef DWORD PASCAL (*LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA);
257 typedef DWORD PASCAL (*LPDDHALSURFCB_GETBLTSTATUS)      (LPDDHAL_GETBLTSTATUSDATA);
258 typedef DWORD PASCAL (*LPDDHALSURFCB_GETFLIPSTATUS)     (LPDDHAL_GETFLIPSTATUSDATA);
259 typedef DWORD PASCAL (*LPDDHALSURFCB_UPDATEOVERLAY)     (LPDDHAL_UPDATEOVERLAYDATA);
260 typedef DWORD PASCAL (*LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA);
261 typedef DWORD PASCAL (*LPDDHALSURFCB_SETPALETTE)        (LPDDHAL_SETPALETTEDATA);
262
263 typedef struct _DDHAL_DDSURFACECALLBACKS {
264     DWORD                               dwSize;
265     DWORD                               dwFlags;
266     LPDDHALSURFCB_DESTROYSURFACE        DestroySurface;
267     LPDDHALSURFCB_FLIP                  Flip;
268     LPDDHALSURFCB_SETCLIPLIST           SetClipList;
269     LPDDHALSURFCB_LOCK                  Lock;
270     LPDDHALSURFCB_UNLOCK                Unlock;
271     LPDDHALSURFCB_BLT                   Blt;
272     LPDDHALSURFCB_SETCOLORKEY           SetColorKey;
273     LPDDHALSURFCB_ADDATTACHEDSURFACE    AddAttachedSurface;
274     LPDDHALSURFCB_GETBLTSTATUS          GetBltStatus;
275     LPDDHALSURFCB_GETFLIPSTATUS         GetFlipStatus;
276     LPDDHALSURFCB_UPDATEOVERLAY         UpdateOverlay;
277     LPDDHALSURFCB_SETOVERLAYPOSITION    SetOverlayPosition;
278     LPVOID                              reserved4;
279     LPDDHALSURFCB_SETPALETTE            SetPalette;
280 } DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS;
281
282 typedef struct _DDHAL_DESTROYPALETTEDATA        *LPDDHAL_DESTROYPALETTEDATA;
283 typedef struct _DDHAL_SETENTRIESDATA            *LPDDHAL_SETENTRIESDATA;
284
285 typedef DWORD PASCAL (*LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA);
286 typedef DWORD PASCAL (*LPDDHALPALCB_SETENTRIES)    (LPDDHAL_SETENTRIESDATA);
287
288 typedef struct _DDHAL_DDPALETTECALLBACKS {
289     DWORD                               dwSize;
290     DWORD                               dwFlags;
291     LPDDHALPALCB_DESTROYPALETTE         DestroyPalette;
292     LPDDHALPALCB_SETENTRIES             SetEntries;
293 } DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS;
294
295 typedef DWORD PASCAL (*LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA );
296 typedef DWORD PASCAL (*LPDDHALEXEBUFCB_CREATEEXEBUF)   (LPDDHAL_CREATESURFACEDATA);
297 typedef DWORD PASCAL (*LPDDHALEXEBUFCB_DESTROYEXEBUF)  (LPDDHAL_DESTROYSURFACEDATA);
298 typedef DWORD PASCAL (*LPDDHALEXEBUFCB_LOCKEXEBUF)     (LPDDHAL_LOCKDATA);
299 typedef DWORD PASCAL (*LPDDHALEXEBUFCB_UNLOCKEXEBUF)   (LPDDHAL_UNLOCKDATA);
300
301 typedef struct _DDHAL_DDEXEBUFCALLBACKS {
302     DWORD                               dwSize;
303     DWORD                               dwFlags;
304     LPDDHALEXEBUFCB_CANCREATEEXEBUF     CanCreateExecuteBuffer;
305     LPDDHALEXEBUFCB_CREATEEXEBUF        CreateExecuteBuffer;
306     LPDDHALEXEBUFCB_DESTROYEXEBUF       DestroyExecuteBuffer;
307     LPDDHALEXEBUFCB_LOCKEXEBUF          LockExecuteBuffer;
308     LPDDHALEXEBUFCB_UNLOCKEXEBUF        UnlockExecuteBuffer;
309 } DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS;
310
311 /*****************************************************************************
312  * driver info structure
313  *
314  * The HAL is queried for additional callbacks via the GetDriverInfo callback.
315  */
316 typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;
317 typedef DWORD PASCAL (*LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);
318
319 typedef struct _DDHALINFO {
320     DWORD                       dwSize;
321     LPDDHAL_DDCALLBACKS         lpDDCallbacks;
322     LPDDHAL_DDSURFACECALLBACKS  lpDDSurfaceCallbacks;
323     LPDDHAL_DDPALETTECALLBACKS  lpDDPaletteCallbacks;
324     VIDMEMINFO                  vmiData;
325     DDCORECAPS                  ddCaps;
326     DWORD                       dwMonitorFrequency;
327     LPDDHAL_GETDRIVERINFO       GetDriverInfo;
328     DWORD                       dwModeIndex;
329     LPDWORD                     lpdwFourCC;
330     DWORD                       dwNumModes;
331     LPDDHALMODEINFO             lpModeInfo;
332     DWORD                       dwFlags;
333     LPVOID                      lpPDevice;
334     DWORD                       hInstance;
335     /* DirectX 2 */
336     ULONG_PTR                   lpD3DGlobalDriverData;
337     ULONG_PTR                   lpD3DHALCallbacks;
338     LPDDHAL_DDEXEBUFCALLBACKS   lpDDExeBufCallbacks;
339 } DDHALINFO;
340
341 #define DDHALINFO_ISPRIMARYDISPLAY      0x00000001
342 #define DDHALINFO_MODEXILLEGAL          0x00000002
343 #define DDHALINFO_GETDRIVERINFOSET      0x00000004
344
345 /*****************************************************************************
346  * parameter structures
347  */
348 typedef struct _DDHAL_DESTROYDRIVERDATA {
349     LPDDRAWI_DIRECTDRAW_GBL     lpDD;
350     HRESULT                     ddRVal;
351     LPDDHAL_DESTROYDRIVER       DestroyDriver;
352 } DDHAL_DESTROYDRIVERDATA;
353
354 typedef struct _DDHAL_SETMODEDATA {
355     LPDDRAWI_DIRECTDRAW_GBL     lpDD;
356     DWORD                       dwModeIndex;
357     HRESULT                     ddRVal;
358     LPDDHAL_SETMODE             SetMode;
359     BOOL                        inexcl;
360     BOOL                        useRefreshRate;
361 } DDHAL_SETMODEDATA;
362
363 typedef struct _DDHAL_GETDRIVERINFODATA {
364     DWORD       dwSize;
365     DWORD       dwFlags;
366     GUID        guidInfo;
367     DWORD       dwExpectedSize;
368     LPVOID      lpvData;
369     DWORD       dwActualSize;
370     HRESULT     ddRVal;
371     ULONG_PTR   dwContext;
372 } DDHAL_GETDRIVERINFODATA;
373
374 #ifdef __cplusplus
375 } /* extern "C" */
376 #endif
377
378 #endif /* __WINE_DDRAWI_H */