1 /* DirectDraw driver interface */
2 /* (DirectX 7 version) */
4 #ifndef __WINE_DDRAWI_H
5 #define __WINE_DDRAWI_H
12 #include "dciddi.h" /* the DD HAL is layered onto DCI escapes */
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
34 char szEntryPoint[64];
36 } DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;
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);
64 LPDDHAL_SETINFO lpSetInfo;
65 LPDDHAL_VIDMEMALLOC lpVidMemAlloc;
66 LPDDHAL_VIDMEMFREE lpVidMemFree;
67 } DDHALDDRAWFNS,*LPDDHALDDRAWFNS;
69 /*****************************************************************************
72 typedef struct _DDHALMODEINFO {
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 {
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 {
120 DWORD dwDisplayWidth;
121 DWORD dwDisplayHeight;
123 DDPIXELFORMAT ddpfDisplay;
124 DWORD dwOffscreenAlign;
125 DWORD dwOverlayAlign;
126 DWORD dwTextureAlign;
127 DWORD dwZBufferAlign;
131 } VIDMEMINFO,*LPVIDMEMINFO;
133 /*****************************************************************************
134 * core capabilities structure
136 typedef struct _DDCORECAPS {
145 DWORD dwAlphaBltConstBitDepths;
146 DWORD dwAlphaBltPixelBitDepths;
147 DWORD dwAlphaBltSurfaceBitDepths;
148 DWORD dwAlphaOverlayConstBitDepths;
149 DWORD dwAlphaOverlayPixelBitDepths;
150 DWORD dwAlphaOverlaySurfaceBitDepths;
151 DWORD dwZBufferBitDepths;
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];
164 DWORD dwMinOverlayStretch;
165 DWORD dwMaxOverlayStretch;
166 DWORD dwMinLiveVideoStretch;
167 DWORD dwMaxLiveVideoStretch;
168 DWORD dwMinHwCodecStretch;
169 DWORD dwMaxHwCodecStretch;
176 DWORD dwSVBRops[DD_ROP_SPACE];
180 DWORD dwVSBRops[DD_ROP_SPACE];
184 DWORD dwSSBRops[DD_ROP_SPACE];
185 DWORD dwMaxVideoPorts;
186 DWORD dwCurrVideoPorts;
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 {
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;
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 {
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;
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 {
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 {
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 {
321 LPDDHAL_DDCALLBACKS lpDDCallbacks;
322 LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks;
323 LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks;
326 DWORD dwMonitorFrequency;
327 LPDDHAL_GETDRIVERINFO GetDriverInfo;
331 LPDDHALMODEINFO lpModeInfo;
336 ULONG_PTR lpD3DGlobalDriverData;
337 ULONG_PTR lpD3DHALCallbacks;
338 LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks;
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;
351 LPDDHAL_DESTROYDRIVER DestroyDriver;
352 } DDHAL_DESTROYDRIVERDATA;
354 typedef struct _DDHAL_SETMODEDATA {
355 LPDDRAWI_DIRECTDRAW_GBL lpDD;
358 LPDDHAL_SETMODE SetMode;
363 typedef struct _DDHAL_GETDRIVERINFODATA {
367 DWORD dwExpectedSize;
372 } DDHAL_GETDRIVERINFODATA;
378 #endif /* __WINE_DDRAWI_H */