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 */