Added support for nested server waits (to allow waiting in signal
[wine/multimedia.git] / include / ddrawi.h
blob870aa133f1c97e1fa7fefb8c5747e9d639d037b9
1 /* DirectDraw driver interface */
2 /* (DirectX 7 version) */
4 #ifndef __WINE_DDRAWI_H
5 #define __WINE_DDRAWI_H
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
11 #include "ddraw.h"
12 #include "dciddi.h" /* the DD HAL is layered onto DCI escapes */
14 #define DDAPI WINAPI
16 /* the DirectDraw versions */
17 #define DD_VERSION 0x0200 /* compatibility version */
18 #define DD_RUNTIME_VERSION 0x0700 /* actual version */
20 /* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
21 #define DD_HAL_VERSION 0x0100
23 /* more DCICOMMAND escapes */
24 #define DDCREATEDRIVEROBJECT 10
25 #define DDGET32BITDRIVERNAME 11
26 #define DDNEWCALLBACKFNS 12
27 #define DDVERSIONINFO 13
29 /*****************************************************************************
30 * Initialization stuff
32 typedef struct {
33 char szName[260];
34 char szEntryPoint[64];
35 DWORD dwContext;
36 } DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;
38 typedef struct {
39 DWORD dwHALVersion;
40 ULONG_PTR dwReserved1;
41 ULONG_PTR dwReserved2;
42 } DDVERSIONDATA,*LPDDVERSIONDATA;
44 typedef DWORD PASCAL (*LPDD32BITDRIVERINIT)(DWORD dwContext);
46 /* pointer to video memory */
47 typedef ULONG_PTR FLATPTR;
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;
55 /*****************************************************************************
56 * driver->ddraw callbacks
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);
62 typedef struct {
63 DWORD dwSize;
64 LPDDHAL_SETINFO lpSetInfo;
65 LPDDHAL_VIDMEMALLOC lpVidMemAlloc;
66 LPDDHAL_VIDMEMFREE lpVidMemFree;
67 } DDHALDDRAWFNS,*LPDDHALDDRAWFNS;
69 /*****************************************************************************
70 * mode info structure
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;
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
92 /*****************************************************************************
93 * video memory info structure
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;
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
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;
133 /*****************************************************************************
134 * core capabilities structure
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;
190 /*****************************************************************************
191 * ddraw->driver callbacks
193 #define DDHAL_DRIVER_NOTHANDLED 0
194 #define DDHAL_DRIVER_HANDLED 1
195 #define DDHAL_DRIVER_NOCKEYHW 2
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;
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);
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;
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;
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);
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;
282 typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA;
283 typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA;
285 typedef DWORD PASCAL (*LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA);
286 typedef DWORD PASCAL (*LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA);
288 typedef struct _DDHAL_DDPALETTECALLBACKS {
289 DWORD dwSize;
290 DWORD dwFlags;
291 LPDDHALPALCB_DESTROYPALETTE DestroyPalette;
292 LPDDHALPALCB_SETENTRIES SetEntries;
293 } DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS;
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);
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;
311 /*****************************************************************************
312 * driver info structure
314 * The HAL is queried for additional callbacks via the GetDriverInfo callback.
316 typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;
317 typedef DWORD PASCAL (*LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);
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;
341 #define DDHALINFO_ISPRIMARYDISPLAY 0x00000001
342 #define DDHALINFO_MODEXILLEGAL 0x00000002
343 #define DDHALINFO_GETDRIVERINFOSET 0x00000004
345 /*****************************************************************************
346 * parameter structures
348 typedef struct _DDHAL_DESTROYDRIVERDATA {
349 LPDDRAWI_DIRECTDRAW_GBL lpDD;
350 HRESULT ddRVal;
351 LPDDHAL_DESTROYDRIVER DestroyDriver;
352 } DDHAL_DESTROYDRIVERDATA;
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;
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;
374 #ifdef __cplusplus
375 } /* extern "C" */
376 #endif
378 #endif /* __WINE_DDRAWI_H */