2 * Direct3D driver interface
5 * Copyright (C) 2001 Ove Kaaven
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
25 #include <_mingw_dxhelper.h>
33 /*****************************************************************************
34 * device info structures
36 typedef struct _D3DDeviceDesc_V1 {
39 D3DCOLORMODEL dcmColorModel;
41 D3DTRANSFORMCAPS dtcTransformCaps;
43 D3DLIGHTINGCAPS dlcLightingCaps;
44 D3DPRIMCAPS dpcLineCaps;
45 D3DPRIMCAPS dpcTriCaps;
46 DWORD dwDeviceRenderBitDepth;
47 DWORD dwDeviceZBufferBitDepth;
48 DWORD dwMaxBufferSize;
49 DWORD dwMaxVertexCount;
50 } D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1;
52 /* this is to allow keeping the bulk of our OpenGL code out of x11drv */
53 #define D3DDD_WINE_OPENGL_DEVICE 0x00008000
55 typedef struct _D3DHAL_GLOBALDRIVERDATA {
57 D3DDEVICEDESC_V1 hwCaps;
59 DWORD dwNumClipVertices;
60 DWORD dwNumTextureFormats;
61 LPDDSURFACEDESC lpTextureFormats;
62 } D3DHAL_GLOBALDRIVERDATA;
64 #ifndef D3DHAL_GLOBALDRIVERDATA_DEFINED
65 typedef D3DHAL_GLOBALDRIVERDATA *LPD3DHAL_GLOBALDRIVERDATA;
66 #define D3DHAL_GLOBALDRIVERDATA_DEFINED
69 typedef struct _D3DHAL_D3DEXTENDEDCAPS {
72 DWORD dwMinTextureWidth, dwMaxTextureWidth;
73 DWORD dwMinTextureHeight, dwMaxTextureHeight;
74 DWORD dwMinStippleWidth, dwMaxStippleWidth;
75 DWORD dwMinStippleHeight, dwMaxStippleHeight;
77 DWORD dwMaxTextureRepeat;
78 DWORD dwMaxTextureAspectRatio;
79 DWORD dwMaxAnisotropy;
80 D3DVALUE dvGuardBandLeft;
81 D3DVALUE dvGuardBandTop;
82 D3DVALUE dvGuardBandRight;
83 D3DVALUE dvGuardBandBottom;
84 D3DVALUE dvExtentsAdjust;
87 DWORD dwTextureOpCaps;
88 WORD wMaxTextureBlendStages;
89 WORD wMaxSimultaneousTextures;
91 DWORD dwMaxActiveLights;
92 D3DVALUE dvMaxVertexW;
93 WORD wMaxUserClipPlanes;
94 WORD wMaxVertexBlendMatrices;
95 DWORD dwVertexProcessingCaps;
100 } D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS;
102 /*****************************************************************************
103 * d3d->driver callbacks
105 typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA;
106 typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA;
107 typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA;
108 typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA;
109 typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA;
110 typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA;
111 typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA;
112 typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA;
113 typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA;
114 typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA;
115 typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA;
117 typedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB) (LPD3DHAL_CONTEXTCREATEDATA);
118 typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB) (LPD3DHAL_CONTEXTDESTROYDATA);
119 typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA);
120 typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA);
121 typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA);
122 typedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB) (LPD3DHAL_RENDERPRIMITIVEDATA);
123 typedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB) (LPD3DHAL_TEXTURECREATEDATA);
124 typedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB) (LPD3DHAL_TEXTUREDESTROYDATA);
125 typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA);
126 typedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB) (LPD3DHAL_TEXTUREGETSURFDATA);
127 typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA);
129 typedef struct _D3DHAL_CALLBACKS {
131 LPD3DHAL_CONTEXTCREATECB ContextCreate;
132 LPD3DHAL_CONTEXTDESTROYCB ContextDestroy;
133 LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll;
134 LPD3DHAL_SCENECAPTURECB SceneCapture;
137 LPD3DHAL_RENDERSTATECB RenderState;
138 LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive;
140 LPD3DHAL_TEXTURECREATECB TextureCreate;
141 LPD3DHAL_TEXTUREDESTROYCB TextureDestroy;
142 LPD3DHAL_TEXTURESWAPCB TextureSwap;
143 LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf;
144 /* now why did MS create CALLBACKS2 and CALLBACKS3 structures if
145 * all these reserved fields were available? we may never know */
156 LPD3DHAL_GETSTATECB GetState;
169 #ifndef D3DHAL_CALLBACKS_DEFINED
170 typedef D3DHAL_CALLBACKS *LPD3DHAL_CALLBACKS;
171 #define D3DHAL_CALLBACKS_DEFINED
174 typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA;
175 typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA;
176 typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA;
177 typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA;
178 typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA;
180 typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA);
181 typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA);
182 typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA);
183 typedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA);
184 typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA);
186 typedef struct _D3DHAL_CALLBACKS2 {
189 LPD3DHAL_SETRENDERTARGETCB SetRenderTarget;
190 LPD3DHAL_CLEARCB Clear;
191 LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive;
192 LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive;
193 LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives;
194 } D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2;
196 typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA;
197 typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA;
198 typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA;
200 typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA);
201 typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA);
202 typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA);
204 typedef struct _D3DHAL_CALLBACKS3 {
207 LPD3DHAL_CLEAR2CB Clear2;
209 LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState;
210 LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2;
211 } D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3;
213 /*****************************************************************************
214 * parameter structures
216 typedef struct _D3DHAL_CONTEXTCREATEDATA {
218 LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */
219 LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */
222 LPDIRECTDRAWSURFACE lpDDS;
223 LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */
226 LPDIRECTDRAWSURFACE lpDDSZ;
227 LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */
233 ULONG_PTR dwhContext;
235 } D3DHAL_CONTEXTCREATEDATA;
237 typedef struct _D3DHAL_CONTEXTDESTROYDATA {
238 ULONG_PTR dwhContext;
240 } D3DHAL_CONTEXTDESTROYDATA;
242 typedef struct _D3DHAL_CONTEXTDESTROYALLDATA {
245 } D3DHAL_CONTEXTDESTROYALLDATA;
247 typedef struct _D3DHAL_SCENECAPTUREDATA {
248 ULONG_PTR dwhContext;
251 } D3DHAL_SCENECAPTUREDATA;
253 #define D3DHAL_SCENE_CAPTURE_START 0x00000000
254 #define D3DHAL_SCENE_CAPTURE_END 0x00000001
256 typedef struct _D3DHAL_SETRENDERTARGETDATA {
257 ULONG_PTR dwhContext;
259 LPDIRECTDRAWSURFACE lpDDS;
260 LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl;
263 LPDIRECTDRAWSURFACE lpDDSZ;
264 LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl;
267 } D3DHAL_SETRENDERTARGETDATA;
269 typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
270 ULONG_PTR dwhContext;
273 LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
274 DWORD dwCommandOffset;
275 DWORD dwCommandLength;
277 LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
280 DWORD dwVertexOffset;
281 DWORD dwVertexLength;
282 DWORD dwReqVertexBufSize;
283 DWORD dwReqCommandBufSize;
290 } D3DHAL_DRAWPRIMITIVES2DATA;
292 #define D3DHALDP2_USERMEMVERTICES 0x00000001
293 #define D3DHALDP2_EXECUTEBUFFER 0x00000002
294 #define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004
295 #define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008
296 #define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010
297 #define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020
298 #define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040
299 #define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080
301 /*****************************************************************************
302 * DrawPrimitives2 command structures
304 typedef struct _D3DHAL_DP2COMMAND {
308 WORD wPrimitiveCount;
311 } D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND;
313 typedef enum _D3DHAL_DP2OPERATION {
315 D3DDP2OP_INDEXEDLINELIST = 2,
316 D3DDP2OP_INDEXEDTRIANGLELIST = 3,
317 D3DDP2OP_RENDERSTATE = 8,
318 D3DDP2OP_LINELIST = 15,
319 D3DDP2OP_LINESTRIP = 16,
320 D3DDP2OP_INDEXEDLINESTRIP = 17,
321 D3DDP2OP_TRIANGLELIST = 18,
322 D3DDP2OP_TRIANGLESTRIP = 19,
323 D3DDP2OP_INDEXEDTRIANGLESTRIP = 20,
324 D3DDP2OP_TRIANGLEFAN = 21,
325 D3DDP2OP_INDEXEDTRIANGLEFAN = 22,
326 D3DDP2OP_TRIANGLEFAN_IMM = 23,
327 D3DDP2OP_LINELIST_IMM = 24,
328 D3DDP2OP_TEXTURESTAGESTATE = 25,
329 D3DDP2OP_INDEXEDTRIANGLELIST2 = 26,
330 D3DDP2OP_INDEXEDLINELIST2 = 27,
331 D3DDP2OP_VIEWPORTINFO = 28,
333 /* pre-DirectX 7 interfaces */
334 D3DDP2OP_SETPALETTE = 30,
335 D3DDP2OP_UPDATEPALETTE = 31,
336 /* DirectX 7 interfaces */
337 D3DDP2OP_ZRANGE = 32,
338 D3DDP2OP_SETMATERIAL = 33,
339 D3DDP2OP_SETLIGHT = 34,
340 D3DDP2OP_CREATELIGHT = 35,
341 D3DDP2OP_SETTRANSFORM = 36,
342 D3DDP2OP_TEXBLT = 38,
343 D3DDP2OP_STATESET = 39,
344 D3DDP2OP_SETPRIORITY = 40,
346 D3DDP2OP_SETRENDERTARGET = 41,
348 /* DirectX 7 interfaces */
349 D3DDP2OP_SETTEXLOD = 43,
350 D3DPP2OP_SETCLIPPLANE = 44,
351 } D3DHAL_DP2OPERATION;
353 /* point primitives */
355 typedef struct _D3DHAL_POINTS {
358 } D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS;
360 /* line primitives */
362 typedef struct _D3DHAL_DP2STARTVERTEX {
364 } D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX;
366 typedef struct _D3DHAL_DP2LINELIST {
368 } D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST;
370 typedef struct _D3DHAL_DP2INDEXEDLINELIST {
373 } D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST;
375 typedef struct _D3DHAL_DP2LINESTRIP {
377 } D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP;
379 typedef struct _D3DHAL_DP2INDEXEDLINESTRIP {
381 } D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP;
383 /* triangle primitives */
385 typedef struct _D3DHAL_DP2TRIANGLELIST {
387 } D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST;
389 typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST {
394 } D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST;
396 typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 {
400 } D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2;
402 typedef struct _D3DHAL_DP2TRIANGLESTRIP {
404 } D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP;
406 typedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP {
408 } D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP;
410 typedef struct _D3DHAL_DP2TRIANGLEFAN {
412 } D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN;
414 typedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN {
416 } D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN;
418 typedef struct _D3DHAL_DP2TRIANGLEFAN_IMM {
420 } D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM;
423 typedef struct _D3DHAL_DP2RENDERSTATE {
424 D3DRENDERSTATETYPE RenderState;
429 } D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE;
431 typedef struct _D3DHAL_DP2TEXTURESTAGESTATE {
435 } D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE;
437 #define D3DTSS_TEXTUREMAP 0
439 typedef struct _D3DHAL_DP2VIEWPORTINFO {
444 } D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO;
446 typedef struct _D3DHAL_DP2WINFO {
449 } D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO;
451 typedef struct _D3DHAL_DP2SETPALETTE {
452 DWORD dwPaletteHandle;
453 DWORD dwPaletteFlags;
454 DWORD dwSurfaceHandle;
455 } D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE;
457 typedef struct _D3DHAL_DP2UPDATEPALETTE {
458 DWORD dwPaletteHandle;
461 } D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE;
463 typedef struct _D3DHAL_DP2ZRANGE {
466 } D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE;
468 typedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL;
470 typedef struct _D3DHAL_DP2SETLIGHT {
473 } D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT;
475 #define D3DHAL_SETLIGHT_ENABLE 0
476 #define D3DHAL_SETLIGHT_DISABLE 1
477 #define D3DHAL_SETLIGHT_DATA 2
479 typedef struct _D3DHAL_DP2CREATELIGHT {
481 } D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT;
483 typedef struct _D3DHAL_DP2SETTRANSFORM {
484 D3DTRANSFORMSTATETYPE xfrmType;
486 } D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM;
488 typedef struct _D3DHAL_DP2TEXBLT {
489 DWORD dwDDDestSurface;
490 DWORD dwDDSrcSurface;
494 } D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT;
496 typedef struct _D3DHAL_DP2STATESET {
499 D3DSTATEBLOCKTYPE sbType;
500 } D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET;
502 #define D3DHAL_STATESETBEGIN 0
503 #define D3DHAL_STATESETEND 1
504 #define D3DHAL_STATESETDELETE 2
505 #define D3DHAL_STATESETEXECUTE 3
506 #define D3DHAL_STATESETCAPTURE 4
508 typedef struct _D3DHAL_DP2SETPRIORITY {
511 } D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY;
513 typedef struct _D3DHAL_DP2SETRENDERTARGET {
516 } D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET;
518 typedef struct _D3DHAL_DP2CLEAR {
521 D3DVALUE dvFillDepth;
524 } D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR;
526 typedef struct _D3DHAL_DP2SETTEXLOD {
529 } D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD;
535 #endif /* _D3DHAL_H_ */