Merge trunk HEAD (r44067)
[reactos.git] / reactos / include / ddk / d3dhal.h
1 /*
2 * Direct3D driver interface
3 * (DirectX 7 version)
4 *
5 * Copyright (C) 2001 Ove Kaaven
6 *
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.
11 *
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.
16 *
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 Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 #ifndef _D3DHAL_H_
23 #define _D3DHAL_H_
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 #include <ddraw.h>
30 #include <d3dtypes.h>
31 #include <d3dcaps.h>
32 #include <d3d.h>
33
34 #if (DIRECT3D_VERSION >= 0x0900)
35 #include <d3d9.h>
36 #endif
37
38 #ifndef DDRAWI_DIRECTDRAW_DEFINED
39 typedef struct _DDRAWI_DIRECTDRAW_GBL FAR *LPDDRAWI_DIRECTDRAW_GBL;
40 typedef struct _DDRAWI_DIRECTDRAW_LCL FAR *LPDDRAWI_DIRECTDRAW_LCL;
41 #define DDRAWI_DIRECTDRAW_DEFINED
42 #endif
43
44 #ifndef DDRAWI_DDRAWSURFACE_DEFINED
45 typedef struct _DDRAWI_DDRAWSURFACE_LCL FAR *LPDDRAWI_DDRAWSURFACE_LCL;
46 #define DDRAWI_DDRAWSURFACE_DEFINED
47 #endif
48
49 #define D3DERR_COMMAND_UNPARSED 0x88760BB8;
50
51 /*****************************************************************************
52 * device info structures
53 */
54 typedef struct _D3DDeviceDesc_V1 {
55 DWORD dwSize;
56 DWORD dwFlags;
57 D3DCOLORMODEL dcmColorModel;
58 DWORD dwDevCaps;
59 D3DTRANSFORMCAPS dtcTransformCaps;
60 BOOL bClipping;
61 D3DLIGHTINGCAPS dlcLightingCaps;
62 D3DPRIMCAPS dpcLineCaps;
63 D3DPRIMCAPS dpcTriCaps;
64 DWORD dwDeviceRenderBitDepth;
65 DWORD dwDeviceZBufferBitDepth;
66 DWORD dwMaxBufferSize;
67 DWORD dwMaxVertexCount;
68 } D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1;
69
70 /* this is to allow keeping the bulk of our OpenGL code out of x11drv */
71 #define D3DDD_WINE_OPENGL_DEVICE 0x00008000
72
73 typedef struct _D3DHAL_GLOBALDRIVERDATA {
74 DWORD dwSize;
75 D3DDEVICEDESC_V1 hwCaps;
76 DWORD dwNumVertices;
77 DWORD dwNumClipVertices;
78 DWORD dwNumTextureFormats;
79 LPDDSURFACEDESC lpTextureFormats;
80 } D3DHAL_GLOBALDRIVERDATA;
81
82 #ifndef D3DHAL_GLOBALDRIVERDATA_DEFINED
83 typedef D3DHAL_GLOBALDRIVERDATA *LPD3DHAL_GLOBALDRIVERDATA;
84 #define D3DHAL_GLOBALDRIVERDATA_DEFINED
85 #endif
86
87 typedef struct _D3DHAL_D3DEXTENDEDCAPS {
88 DWORD dwSize;
89 /* DirectX 5 */
90 DWORD dwMinTextureWidth, dwMaxTextureWidth;
91 DWORD dwMinTextureHeight, dwMaxTextureHeight;
92 DWORD dwMinStippleWidth, dwMaxStippleWidth;
93 DWORD dwMinStippleHeight, dwMaxStippleHeight;
94 /* DirectX 6 */
95 DWORD dwMaxTextureRepeat;
96 DWORD dwMaxTextureAspectRatio;
97 DWORD dwMaxAnisotropy;
98 D3DVALUE dvGuardBandLeft;
99 D3DVALUE dvGuardBandTop;
100 D3DVALUE dvGuardBandRight;
101 D3DVALUE dvGuardBandBottom;
102 D3DVALUE dvExtentsAdjust;
103 DWORD dwStencilCaps;
104 DWORD dwFVFCaps;
105 DWORD dwTextureOpCaps;
106 WORD wMaxTextureBlendStages;
107 WORD wMaxSimultaneousTextures;
108 /* DirectX 7 */
109 DWORD dwMaxActiveLights;
110 D3DVALUE dvMaxVertexW;
111 WORD wMaxUserClipPlanes;
112 WORD wMaxVertexBlendMatrices;
113 DWORD dwVertexProcessingCaps;
114 DWORD dwReserved1;
115 DWORD dwReserved2;
116 DWORD dwReserved3;
117 DWORD dwReserved4;
118 } D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS;
119
120 /*****************************************************************************
121 * d3d->driver callbacks
122 */
123 typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA;
124 typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA;
125 typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA;
126 typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA;
127 typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA;
128 typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA;
129 typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA;
130 typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA;
131 typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA;
132 typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA;
133 typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA;
134
135 typedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB) (LPD3DHAL_CONTEXTCREATEDATA);
136 typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB) (LPD3DHAL_CONTEXTDESTROYDATA);
137 typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA);
138 typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA);
139 typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA);
140 typedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB) (LPD3DHAL_RENDERPRIMITIVEDATA);
141 typedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB) (LPD3DHAL_TEXTURECREATEDATA);
142 typedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB) (LPD3DHAL_TEXTUREDESTROYDATA);
143 typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA);
144 typedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB) (LPD3DHAL_TEXTUREGETSURFDATA);
145 typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA);
146
147 typedef struct _D3DHAL_CALLBACKS {
148 DWORD dwSize;
149 LPD3DHAL_CONTEXTCREATECB ContextCreate;
150 LPD3DHAL_CONTEXTDESTROYCB ContextDestroy;
151 LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll;
152 LPD3DHAL_SCENECAPTURECB SceneCapture;
153 LPVOID lpReserved10;
154 LPVOID lpReserved11;
155 LPD3DHAL_RENDERSTATECB RenderState;
156 LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive;
157 DWORD dwReserved;
158 LPD3DHAL_TEXTURECREATECB TextureCreate;
159 LPD3DHAL_TEXTUREDESTROYCB TextureDestroy;
160 LPD3DHAL_TEXTURESWAPCB TextureSwap;
161 LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf;
162 /* now why did MS create CALLBACKS2 and CALLBACKS3 structures if
163 * all these reserved fields were available? we may never know */
164 LPVOID lpReserved12;
165 LPVOID lpReserved13;
166 LPVOID lpReserved14;
167 LPVOID lpReserved15;
168 LPVOID lpReserved16;
169 LPVOID lpReserved17;
170 LPVOID lpReserved18;
171 LPVOID lpReserved19;
172 LPVOID lpReserved20;
173 LPVOID lpReserved21;
174 LPD3DHAL_GETSTATECB GetState;
175 DWORD dwReserved0;
176 DWORD dwReserved1;
177 DWORD dwReserved2;
178 DWORD dwReserved3;
179 DWORD dwReserved4;
180 DWORD dwReserved5;
181 DWORD dwReserved6;
182 DWORD dwReserved7;
183 DWORD dwReserved8;
184 DWORD dwReserved9;
185 } D3DHAL_CALLBACKS;
186
187 #ifndef D3DHAL_CALLBACKS_DEFINED
188 typedef D3DHAL_CALLBACKS *LPD3DHAL_CALLBACKS;
189 #define D3DHAL_CALLBACKS_DEFINED
190 #endif
191
192 typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA;
193 typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA;
194 typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA;
195 typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA;
196 typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA;
197
198 typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA);
199 typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA);
200 typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA);
201 typedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA);
202 typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA);
203
204 typedef struct _D3DHAL_CALLBACKS2 {
205 DWORD dwSize;
206 DWORD dwFlags;
207 LPD3DHAL_SETRENDERTARGETCB SetRenderTarget;
208 LPD3DHAL_CLEARCB Clear;
209 LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive;
210 LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive;
211 LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives;
212 } D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2;
213
214 typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA;
215 typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA;
216 typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA;
217
218 typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA);
219 typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA);
220 typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA);
221
222 typedef struct _D3DHAL_CALLBACKS3 {
223 DWORD dwSize;
224 DWORD dwFlags;
225 LPD3DHAL_CLEAR2CB Clear2;
226 LPVOID lpvReserved;
227 LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState;
228 LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2;
229 } D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3;
230
231 /*****************************************************************************
232 * parameter structures
233 */
234 typedef struct _D3DHAL_CONTEXTCREATEDATA {
235 union {
236 LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */
237 LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */
238 } DUMMYUNIONNAME1;
239 union {
240 LPDIRECTDRAWSURFACE lpDDS;
241 LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */
242 } DUMMYUNIONNAME2;
243 union {
244 LPDIRECTDRAWSURFACE lpDDSZ;
245 LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */
246 } DUMMYUNIONNAME3;
247 union {
248 DWORD dwPID;
249 ULONG_PTR dwrstates;
250 } DUMMYUNIONNAME4;
251 ULONG_PTR dwhContext;
252 HRESULT ddrval;
253 } D3DHAL_CONTEXTCREATEDATA;
254
255 typedef struct _D3DHAL_CONTEXTDESTROYDATA {
256 ULONG_PTR dwhContext;
257 HRESULT ddrval;
258 } D3DHAL_CONTEXTDESTROYDATA;
259
260 typedef struct _D3DHAL_CONTEXTDESTROYALLDATA {
261 DWORD dwPID;
262 HRESULT ddrval;
263 } D3DHAL_CONTEXTDESTROYALLDATA;
264
265 typedef struct _D3DHAL_SCENECAPTUREDATA {
266 ULONG_PTR dwhContext;
267 DWORD dwFlag;
268 HRESULT ddrval;
269 } D3DHAL_SCENECAPTUREDATA;
270
271 #define D3DHAL_SCENE_CAPTURE_START 0x00000000
272 #define D3DHAL_SCENE_CAPTURE_END 0x00000001
273
274 typedef struct _D3DHAL_SETRENDERTARGETDATA {
275 ULONG_PTR dwhContext;
276 union {
277 LPDIRECTDRAWSURFACE lpDDS;
278 LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl;
279 } DUMMYUNIONNAME1;
280 union {
281 LPDIRECTDRAWSURFACE lpDDSZ;
282 LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl;
283 } DUMMYUNIONNAME2;
284 HRESULT ddrval;
285 } D3DHAL_SETRENDERTARGETDATA;
286
287 typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
288 ULONG_PTR dwhContext;
289 DWORD dwFlags;
290 DWORD dwVertexType;
291 LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
292 DWORD dwCommandOffset;
293 DWORD dwCommandLength;
294 union {
295 LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
296 LPVOID lpVertices;
297 } DUMMYUNIONNAME1;
298 DWORD dwVertexOffset;
299 DWORD dwVertexLength;
300 DWORD dwReqVertexBufSize;
301 DWORD dwReqCommandBufSize;
302 LPDWORD lpdwRStates;
303 union {
304 DWORD dwVertexSize;
305 HRESULT ddrval;
306 } DUMMYUNIONNAME2;
307 DWORD dwErrorOffset;
308 } D3DHAL_DRAWPRIMITIVES2DATA;
309
310 #define D3DHALDP2_USERMEMVERTICES 0x00000001
311 #define D3DHALDP2_EXECUTEBUFFER 0x00000002
312 #define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004
313 #define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008
314 #define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010
315 #define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020
316 #define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040
317 #define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080
318
319 /*****************************************************************************
320 * DrawPrimitives2 command structures
321 */
322 typedef struct _D3DHAL_DP2COMMAND {
323 BYTE bCommand;
324 BYTE bReserved;
325 union {
326 WORD wPrimitiveCount;
327 WORD wStateCount;
328 } DUMMYUNIONNAME;
329 } D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND;
330
331 typedef enum _D3DHAL_DP2OPERATION {
332 D3DDP2OP_POINTS = 1,
333 D3DDP2OP_INDEXEDLINELIST = 2,
334 D3DDP2OP_INDEXEDTRIANGLELIST = 3,
335 D3DDP2OP_RENDERSTATE = 8,
336 D3DDP2OP_LINELIST = 15,
337 D3DDP2OP_LINESTRIP = 16,
338 D3DDP2OP_INDEXEDLINESTRIP = 17,
339 D3DDP2OP_TRIANGLELIST = 18,
340 D3DDP2OP_TRIANGLESTRIP = 19,
341 D3DDP2OP_INDEXEDTRIANGLESTRIP = 20,
342 D3DDP2OP_TRIANGLEFAN = 21,
343 D3DDP2OP_INDEXEDTRIANGLEFAN = 22,
344 D3DDP2OP_TRIANGLEFAN_IMM = 23,
345 D3DDP2OP_LINELIST_IMM = 24,
346 D3DDP2OP_TEXTURESTAGESTATE = 25,
347 D3DDP2OP_INDEXEDTRIANGLELIST2 = 26,
348 D3DDP2OP_INDEXEDLINELIST2 = 27,
349 D3DDP2OP_VIEWPORTINFO = 28,
350 D3DDP2OP_WINFO = 29,
351 /* pre-DirectX 7 interfaces */
352 D3DDP2OP_SETPALETTE = 30,
353 D3DDP2OP_UPDATEPALETTE = 31,
354 /* DirectX 7 interfaces */
355 D3DDP2OP_ZRANGE = 32,
356 D3DDP2OP_SETMATERIAL = 33,
357 D3DDP2OP_SETLIGHT = 34,
358 D3DDP2OP_CREATELIGHT = 35,
359 D3DDP2OP_SETTRANSFORM = 36,
360 D3DDP2OP_TEXBLT = 38,
361 D3DDP2OP_STATESET = 39,
362 D3DDP2OP_SETPRIORITY = 40,
363 /* all interfaces */
364 D3DDP2OP_SETRENDERTARGET = 41,
365 D3DDP2OP_CLEAR = 42,
366 /* DirectX 7 interfaces */
367 D3DDP2OP_SETTEXLOD = 43,
368 D3DPP2OP_SETCLIPPLANE = 44,
369 #if(DIRECT3D_VERSION >= 0x0800)
370 D3DDP2OP_CREATEVERTEXSHADER = 45,
371 D3DDP2OP_DELETEVERTEXSHADER = 46,
372 D3DDP2OP_SETVERTEXSHADER = 47,
373 D3DDP2OP_SETVERTEXSHADERCONST = 48,
374 D3DDP2OP_SETSTREAMSOURCE = 49,
375 D3DDP2OP_SETSTREAMSOURCEUM = 50,
376 D3DDP2OP_SETINDICES = 51,
377 D3DDP2OP_DRAWPRIMITIVE = 52,
378 D3DDP2OP_DRAWINDEXEDPRIMITIVE = 53,
379 D3DDP2OP_CREATEPIXELSHADER = 54,
380 D3DDP2OP_DELETEPIXELSHADER = 55,
381 D3DDP2OP_SETPIXELSHADER = 56,
382 D3DDP2OP_SETPIXELSHADERCONST = 57,
383 D3DDP2OP_CLIPPEDTRIANGLEFAN = 58,
384 D3DDP2OP_DRAWPRIMITIVE2 = 59,
385 D3DDP2OP_DRAWINDEXEDPRIMITIVE2= 60,
386 D3DDP2OP_DRAWRECTPATCH = 61,
387 D3DDP2OP_DRAWTRIPATCH = 62,
388 D3DDP2OP_VOLUMEBLT = 63,
389 D3DDP2OP_BUFFERBLT = 64,
390 D3DDP2OP_MULTIPLYTRANSFORM = 65,
391 D3DDP2OP_ADDDIRTYRECT = 66,
392 D3DDP2OP_ADDDIRTYBOX = 67,
393 #endif
394 #if(DIRECT3D_VERSION >= 0x0900)
395 D3DDP2OP_CREATEVERTEXSHADERDECL = 71,
396 D3DDP2OP_DELETEVERTEXSHADERDECL = 72,
397 D3DDP2OP_SETVERTEXSHADERDECL = 73,
398 D3DDP2OP_CREATEVERTEXSHADERFUNC = 74,
399 D3DDP2OP_DELETEVERTEXSHADERFUNC = 75,
400 D3DDP2OP_SETVERTEXSHADERFUNC = 76,
401 D3DDP2OP_SETVERTEXSHADERCONSTI = 77,
402 D3DDP2OP_SETSCISSORRECT = 79,
403 D3DDP2OP_SETSTREAMSOURCE2 = 80,
404 D3DDP2OP_BLT = 81,
405 D3DDP2OP_COLORFILL = 82,
406 D3DDP2OP_SETVERTEXSHADERCONSTB = 83,
407 D3DDP2OP_CREATEQUERY = 84,
408 D3DDP2OP_SETRENDERTARGET2 = 85,
409 D3DDP2OP_SETDEPTHSTENCIL = 86,
410 D3DDP2OP_RESPONSECONTINUE = 87,
411 D3DDP2OP_RESPONSEQUERY = 88,
412 D3DDP2OP_GENERATEMIPSUBLEVELS = 89,
413 D3DDP2OP_DELETEQUERY = 90,
414 D3DDP2OP_ISSUEQUERY = 91,
415 D3DDP2OP_SETPIXELSHADERCONSTI = 93,
416 D3DDP2OP_SETPIXELSHADERCONSTB = 94,
417 D3DDP2OP_SETSTREAMSOURCEFREQ = 95,
418 D3DDP2OP_SURFACEBLT = 96
419 #endif
420 } D3DHAL_DP2OPERATION;
421
422 /* point primitives */
423
424 typedef struct _D3DHAL_POINTS {
425 WORD wCount;
426 WORD wVStart;
427 } D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS;
428
429 /* line primitives */
430
431 typedef struct _D3DHAL_DP2STARTVERTEX {
432 WORD wVStart;
433 } D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX;
434
435 typedef struct _D3DHAL_DP2LINELIST {
436 WORD wVStart;
437 } D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST;
438
439 typedef struct _D3DHAL_DP2INDEXEDLINELIST {
440 WORD wV1;
441 WORD wV2;
442 } D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST;
443
444 typedef struct _D3DHAL_DP2LINESTRIP {
445 WORD wVStart;
446 } D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP;
447
448 typedef struct _D3DHAL_DP2INDEXEDLINESTRIP {
449 WORD wV[2];
450 } D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP;
451
452 /* triangle primitives */
453
454 typedef struct _D3DHAL_DP2TRIANGLELIST {
455 WORD wVStart;
456 } D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST;
457
458 typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST {
459 WORD wV1;
460 WORD wV2;
461 WORD wV3;
462 WORD wFlags;
463 } D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST;
464
465 typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 {
466 WORD wV1;
467 WORD wV2;
468 WORD wV3;
469 } D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2;
470
471 typedef struct _D3DHAL_DP2TRIANGLESTRIP {
472 WORD wVStart;
473 } D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP;
474
475 typedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP {
476 WORD wV[3];
477 } D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP;
478
479 typedef struct _D3DHAL_DP2TRIANGLEFAN {
480 WORD wVStart;
481 } D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN;
482
483 typedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN {
484 WORD wV[3];
485 } D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN;
486
487 typedef struct _D3DHAL_DP2TRIANGLEFAN_IMM {
488 DWORD dwEdgeFlags;
489 } D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM;
490
491 /* render states */
492 typedef struct _D3DHAL_DP2RENDERSTATE {
493 D3DRENDERSTATETYPE RenderState;
494 union {
495 D3DVALUE dvState;
496 DWORD dwState;
497 } DUMMYUNIONNAME;
498 } D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE;
499
500 typedef struct _D3DHAL_DP2TEXTURESTAGESTATE {
501 WORD wStage;
502 WORD TSState;
503 DWORD dwValue;
504 } D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE;
505
506 #define D3DTSS_TEXTUREMAP 0
507
508 typedef struct _D3DHAL_DP2VIEWPORTINFO {
509 DWORD dwX;
510 DWORD dwY;
511 DWORD dwWidth;
512 DWORD dwHeight;
513 } D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO;
514
515 typedef struct _D3DHAL_DP2WINFO {
516 D3DVALUE dwWNear;
517 D3DVALUE dwWFar;
518 } D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO;
519
520 typedef struct _D3DHAL_DP2SETPALETTE {
521 DWORD dwPaletteHandle;
522 DWORD dwPaletteFlags;
523 DWORD dwSurfaceHandle;
524 } D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE;
525
526 typedef struct _D3DHAL_DP2UPDATEPALETTE {
527 DWORD dwPaletteHandle;
528 WORD wStartIndex;
529 WORD wNumEntries;
530 } D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE;
531
532 typedef struct _D3DHAL_DP2ZRANGE {
533 D3DVALUE dvMinZ;
534 D3DVALUE dvMaxZ;
535 } D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE;
536
537 typedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL;
538
539 typedef struct _D3DHAL_DP2SETLIGHT {
540 DWORD dwIndex;
541 DWORD dwDataType;
542 } D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT;
543
544 #define D3DHAL_SETLIGHT_ENABLE 0
545 #define D3DHAL_SETLIGHT_DISABLE 1
546 #define D3DHAL_SETLIGHT_DATA 2
547
548 typedef struct _D3DHAL_DP2CREATELIGHT {
549 DWORD dwIndex;
550 } D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT;
551
552 typedef struct _D3DHAL_DP2SETTRANSFORM {
553 D3DTRANSFORMSTATETYPE xfrmType;
554 D3DMATRIX matrix;
555 } D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM;
556
557 typedef struct _D3DHAL_DP2TEXBLT {
558 DWORD dwDDDestSurface;
559 DWORD dwDDSrcSurface;
560 POINT pDest;
561 RECTL rSrc;
562 DWORD dwFlags;
563 } D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT;
564
565 typedef struct _D3DHAL_DP2STATESET {
566 DWORD dwOperation;
567 DWORD dwParam;
568 D3DSTATEBLOCKTYPE sbType;
569 } D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET;
570
571 #define D3DHAL_STATESETBEGIN 0
572 #define D3DHAL_STATESETEND 1
573 #define D3DHAL_STATESETDELETE 2
574 #define D3DHAL_STATESETEXECUTE 3
575 #define D3DHAL_STATESETCAPTURE 4
576
577 typedef struct _D3DHAL_DP2SETPRIORITY {
578 DWORD dwDDSurface;
579 DWORD dwPriority;
580 } D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY;
581
582 typedef struct _D3DHAL_DP2SETRENDERTARGET {
583 DWORD hRenderTarget;
584 DWORD hZBuffer;
585 } D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET;
586
587 typedef struct _D3DHAL_DP2CLEAR {
588 DWORD dwFlags;
589 DWORD dwFillColor;
590 D3DVALUE dvFillDepth;
591 DWORD dwFillStencil;
592 RECT Rects[1];
593 } D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR;
594
595 typedef struct _D3DHAL_DP2SETTEXLOD {
596 DWORD dwDDSurface;
597 DWORD dwLOD;
598 } D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD;
599
600
601 #if (DIRECT3D_VERSION >= 0x0900)
602
603 #define DX9_DDI_VERSION 4
604
605 #ifndef D3DVTXPCAPS_NO_VSDT_UBYTE4
606 #define D3DVTXPCAPS_NO_VSDT_UBYTE4 0x00000080
607 #endif
608
609 #define D3DPMISCCAPS_LINEPATTERNREP 0x00000004
610
611 #define D3DDEVCAPS_HWVERTEXBUFFER 0x02000000
612 #define D3DDEVCAPS_HWINDEXBUFFER 0x04000000
613 #define D3DDEVCAPS_SUBVOLUMELOCK 0x08000000
614
615 #ifndef D3DPMISCCAPS_FOGINFVF
616 #define D3DPMISCCAPS_FOGINFVF 0x00002000
617 #endif
618
619 #ifndef D3DFVF_FOG
620 #define D3DFVF_FOG 0x00002000
621 #endif
622
623 typedef struct _DD_GETDRIVERINFO2DATA
624 {
625 DWORD dwReserved;
626 DWORD dwMagic;
627 DWORD dwType;
628 DWORD dwExpectedSize;
629 } DD_GETDRIVERINFO2DATA;
630
631 /**
632 * A driver must check DD_GETDRIVERINFO2DATA.dwHeight for
633 * D3DGDI2_MAGIC to see if the passed GUID is GUID_GetDriverInfo2
634 * or a GUID_DDStereoMode.
635 */
636 #define GUID_GetDriverInfo2 GUID_DDStereoMode
637
638 /**
639 * Magic number used in DD_GETDRIVERINFO2DATA.dwHeight when
640 * GUID_GetDriverInfo2/GUID_DDStereoMode is specified in a
641 * GetDriverInfo call.
642 */
643 #define D3DGDI2_MAGIC 0xFFFFFFFF
644
645 #define D3DGDI2_TYPE_GETD3DCAPS8 0x00000001
646 #define D3DGDI2_TYPE_GETFORMATCOUNT 0x00000002
647 #define D3DGDI2_TYPE_GETFORMAT 0x00000003
648 #define D3DGDI2_TYPE_DXVERSION 0x00000004 /* Make driver aware of currently used DirectX version */
649 #define D3DGDI2_TYPE_GETD3DCAPS9 0x00000010
650 #define D3DGDI2_TYPE_GETEXTENDEDMODECOUNT 0x00000011
651 #define D3DGDI2_TYPE_GETEXTENDEDMODE 0x00000012
652 #define D3DGDI2_TYPE_GETADAPTERGROUP 0x00000013
653 #define D3DGDI2_TYPE_GETMULTISAMPLEQUALITYLEVELS 0x00000016
654 #define D3DGDI2_TYPE_DEFERRED_AGP_AWARE 0x00000018
655 #define D3DGDI2_TYPE_FREE_DEFERRED_AGP 0x00000019
656 #define D3DGDI2_TYPE_DEFER_AGP_FREES 0x00000020
657 #define D3DGDI2_TYPE_GETD3DQUERYCOUNT 0x00000021
658 #define D3DGDI2_TYPE_GETD3DQUERY 0x00000022
659 #define D3DGDI2_TYPE_GETDDIVERSION 0x00000023 /* Returns DX9_DDI_VERSION, used to check which DDK version the driver is compiled against */
660
661 typedef struct _D3DCAPS8
662 {
663 D3DDEVTYPE DeviceType;
664 UINT AdapterOrdinal;
665 DWORD Caps;
666 DWORD Caps2;
667 DWORD Caps3;
668 DWORD PresentationIntervals;
669 DWORD CursorCaps;
670 DWORD DevCaps;
671 DWORD PrimitiveMiscCaps;
672 DWORD RasterCaps;
673 DWORD ZCmpCaps;
674 DWORD SrcBlendCaps;
675 DWORD DestBlendCaps;
676 DWORD AlphaCmpCaps;
677 DWORD ShadeCaps;
678 DWORD TextureCaps;
679 DWORD TextureFilterCaps;
680 DWORD CubeTextureFilterCaps;
681 DWORD VolumeTextureFilterCaps;
682 DWORD TextureAddressCaps;
683 DWORD VolumeTextureAddressCaps;
684 DWORD LineCaps;
685 DWORD MaxTextureWidth;
686 DWORD MaxTextureHeight;
687 DWORD MaxVolumeExtent;
688 DWORD MaxTextureRepeat;
689 DWORD MaxTextureAspectRatio;
690 DWORD MaxAnisotropy;
691 float MaxVertexW;
692 float GuardBandLeft;
693 float GuardBandTop;
694 float GuardBandRight;
695 float GuardBandBottom;
696 float ExtentsAdjust;
697 DWORD StencilCaps;
698 DWORD FVFCaps;
699 DWORD TextureOpCaps;
700 DWORD MaxTextureBlendStages;
701 DWORD MaxSimultaneousTextures;
702 DWORD VertexProcessingCaps;
703 DWORD MaxActiveLights;
704 DWORD MaxUserClipPlanes;
705 DWORD MaxVertexBlendMatrices;
706 DWORD MaxVertexBlendMatrixIndex;
707 float MaxPointSize;
708 DWORD MaxPrimitiveCount;
709 DWORD MaxVertexIndex;
710 DWORD MaxStreams;
711 DWORD MaxStreamStride;
712 DWORD VertexShaderVersion;
713 DWORD MaxVertexShaderConst;
714 DWORD PixelShaderVersion;
715 float MaxPixelShaderValue;
716 } D3DCAPS8;
717
718 typedef struct _DD_GETFORMATCOUNTDATA
719 {
720 DD_GETDRIVERINFO2DATA gdi2;
721 DWORD dwFormatCount;
722 DWORD dwReserved;
723 } DD_GETFORMATCOUNTDATA;
724
725 typedef struct _DD_GETFORMATDATA
726 {
727 DD_GETDRIVERINFO2DATA gdi2;
728 DWORD dwFormatIndex;
729 DDPIXELFORMAT format;
730 } DD_GETFORMATDATA;
731
732 typedef struct _DD_DXVERSION
733 {
734 DD_GETDRIVERINFO2DATA gdi2;
735 DWORD dwDXVersion;
736 DWORD dwReserved;
737 } DD_DXVERSION;
738
739 typedef struct _DD_DEFERRED_AGP_AWARE_DATA
740 {
741 DD_GETDRIVERINFO2DATA gdi2;
742 } DD_DEFERRED_AGP_AWARE_DATA;
743
744 typedef struct _DD_FREE_DEFERRED_AGP_DATA
745 {
746 DD_GETDRIVERINFO2DATA gdi2;
747 DWORD dwProcessId;
748 } DD_FREE_DEFERRED_AGP_DATA;
749
750 typedef struct _DD_GETEXTENDEDMODECOUNTDATA
751 {
752 DD_GETDRIVERINFO2DATA gdi2;
753 DWORD dwModeCount;
754 DWORD dwReserved;
755 } DD_GETEXTENDEDMODECOUNTDATA;
756
757 typedef struct _DD_GETEXTENDEDMODEDATA
758 {
759 DD_GETDRIVERINFO2DATA gdi2;
760 DWORD dwModeIndex;
761 D3DDISPLAYMODE mode;
762 } DD_GETEXTENDEDMODEDATA;
763
764 typedef struct _DD_GETADAPTERGROUPDATA
765 {
766 DD_GETDRIVERINFO2DATA gdi2;
767 ULONG_PTR ulUniqueAdapterGroupId;
768 DWORD dwReserved1;
769 DWORD dwReserved2;
770 } DD_GETADAPTERGROUPDATA;
771
772 typedef struct _DD_MULTISAMPLEQUALITYLEVELSDATA
773 {
774 DD_GETDRIVERINFO2DATA gdi2;
775 D3DFORMAT Format;
776 BOOL bFlip : 1;
777 D3DMULTISAMPLE_TYPE MSType : 31;
778 DWORD QualityLevels;
779 } DD_MULTISAMPLEQUALITYLEVELSDATA;
780
781 typedef struct _DD_GETD3DQUERYCOUNTDATA
782 {
783 DD_GETDRIVERINFO2DATA gdi2;
784 DWORD dwNumQueries;
785 } DD_GETD3DQUERYCOUNTDATA;
786
787 typedef struct _DD_GETD3DQUERYDATA
788 {
789 DD_GETDRIVERINFO2DATA gdi2;
790 union
791 {
792 DWORD dwQueryIndex;
793 D3DQUERYTYPE QueryType;
794 };
795 } DD_GETD3DQUERYDATA;
796
797 typedef struct _DD_GETDDIVERSIONDATA
798 {
799 DD_GETDRIVERINFO2DATA gdi2;
800 DWORD dwDXVersion;
801 DWORD dwDDIVersion;
802 } DD_GETDDIVERSIONDATA;
803
804 #endif /* (DIRECT3D_VERSION >= 0x0900) */
805
806 #ifdef __cplusplus
807 } /* extern "C" */
808 #endif
809
810 #endif /* _D3DHAL_H_ */