1 /*
2  * Copyright (C) 2000 Peter Hunnisett
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 /* FIXME: Need to add C++ code for certain structs for headers - this is going to be a problem
20           if WINE continues to only use C code  - I suppose that we could always inline in
21           the header file to get around that little problem... */
22 /* FIXME: We need to implement versioning on everything directx 5 and up if these headers
23           are going to be generically useful for directx stuff */
24 
25 #ifndef __WINE_D3DTYPES_H
26 #define __WINE_D3DTYPES_H
27 
28 #include <windows.h>
29 #include <float.h>
30 #include <ddraw.h>
31 
32 #ifdef __i386__
33 #include <pshpack4.h>
34 #endif
35 
36 #define D3DVALP(val, prec)      ((float)(val))
37 #define D3DVAL(val)             ((float)(val))
38 #define D3DDivide(a, b)         (float)((double) (a) / (double) (b))
39 #define D3DMultiply(a, b)       ((a) * (b))
40 
41 typedef LONG D3DFIXED;
42 
43 
44 #ifndef RGB_MAKE
45 #define CI_GETALPHA(ci)    ((ci) >> 24)
46 #define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)
47 #define CI_GETFRACTION(ci) ((ci) & 0xff)
48 #define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)
49 #define CI_MASKALPHA(ci)   ((ci) & 0xffffff)
50 #define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))
51 
52 #define RGBA_GETALPHA(rgb)      ((rgb) >> 24)
53 #define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)
54 #define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)
55 #define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)
56 #define RGBA_MAKE(r, g, b, a)   ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
57 
58 #define D3DRGB(r, g, b) \
59     (0xff000000 | ( ((LONG)((r) * 255)) << 16) | (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255))
60 #define D3DRGBA(r, g, b, a) \
61     (   (((LONG)((a) * 255)) << 24) | (((LONG)((r) * 255)) << 16) \
62     |   (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255) \
63     )
64 
65 #define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)
66 #define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)
67 #define RGB_GETBLUE(rgb)        ((rgb) & 0xff)
68 #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
69 #define RGB_MAKE(r, g, b)       ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b)))
70 #define RGBA_TORGB(rgba)       ((D3DCOLOR) ((rgba) & 0xffffff))
71 #define RGB_TORGBA(rgb)        ((D3DCOLOR) ((rgb) | 0xff000000))
72 
73 #endif
74 
75 #define D3DENUMRET_CANCEL                        DDENUMRET_CANCEL
76 #define D3DENUMRET_OK                            DDENUMRET_OK
77 
78 typedef HRESULT (CALLBACK *LPD3DVALIDATECALLBACK)(void *ctx, DWORD offset);
79 typedef HRESULT (CALLBACK *LPD3DENUMTEXTUREFORMATSCALLBACK)(DDSURFACEDESC *surface_desc, void *ctx);
80 typedef HRESULT (CALLBACK *LPD3DENUMPIXELFORMATSCALLBACK)(DDPIXELFORMAT *format, void *ctx);
81 
82 #ifndef DX_SHARED_DEFINES
83 
84 typedef float D3DVALUE,*LPD3DVALUE;
85 
86 #ifndef D3DCOLOR_DEFINED
87 typedef DWORD D3DCOLOR, *LPD3DCOLOR;
88 #define D3DCOLOR_DEFINED
89 #endif
90 
91 #ifndef D3DVECTOR_DEFINED
92 typedef struct _D3DVECTOR {
93   union {
94         D3DVALUE        x;
95     D3DVALUE dvX;
96   } DUMMYUNIONNAME1;
97   union {
98         D3DVALUE        y;
99     D3DVALUE dvY;
100   } DUMMYUNIONNAME2;
101   union {
102         D3DVALUE        z;
103     D3DVALUE dvZ;
104   } DUMMYUNIONNAME3;
105 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
106   /* the definitions for these methods are in d3dvec.inl */
107 public:
108   /*** constructors ***/
_D3DVECTOR_D3DVECTOR109   _D3DVECTOR() {}
110   _D3DVECTOR(D3DVALUE f);
111   _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z);
112   _D3DVECTOR(const D3DVALUE f[3]);
113 
114   /*** assignment operators ***/
115   _D3DVECTOR& operator += (const _D3DVECTOR& v);
116   _D3DVECTOR& operator -= (const _D3DVECTOR& v);
117   _D3DVECTOR& operator *= (const _D3DVECTOR& v);
118   _D3DVECTOR& operator /= (const _D3DVECTOR& v);
119   _D3DVECTOR& operator *= (D3DVALUE s);
120   _D3DVECTOR& operator /= (D3DVALUE s);
121 
122   /*** unary operators ***/
123   friend _D3DVECTOR operator + (const _D3DVECTOR& v);
124   friend _D3DVECTOR operator - (const _D3DVECTOR& v);
125 
126   /*** binary operators ***/
127   friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
128   friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
129 
130   friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s);
131   friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v);
132   friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s);
133 
134   friend D3DVALUE SquareMagnitude(const _D3DVECTOR& v);
135   friend D3DVALUE Magnitude(const _D3DVECTOR& v);
136 
137   friend _D3DVECTOR Normalize(const _D3DVECTOR& v);
138 
139   friend D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);
140   friend _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);
141 #endif
142 } D3DVECTOR,*LPD3DVECTOR;
143 #define D3DVECTOR_DEFINED
144 #endif
145 
146 #define DX_SHARED_DEFINES
147 #endif /* DX_SHARED_DEFINES */
148 
149 typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE;
150 typedef DWORD D3DTEXTUREHANDLE,  *LPD3DTEXTUREHANDLE;
151 typedef DWORD D3DMATRIXHANDLE,   *LPD3DMATRIXHANDLE;
152 
153 typedef struct _D3DCOLORVALUE {
154         union {
155                 D3DVALUE r;
156                 D3DVALUE dvR;
157         } DUMMYUNIONNAME1;
158         union {
159                 D3DVALUE g;
160                 D3DVALUE dvG;
161         } DUMMYUNIONNAME2;
162         union {
163                 D3DVALUE b;
164                 D3DVALUE dvB;
165         } DUMMYUNIONNAME3;
166         union {
167                 D3DVALUE a;
168                 D3DVALUE dvA;
169         } DUMMYUNIONNAME4;
170 } D3DCOLORVALUE,*LPD3DCOLORVALUE;
171 
172 typedef struct _D3DRECT {
173   union {
174     LONG x1;
175     LONG lX1;
176   } DUMMYUNIONNAME1;
177   union {
178     LONG y1;
179     LONG lY1;
180   } DUMMYUNIONNAME2;
181   union {
182     LONG x2;
183     LONG lX2;
184   } DUMMYUNIONNAME3;
185   union {
186     LONG y2;
187     LONG lY2;
188   } DUMMYUNIONNAME4;
189 } D3DRECT, *LPD3DRECT;
190 
191 typedef struct _D3DHVERTEX {
192     DWORD         dwFlags;
193  union {
194     D3DVALUE    hx;
195     D3DVALUE    dvHX;
196   } DUMMYUNIONNAME1;
197   union {
198     D3DVALUE    hy;
199     D3DVALUE    dvHY;
200   } DUMMYUNIONNAME2;
201   union {
202     D3DVALUE    hz;
203     D3DVALUE    dvHZ;
204   } DUMMYUNIONNAME3;
205 } D3DHVERTEX, *LPD3DHVERTEX;
206 
207 /*
208  * Transformed/lit vertices
209  */
210 typedef struct _D3DTLVERTEX {
211   union {
212     D3DVALUE    sx;
213     D3DVALUE    dvSX;
214   } DUMMYUNIONNAME1;
215   union {
216     D3DVALUE    sy;
217     D3DVALUE    dvSY;
218   } DUMMYUNIONNAME2;
219   union {
220     D3DVALUE    sz;
221     D3DVALUE    dvSZ;
222   } DUMMYUNIONNAME3;
223   union {
224     D3DVALUE    rhw;
225     D3DVALUE    dvRHW;
226   } DUMMYUNIONNAME4;
227   union {
228     D3DCOLOR    color;
229     D3DCOLOR    dcColor;
230   } DUMMYUNIONNAME5;
231   union {
232     D3DCOLOR    specular;
233     D3DCOLOR    dcSpecular;
234   } DUMMYUNIONNAME6;
235   union {
236     D3DVALUE    tu;
237     D3DVALUE    dvTU;
238   } DUMMYUNIONNAME7;
239   union {
240     D3DVALUE    tv;
241     D3DVALUE    dvTV;
242   } DUMMYUNIONNAME8;
243 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
244 public:
_D3DTLVERTEX_D3DTLVERTEX245   _D3DTLVERTEX() {}
_D3DTLVERTEX_D3DTLVERTEX246   _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) {
247     sx = v.x; sy = v.y; sz = v.z; rhw = _rhw;
248     color = _color; specular = _specular;
249     tu = _tu; tv = _tv;
250   }
251 #endif
252 } D3DTLVERTEX, *LPD3DTLVERTEX;
253 
254 typedef struct _D3DLVERTEX {
255   union {
256     D3DVALUE x;
257     D3DVALUE dvX;
258   } DUMMYUNIONNAME1;
259   union {
260     D3DVALUE y;
261     D3DVALUE dvY;
262   } DUMMYUNIONNAME2;
263   union {
264     D3DVALUE z;
265     D3DVALUE dvZ;
266   } DUMMYUNIONNAME3;
267   DWORD            dwReserved;
268   union {
269     D3DCOLOR     color;
270     D3DCOLOR     dcColor;
271   } DUMMYUNIONNAME4;
272   union {
273     D3DCOLOR     specular;
274     D3DCOLOR     dcSpecular;
275   } DUMMYUNIONNAME5;
276   union {
277     D3DVALUE     tu;
278     D3DVALUE     dvTU;
279   } DUMMYUNIONNAME6;
280   union {
281     D3DVALUE     tv;
282     D3DVALUE     dvTV;
283   } DUMMYUNIONNAME7;
284 } D3DLVERTEX, *LPD3DLVERTEX;
285 
286 typedef struct _D3DVERTEX {
287   union {
288     D3DVALUE     x;
289     D3DVALUE     dvX;
290   } DUMMYUNIONNAME1;
291   union {
292     D3DVALUE     y;
293     D3DVALUE     dvY;
294   } DUMMYUNIONNAME2;
295   union {
296     D3DVALUE     z;
297     D3DVALUE     dvZ;
298   } DUMMYUNIONNAME3;
299   union {
300     D3DVALUE     nx;
301     D3DVALUE     dvNX;
302   } DUMMYUNIONNAME4;
303   union {
304     D3DVALUE     ny;
305     D3DVALUE     dvNY;
306   } DUMMYUNIONNAME5;
307   union {
308     D3DVALUE     nz;
309     D3DVALUE     dvNZ;
310   } DUMMYUNIONNAME6;
311   union {
312     D3DVALUE     tu;
313     D3DVALUE     dvTU;
314   } DUMMYUNIONNAME7;
315   union {
316     D3DVALUE     tv;
317     D3DVALUE     dvTV;
318   } DUMMYUNIONNAME8;
319 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
320 public:
_D3DVERTEX_D3DVERTEX321   _D3DVERTEX() {}
_D3DVERTEX_D3DVERTEX322   _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) {
323     x  = v.x; y  = v.y; z  = v.z;
324     nx = n.x; ny = n.y; nz = n.z;
325     tu = _tu; tv = _tv;
326   }
327 #endif
328 } D3DVERTEX, *LPD3DVERTEX;
329 
330 typedef struct _D3DMATRIX {
331   D3DVALUE        _11, _12, _13, _14;
332   D3DVALUE        _21, _22, _23, _24;
333   D3DVALUE        _31, _32, _33, _34;
334   D3DVALUE        _41, _42, _43, _44;
335 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
_D3DMATRIX_D3DMATRIX336   _D3DMATRIX() { }
337 
338     /* This is different from MS, but avoids anonymous structs. */
operator_D3DMATRIX339     D3DVALUE &operator () (int r, int c)
340 	{ return (&_11)[r*4 + c]; }
operator_D3DMATRIX341     const D3DVALUE &operator() (int r, int c) const
342 	{ return (&_11)[r*4 + c]; }
343 #endif
344 } D3DMATRIX, *LPD3DMATRIX;
345 
346 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
347 #include <d3dvec.inl>
348 #endif
349 
350 typedef struct _D3DVIEWPORT {
351   DWORD       dwSize;
352   DWORD       dwX;
353   DWORD       dwY;
354   DWORD       dwWidth;
355   DWORD       dwHeight;
356   D3DVALUE    dvScaleX;
357   D3DVALUE    dvScaleY;
358   D3DVALUE    dvMaxX;
359   D3DVALUE    dvMaxY;
360   D3DVALUE    dvMinZ;
361   D3DVALUE    dvMaxZ;
362 } D3DVIEWPORT, *LPD3DVIEWPORT;
363 
364 typedef struct _D3DVIEWPORT2 {
365   DWORD       dwSize;
366   DWORD       dwX;
367   DWORD       dwY;
368   DWORD       dwWidth;
369   DWORD       dwHeight;
370   D3DVALUE    dvClipX;
371   D3DVALUE    dvClipY;
372   D3DVALUE    dvClipWidth;
373   D3DVALUE    dvClipHeight;
374   D3DVALUE    dvMinZ;
375   D3DVALUE    dvMaxZ;
376 } D3DVIEWPORT2, *LPD3DVIEWPORT2;
377 
378 typedef struct _D3DVIEWPORT7 {
379   DWORD       dwX;
380   DWORD       dwY;
381   DWORD       dwWidth;
382   DWORD       dwHeight;
383   D3DVALUE    dvMinZ;
384   D3DVALUE    dvMaxZ;
385 } D3DVIEWPORT7, *LPD3DVIEWPORT7;
386 
387 #define D3DMAXUSERCLIPPLANES 32
388 
389 #define D3DCLIPPLANE0 (1 << 0)
390 #define D3DCLIPPLANE1 (1 << 1)
391 #define D3DCLIPPLANE2 (1 << 2)
392 #define D3DCLIPPLANE3 (1 << 3)
393 #define D3DCLIPPLANE4 (1 << 4)
394 #define D3DCLIPPLANE5 (1 << 5)
395 
396 #define D3DCLIP_LEFT     0x00000001
397 #define D3DCLIP_RIGHT    0x00000002
398 #define D3DCLIP_TOP      0x00000004
399 #define D3DCLIP_BOTTOM   0x00000008
400 #define D3DCLIP_FRONT    0x00000010
401 #define D3DCLIP_BACK     0x00000020
402 #define D3DCLIP_GEN0     0x00000040
403 #define D3DCLIP_GEN1     0x00000080
404 #define D3DCLIP_GEN2     0x00000100
405 #define D3DCLIP_GEN3     0x00000200
406 #define D3DCLIP_GEN4     0x00000400
407 #define D3DCLIP_GEN5     0x00000800
408 
409 #define D3DSTATUS_CLIPUNIONLEFT                 D3DCLIP_LEFT
410 #define D3DSTATUS_CLIPUNIONRIGHT                D3DCLIP_RIGHT
411 #define D3DSTATUS_CLIPUNIONTOP                  D3DCLIP_TOP
412 #define D3DSTATUS_CLIPUNIONBOTTOM               D3DCLIP_BOTTOM
413 #define D3DSTATUS_CLIPUNIONFRONT                D3DCLIP_FRONT
414 #define D3DSTATUS_CLIPUNIONBACK                 D3DCLIP_BACK
415 #define D3DSTATUS_CLIPUNIONGEN0                 D3DCLIP_GEN0
416 #define D3DSTATUS_CLIPUNIONGEN1                 D3DCLIP_GEN1
417 #define D3DSTATUS_CLIPUNIONGEN2                 D3DCLIP_GEN2
418 #define D3DSTATUS_CLIPUNIONGEN3                 D3DCLIP_GEN3
419 #define D3DSTATUS_CLIPUNIONGEN4                 D3DCLIP_GEN4
420 #define D3DSTATUS_CLIPUNIONGEN5                 D3DCLIP_GEN5
421 
422 #define D3DSTATUS_CLIPINTERSECTIONLEFT          0x00001000
423 #define D3DSTATUS_CLIPINTERSECTIONRIGHT         0x00002000
424 #define D3DSTATUS_CLIPINTERSECTIONTOP           0x00004000
425 #define D3DSTATUS_CLIPINTERSECTIONBOTTOM        0x00008000
426 #define D3DSTATUS_CLIPINTERSECTIONFRONT         0x00010000
427 #define D3DSTATUS_CLIPINTERSECTIONBACK          0x00020000
428 #define D3DSTATUS_CLIPINTERSECTIONGEN0          0x00040000
429 #define D3DSTATUS_CLIPINTERSECTIONGEN1          0x00080000
430 #define D3DSTATUS_CLIPINTERSECTIONGEN2          0x00100000
431 #define D3DSTATUS_CLIPINTERSECTIONGEN3          0x00200000
432 #define D3DSTATUS_CLIPINTERSECTIONGEN4          0x00400000
433 #define D3DSTATUS_CLIPINTERSECTIONGEN5          0x00800000
434 #define D3DSTATUS_ZNOTVISIBLE                   0x01000000
435 
436 #define D3DSTATUS_CLIPUNIONALL  (               \
437             D3DSTATUS_CLIPUNIONLEFT     |       \
438             D3DSTATUS_CLIPUNIONRIGHT    |       \
439             D3DSTATUS_CLIPUNIONTOP      |       \
440             D3DSTATUS_CLIPUNIONBOTTOM   |       \
441             D3DSTATUS_CLIPUNIONFRONT    |       \
442             D3DSTATUS_CLIPUNIONBACK     |       \
443             D3DSTATUS_CLIPUNIONGEN0     |       \
444             D3DSTATUS_CLIPUNIONGEN1     |       \
445             D3DSTATUS_CLIPUNIONGEN2     |       \
446             D3DSTATUS_CLIPUNIONGEN3     |       \
447             D3DSTATUS_CLIPUNIONGEN4     |       \
448             D3DSTATUS_CLIPUNIONGEN5             \
449             )
450 
451 #define D3DSTATUS_CLIPINTERSECTIONALL   (               \
452             D3DSTATUS_CLIPINTERSECTIONLEFT      |       \
453             D3DSTATUS_CLIPINTERSECTIONRIGHT     |       \
454             D3DSTATUS_CLIPINTERSECTIONTOP       |       \
455             D3DSTATUS_CLIPINTERSECTIONBOTTOM    |       \
456             D3DSTATUS_CLIPINTERSECTIONFRONT     |       \
457             D3DSTATUS_CLIPINTERSECTIONBACK      |       \
458             D3DSTATUS_CLIPINTERSECTIONGEN0      |       \
459             D3DSTATUS_CLIPINTERSECTIONGEN1      |       \
460             D3DSTATUS_CLIPINTERSECTIONGEN2      |       \
461             D3DSTATUS_CLIPINTERSECTIONGEN3      |       \
462             D3DSTATUS_CLIPINTERSECTIONGEN4      |       \
463             D3DSTATUS_CLIPINTERSECTIONGEN5              \
464             )
465 
466 #define D3DSTATUS_DEFAULT       (                       \
467             D3DSTATUS_CLIPINTERSECTIONALL       |       \
468             D3DSTATUS_ZNOTVISIBLE)
469 
470 #define D3DTRANSFORM_CLIPPED       0x00000001
471 #define D3DTRANSFORM_UNCLIPPED     0x00000002
472 
473 typedef struct _D3DTRANSFORMDATA {
474   DWORD           dwSize;
475   void            *lpIn;
476   DWORD           dwInSize;
477   void            *lpOut;
478   DWORD           dwOutSize;
479   D3DHVERTEX      *lpHOut;
480   DWORD           dwClip;
481   DWORD           dwClipIntersection;
482   DWORD           dwClipUnion;
483   D3DRECT         drExtent;
484 } D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA;
485 
486 typedef struct _D3DLIGHTINGELEMENT {
487   D3DVECTOR dvPosition;
488   D3DVECTOR dvNormal;
489 } D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT;
490 
491 typedef struct _D3DMATERIAL {
492   DWORD               dwSize;
493   union {
494     D3DCOLORVALUE   diffuse;
495     D3DCOLORVALUE   dcvDiffuse;
496   } DUMMYUNIONNAME;
497   union {
498     D3DCOLORVALUE   ambient;
499     D3DCOLORVALUE   dcvAmbient;
500   } DUMMYUNIONNAME1;
501   union {
502     D3DCOLORVALUE   specular;
503     D3DCOLORVALUE   dcvSpecular;
504   } DUMMYUNIONNAME2;
505   union {
506     D3DCOLORVALUE   emissive;
507     D3DCOLORVALUE   dcvEmissive;
508   } DUMMYUNIONNAME3;
509   union {
510     D3DVALUE        power;
511     D3DVALUE        dvPower;
512   } DUMMYUNIONNAME4;
513   D3DTEXTUREHANDLE    hTexture;
514   DWORD               dwRampSize;
515 } D3DMATERIAL, *LPD3DMATERIAL;
516 
517 typedef struct _D3DMATERIAL7 {
518   union {
519     D3DCOLORVALUE   diffuse;
520     D3DCOLORVALUE   dcvDiffuse;
521   } DUMMYUNIONNAME;
522   union {
523     D3DCOLORVALUE   ambient;
524     D3DCOLORVALUE   dcvAmbient;
525   } DUMMYUNIONNAME1;
526   union {
527     D3DCOLORVALUE   specular;
528     D3DCOLORVALUE   dcvSpecular;
529   } DUMMYUNIONNAME2;
530   union {
531     D3DCOLORVALUE   emissive;
532     D3DCOLORVALUE   dcvEmissive;
533   } DUMMYUNIONNAME3;
534   union {
535     D3DVALUE        power;
536     D3DVALUE        dvPower;
537   } DUMMYUNIONNAME4;
538 } D3DMATERIAL7, *LPD3DMATERIAL7;
539 
540 typedef enum {
541   D3DLIGHT_POINT          = 1,
542   D3DLIGHT_SPOT           = 2,
543   D3DLIGHT_DIRECTIONAL    = 3,
544   D3DLIGHT_PARALLELPOINT  = 4,
545   D3DLIGHT_GLSPOT         = 5,
546   D3DLIGHT_FORCE_DWORD    = 0x7fffffff
547 } D3DLIGHTTYPE;
548 
549 typedef struct _D3DLIGHT {
550     DWORD           dwSize;
551     D3DLIGHTTYPE    dltType;
552     D3DCOLORVALUE   dcvColor;
553     D3DVECTOR       dvPosition;
554     D3DVECTOR       dvDirection;
555     D3DVALUE        dvRange;
556     D3DVALUE        dvFalloff;
557     D3DVALUE        dvAttenuation0;
558     D3DVALUE        dvAttenuation1;
559     D3DVALUE        dvAttenuation2;
560     D3DVALUE        dvTheta;
561     D3DVALUE        dvPhi;
562 } D3DLIGHT,*LPD3DLIGHT;
563 
564 typedef struct _D3DLIGHT7 {
565     D3DLIGHTTYPE    dltType;
566     D3DCOLORVALUE   dcvDiffuse;
567     D3DCOLORVALUE   dcvSpecular;
568     D3DCOLORVALUE   dcvAmbient;
569     D3DVECTOR       dvPosition;
570     D3DVECTOR       dvDirection;
571     D3DVALUE        dvRange;
572     D3DVALUE        dvFalloff;
573     D3DVALUE        dvAttenuation0;
574     D3DVALUE        dvAttenuation1;
575     D3DVALUE        dvAttenuation2;
576     D3DVALUE        dvTheta;
577     D3DVALUE        dvPhi;
578 } D3DLIGHT7, *LPD3DLIGHT7;
579 
580 #define D3DLIGHT_ACTIVE         0x00000001
581 #define D3DLIGHT_NO_SPECULAR    0x00000002
582 #define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR) /* 0x3 */
583 
584 #define D3DLIGHT_RANGE_MAX              ((float)sqrt(FLT_MAX))
585 
586 typedef struct _D3DLIGHT2 {
587   DWORD           dwSize;
588   D3DLIGHTTYPE    dltType;
589   D3DCOLORVALUE   dcvColor;
590   D3DVECTOR       dvPosition;
591   D3DVECTOR       dvDirection;
592   D3DVALUE        dvRange;
593   D3DVALUE        dvFalloff;
594   D3DVALUE        dvAttenuation0;
595   D3DVALUE        dvAttenuation1;
596   D3DVALUE        dvAttenuation2;
597   D3DVALUE        dvTheta;
598   D3DVALUE        dvPhi;
599   DWORD           dwFlags;
600 } D3DLIGHT2, *LPD3DLIGHT2;
601 
602 typedef struct _D3DLIGHTDATA {
603   DWORD                dwSize;
604   D3DLIGHTINGELEMENT   *lpIn;
605   DWORD                dwInSize;
606   D3DTLVERTEX          *lpOut;
607   DWORD                dwOutSize;
608 } D3DLIGHTDATA, *LPD3DLIGHTDATA;
609 
610 #define D3DCOLOR_MONO   1
611 #define D3DCOLOR_RGB    2
612 
613 typedef DWORD D3DCOLORMODEL;
614 
615 
616 #define D3DCLEAR_TARGET   0x00000001
617 #define D3DCLEAR_ZBUFFER  0x00000002
618 #define D3DCLEAR_STENCIL  0x00000004
619 
620 typedef enum _D3DOPCODE {
621   D3DOP_POINT           = 1,
622   D3DOP_LINE            = 2,
623   D3DOP_TRIANGLE        = 3,
624   D3DOP_MATRIXLOAD      = 4,
625   D3DOP_MATRIXMULTIPLY  = 5,
626   D3DOP_STATETRANSFORM  = 6,
627   D3DOP_STATELIGHT      = 7,
628   D3DOP_STATERENDER     = 8,
629   D3DOP_PROCESSVERTICES = 9,
630   D3DOP_TEXTURELOAD     = 10,
631   D3DOP_EXIT            = 11,
632   D3DOP_BRANCHFORWARD   = 12,
633   D3DOP_SPAN            = 13,
634   D3DOP_SETSTATUS       = 14,
635 
636   D3DOP_FORCE_DWORD     = 0x7fffffff
637 } D3DOPCODE;
638 
639 typedef struct _D3DINSTRUCTION {
640   BYTE bOpcode;
641   BYTE bSize;
642   WORD wCount;
643 } D3DINSTRUCTION, *LPD3DINSTRUCTION;
644 
645 typedef struct _D3DTEXTURELOAD {
646   D3DTEXTUREHANDLE hDestTexture;
647   D3DTEXTUREHANDLE hSrcTexture;
648 } D3DTEXTURELOAD, *LPD3DTEXTURELOAD;
649 
650 typedef struct _D3DPICKRECORD {
651   BYTE     bOpcode;
652   BYTE     bPad;
653   DWORD    dwOffset;
654   D3DVALUE dvZ;
655 } D3DPICKRECORD, *LPD3DPICKRECORD;
656 
657 typedef enum {
658   D3DSHADE_FLAT         = 1,
659   D3DSHADE_GOURAUD      = 2,
660   D3DSHADE_PHONG        = 3,
661   D3DSHADE_FORCE_DWORD  = 0x7fffffff
662 } D3DSHADEMODE;
663 
664 typedef enum {
665   D3DFILL_POINT         = 1,
666   D3DFILL_WIREFRAME     = 2,
667   D3DFILL_SOLID         = 3,
668   D3DFILL_FORCE_DWORD   = 0x7fffffff
669 } D3DFILLMODE;
670 
671 typedef struct _D3DLINEPATTERN {
672   WORD    wRepeatFactor;
673   WORD    wLinePattern;
674 } D3DLINEPATTERN;
675 
676 typedef enum {
677   D3DFILTER_NEAREST          = 1,
678   D3DFILTER_LINEAR           = 2,
679   D3DFILTER_MIPNEAREST       = 3,
680   D3DFILTER_MIPLINEAR        = 4,
681   D3DFILTER_LINEARMIPNEAREST = 5,
682   D3DFILTER_LINEARMIPLINEAR  = 6,
683   D3DFILTER_FORCE_DWORD      = 0x7fffffff
684 } D3DTEXTUREFILTER;
685 
686 typedef enum {
687   D3DBLEND_ZERO            = 1,
688   D3DBLEND_ONE             = 2,
689   D3DBLEND_SRCCOLOR        = 3,
690   D3DBLEND_INVSRCCOLOR     = 4,
691   D3DBLEND_SRCALPHA        = 5,
692   D3DBLEND_INVSRCALPHA     = 6,
693   D3DBLEND_DESTALPHA       = 7,
694   D3DBLEND_INVDESTALPHA    = 8,
695   D3DBLEND_DESTCOLOR       = 9,
696   D3DBLEND_INVDESTCOLOR    = 10,
697   D3DBLEND_SRCALPHASAT     = 11,
698   D3DBLEND_BOTHSRCALPHA    = 12,
699   D3DBLEND_BOTHINVSRCALPHA = 13,
700   D3DBLEND_FORCE_DWORD     = 0x7fffffff
701 } D3DBLEND;
702 
703 typedef enum {
704   D3DTBLEND_DECAL         = 1,
705   D3DTBLEND_MODULATE      = 2,
706   D3DTBLEND_DECALALPHA    = 3,
707   D3DTBLEND_MODULATEALPHA = 4,
708   D3DTBLEND_DECALMASK     = 5,
709   D3DTBLEND_MODULATEMASK  = 6,
710   D3DTBLEND_COPY          = 7,
711   D3DTBLEND_ADD           = 8,
712   D3DTBLEND_FORCE_DWORD   = 0x7fffffff
713 } D3DTEXTUREBLEND;
714 
715 typedef enum _D3DTEXTUREADDRESS {
716     D3DTADDRESS_WRAP           = 1,
717     D3DTADDRESS_MIRROR         = 2,
718     D3DTADDRESS_CLAMP          = 3,
719     D3DTADDRESS_BORDER         = 4,
720     D3DTADDRESS_FORCE_DWORD    = 0x7fffffff
721 } D3DTEXTUREADDRESS;
722 
723 typedef enum {
724   D3DCULL_NONE        = 1,
725   D3DCULL_CW          = 2,
726   D3DCULL_CCW         = 3,
727   D3DCULL_FORCE_DWORD = 0x7fffffff
728 } D3DCULL;
729 
730 typedef enum {
731   D3DCMP_NEVER        = 1,
732   D3DCMP_LESS         = 2,
733   D3DCMP_EQUAL        = 3,
734   D3DCMP_LESSEQUAL    = 4,
735   D3DCMP_GREATER      = 5,
736   D3DCMP_NOTEQUAL     = 6,
737   D3DCMP_GREATEREQUAL = 7,
738   D3DCMP_ALWAYS       = 8,
739   D3DCMP_FORCE_DWORD  = 0x7fffffff
740 } D3DCMPFUNC;
741 
742 typedef enum _D3DSTENCILOP {
743   D3DSTENCILOP_KEEP        = 1,
744   D3DSTENCILOP_ZERO        = 2,
745   D3DSTENCILOP_REPLACE     = 3,
746   D3DSTENCILOP_INCRSAT     = 4,
747   D3DSTENCILOP_DECRSAT     = 5,
748   D3DSTENCILOP_INVERT      = 6,
749   D3DSTENCILOP_INCR        = 7,
750   D3DSTENCILOP_DECR        = 8,
751   D3DSTENCILOP_FORCE_DWORD = 0x7fffffff
752 } D3DSTENCILOP;
753 
754 typedef enum _D3DFOGMODE {
755   D3DFOG_NONE         = 0,
756   D3DFOG_EXP          = 1,
757   D3DFOG_EXP2         = 2,
758   D3DFOG_LINEAR       = 3,
759   D3DFOG_FORCE_DWORD  = 0x7fffffff
760 } D3DFOGMODE;
761 
762 typedef enum _D3DZBUFFERTYPE {
763   D3DZB_FALSE        = 0,
764   D3DZB_TRUE         = 1,
765   D3DZB_USEW         = 2,
766   D3DZB_FORCE_DWORD  = 0x7fffffff
767 } D3DZBUFFERTYPE;
768 
769 typedef enum _D3DANTIALIASMODE {
770   D3DANTIALIAS_NONE            = 0,
771   D3DANTIALIAS_SORTDEPENDENT   = 1,
772   D3DANTIALIAS_SORTINDEPENDENT = 2,
773   D3DANTIALIAS_FORCE_DWORD     = 0x7fffffff
774 } D3DANTIALIASMODE;
775 
776 typedef enum {
777   D3DVT_VERTEX        = 1,
778   D3DVT_LVERTEX       = 2,
779   D3DVT_TLVERTEX      = 3,
780   D3DVT_FORCE_DWORD   = 0x7fffffff
781 } D3DVERTEXTYPE;
782 
783 typedef enum {
784   D3DPT_POINTLIST     = 1,
785   D3DPT_LINELIST      = 2,
786   D3DPT_LINESTRIP     = 3,
787   D3DPT_TRIANGLELIST  = 4,
788   D3DPT_TRIANGLESTRIP = 5,
789   D3DPT_TRIANGLEFAN   = 6,
790   D3DPT_FORCE_DWORD   = 0x7fffffff
791 } D3DPRIMITIVETYPE;
792 
793 #define D3DSTATE_OVERRIDE_BIAS      256
794 
795 #define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS))
796 
797 typedef enum _D3DTRANSFORMSTATETYPE {
798     D3DTRANSFORMSTATE_WORLD         = 1,
799     D3DTRANSFORMSTATE_VIEW          = 2,
800     D3DTRANSFORMSTATE_PROJECTION    = 3,
801     D3DTRANSFORMSTATE_WORLD1        = 4,
802     D3DTRANSFORMSTATE_WORLD2        = 5,
803     D3DTRANSFORMSTATE_WORLD3        = 6,
804     D3DTRANSFORMSTATE_TEXTURE0      = 16,
805     D3DTRANSFORMSTATE_TEXTURE1      = 17,
806     D3DTRANSFORMSTATE_TEXTURE2      = 18,
807     D3DTRANSFORMSTATE_TEXTURE3      = 19,
808     D3DTRANSFORMSTATE_TEXTURE4      = 20,
809     D3DTRANSFORMSTATE_TEXTURE5      = 21,
810     D3DTRANSFORMSTATE_TEXTURE6      = 22,
811     D3DTRANSFORMSTATE_TEXTURE7      = 23,
812     D3DTRANSFORMSTATE_FORCE_DWORD   = 0x7fffffff
813 } D3DTRANSFORMSTATETYPE;
814 
815 typedef enum {
816   D3DLIGHTSTATE_MATERIAL      = 1,
817   D3DLIGHTSTATE_AMBIENT       = 2,
818   D3DLIGHTSTATE_COLORMODEL    = 3,
819   D3DLIGHTSTATE_FOGMODE       = 4,
820   D3DLIGHTSTATE_FOGSTART      = 5,
821   D3DLIGHTSTATE_FOGEND        = 6,
822   D3DLIGHTSTATE_FOGDENSITY    = 7,
823   D3DLIGHTSTATE_COLORVERTEX   = 8,
824   D3DLIGHTSTATE_FORCE_DWORD   = 0x7fffffff
825 } D3DLIGHTSTATETYPE;
826 
827 typedef enum {
828   D3DRENDERSTATE_TEXTUREHANDLE      = 1,
829   D3DRENDERSTATE_ANTIALIAS          = 2,
830   D3DRENDERSTATE_TEXTUREADDRESS     = 3,
831   D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4,
832   D3DRENDERSTATE_WRAPU              = 5, /* <= d3d6 */
833   D3DRENDERSTATE_WRAPV              = 6, /* <= d3d6 */
834   D3DRENDERSTATE_ZENABLE            = 7,
835   D3DRENDERSTATE_FILLMODE           = 8,
836   D3DRENDERSTATE_SHADEMODE          = 9,
837   D3DRENDERSTATE_LINEPATTERN        = 10,
838   D3DRENDERSTATE_MONOENABLE         = 11, /* <= d3d6 */
839   D3DRENDERSTATE_ROP2               = 12, /* <= d3d6 */
840   D3DRENDERSTATE_PLANEMASK          = 13, /* <= d3d6 */
841   D3DRENDERSTATE_ZWRITEENABLE       = 14,
842   D3DRENDERSTATE_ALPHATESTENABLE    = 15,
843   D3DRENDERSTATE_LASTPIXEL          = 16,
844   D3DRENDERSTATE_TEXTUREMAG         = 17,
845   D3DRENDERSTATE_TEXTUREMIN         = 18,
846   D3DRENDERSTATE_SRCBLEND           = 19,
847   D3DRENDERSTATE_DESTBLEND          = 20,
848   D3DRENDERSTATE_TEXTUREMAPBLEND    = 21,
849   D3DRENDERSTATE_CULLMODE           = 22,
850   D3DRENDERSTATE_ZFUNC              = 23,
851   D3DRENDERSTATE_ALPHAREF           = 24,
852   D3DRENDERSTATE_ALPHAFUNC          = 25,
853   D3DRENDERSTATE_DITHERENABLE       = 26,
854   D3DRENDERSTATE_ALPHABLENDENABLE   = 27,
855   D3DRENDERSTATE_FOGENABLE          = 28,
856   D3DRENDERSTATE_SPECULARENABLE     = 29,
857   D3DRENDERSTATE_ZVISIBLE           = 30,
858   D3DRENDERSTATE_SUBPIXEL           = 31, /* <= d3d6 */
859   D3DRENDERSTATE_SUBPIXELX          = 32, /* <= d3d6 */
860   D3DRENDERSTATE_STIPPLEDALPHA      = 33,
861   D3DRENDERSTATE_FOGCOLOR           = 34,
862   D3DRENDERSTATE_FOGTABLEMODE       = 35,
863   D3DRENDERSTATE_FOGTABLESTART      = 36,
864   D3DRENDERSTATE_FOGTABLEEND        = 37,
865   D3DRENDERSTATE_FOGTABLEDENSITY    = 38,
866   D3DRENDERSTATE_FOGSTART           = 36,
867   D3DRENDERSTATE_FOGEND             = 37,
868   D3DRENDERSTATE_FOGDENSITY         = 38,
869   D3DRENDERSTATE_STIPPLEENABLE      = 39, /* <= d3d6 */
870   /* d3d5 */
871   D3DRENDERSTATE_EDGEANTIALIAS      = 40,
872   D3DRENDERSTATE_COLORKEYENABLE     = 41,
873   D3DRENDERSTATE_BORDERCOLOR        = 43,
874   D3DRENDERSTATE_TEXTUREADDRESSU    = 44,
875   D3DRENDERSTATE_TEXTUREADDRESSV    = 45,
876   D3DRENDERSTATE_MIPMAPLODBIAS      = 46, /* <= d3d6 */
877   D3DRENDERSTATE_ZBIAS              = 47,
878   D3DRENDERSTATE_RANGEFOGENABLE     = 48,
879   D3DRENDERSTATE_ANISOTROPY         = 49, /* <= d3d6 */
880   D3DRENDERSTATE_FLUSHBATCH         = 50, /* <= d3d6 */
881   /* d3d6 */
882   D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT = 51, /* <= d3d6 */
883 
884   D3DRENDERSTATE_STENCILENABLE      = 52,
885   D3DRENDERSTATE_STENCILFAIL        = 53,
886   D3DRENDERSTATE_STENCILZFAIL       = 54,
887   D3DRENDERSTATE_STENCILPASS        = 55,
888   D3DRENDERSTATE_STENCILFUNC        = 56,
889   D3DRENDERSTATE_STENCILREF         = 57,
890   D3DRENDERSTATE_STENCILMASK        = 58,
891   D3DRENDERSTATE_STENCILWRITEMASK   = 59,
892   D3DRENDERSTATE_TEXTUREFACTOR      = 60,
893 
894   D3DRENDERSTATE_STIPPLEPATTERN00   = 64,
895   D3DRENDERSTATE_STIPPLEPATTERN01   = 65,
896   D3DRENDERSTATE_STIPPLEPATTERN02   = 66,
897   D3DRENDERSTATE_STIPPLEPATTERN03   = 67,
898   D3DRENDERSTATE_STIPPLEPATTERN04   = 68,
899   D3DRENDERSTATE_STIPPLEPATTERN05   = 69,
900   D3DRENDERSTATE_STIPPLEPATTERN06   = 70,
901   D3DRENDERSTATE_STIPPLEPATTERN07   = 71,
902   D3DRENDERSTATE_STIPPLEPATTERN08   = 72,
903   D3DRENDERSTATE_STIPPLEPATTERN09   = 73,
904   D3DRENDERSTATE_STIPPLEPATTERN10   = 74,
905   D3DRENDERSTATE_STIPPLEPATTERN11   = 75,
906   D3DRENDERSTATE_STIPPLEPATTERN12   = 76,
907   D3DRENDERSTATE_STIPPLEPATTERN13   = 77,
908   D3DRENDERSTATE_STIPPLEPATTERN14   = 78,
909   D3DRENDERSTATE_STIPPLEPATTERN15   = 79,
910   D3DRENDERSTATE_STIPPLEPATTERN16   = 80,
911   D3DRENDERSTATE_STIPPLEPATTERN17   = 81,
912   D3DRENDERSTATE_STIPPLEPATTERN18   = 82,
913   D3DRENDERSTATE_STIPPLEPATTERN19   = 83,
914   D3DRENDERSTATE_STIPPLEPATTERN20   = 84,
915   D3DRENDERSTATE_STIPPLEPATTERN21   = 85,
916   D3DRENDERSTATE_STIPPLEPATTERN22   = 86,
917   D3DRENDERSTATE_STIPPLEPATTERN23   = 87,
918   D3DRENDERSTATE_STIPPLEPATTERN24   = 88,
919   D3DRENDERSTATE_STIPPLEPATTERN25   = 89,
920   D3DRENDERSTATE_STIPPLEPATTERN26   = 90,
921   D3DRENDERSTATE_STIPPLEPATTERN27   = 91,
922   D3DRENDERSTATE_STIPPLEPATTERN28   = 92,
923   D3DRENDERSTATE_STIPPLEPATTERN29   = 93,
924   D3DRENDERSTATE_STIPPLEPATTERN30   = 94,
925   D3DRENDERSTATE_STIPPLEPATTERN31   = 95,
926 
927   D3DRENDERSTATE_WRAP0              = 128,
928   D3DRENDERSTATE_WRAP1              = 129,
929   D3DRENDERSTATE_WRAP2              = 130,
930   D3DRENDERSTATE_WRAP3              = 131,
931   D3DRENDERSTATE_WRAP4              = 132,
932   D3DRENDERSTATE_WRAP5              = 133,
933   D3DRENDERSTATE_WRAP6              = 134,
934   D3DRENDERSTATE_WRAP7              = 135,
935   /* d3d7 */
936   D3DRENDERSTATE_CLIPPING            = 136,
937   D3DRENDERSTATE_LIGHTING            = 137,
938   D3DRENDERSTATE_EXTENTS             = 138,
939   D3DRENDERSTATE_AMBIENT             = 139,
940   D3DRENDERSTATE_FOGVERTEXMODE       = 140,
941   D3DRENDERSTATE_COLORVERTEX         = 141,
942   D3DRENDERSTATE_LOCALVIEWER         = 142,
943   D3DRENDERSTATE_NORMALIZENORMALS    = 143,
944   D3DRENDERSTATE_COLORKEYBLENDENABLE = 144,
945   D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    = 145,
946   D3DRENDERSTATE_SPECULARMATERIALSOURCE   = 146,
947   D3DRENDERSTATE_AMBIENTMATERIALSOURCE    = 147,
948   D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   = 148,
949   D3DRENDERSTATE_VERTEXBLEND              = 151,
950   D3DRENDERSTATE_CLIPPLANEENABLE          = 152,
951 
952   D3DRENDERSTATE_FORCE_DWORD        = 0x7fffffff
953 
954   /* FIXME: We have some retired values that are being reused for DirectX 7 */
955 } D3DRENDERSTATETYPE;
956 
957 typedef enum _D3DMATERIALCOLORSOURCE
958 {
959     D3DMCS_MATERIAL = 0,
960     D3DMCS_COLOR1   = 1,
961     D3DMCS_COLOR2   = 2,
962     D3DMCS_FORCE_DWORD = 0x7fffffff
963 } D3DMATERIALCOLORSOURCE;
964 
965 #define D3DRENDERSTATE_BLENDENABLE      D3DRENDERSTATE_ALPHABLENDENABLE
966 #define D3DRENDERSTATE_WRAPBIAS         __MSABI_LONG(128U)
967 #define D3DWRAP_U   __MSABI_LONG(0x00000001)
968 #define D3DWRAP_V   __MSABI_LONG(0x00000002)
969 
970 #define D3DWRAPCOORD_0   __MSABI_LONG(0x00000001)
971 #define D3DWRAPCOORD_1   __MSABI_LONG(0x00000002)
972 #define D3DWRAPCOORD_2   __MSABI_LONG(0x00000004)
973 #define D3DWRAPCOORD_3   __MSABI_LONG(0x00000008)
974 
975 #define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
976 
977 typedef struct _D3DSTATE {
978   union {
979     D3DTRANSFORMSTATETYPE dtstTransformStateType;
980     D3DLIGHTSTATETYPE     dlstLightStateType;
981     D3DRENDERSTATETYPE    drstRenderStateType;
982   } DUMMYUNIONNAME1;
983   union {
984     DWORD                 dwArg[1];
985     D3DVALUE              dvArg[1];
986   } DUMMYUNIONNAME2;
987 } D3DSTATE, *LPD3DSTATE;
988 
989 typedef struct _D3DMATRIXLOAD {
990   D3DMATRIXHANDLE hDestMatrix;
991   D3DMATRIXHANDLE hSrcMatrix;
992 } D3DMATRIXLOAD, *LPD3DMATRIXLOAD;
993 
994 typedef struct _D3DMATRIXMULTIPLY {
995   D3DMATRIXHANDLE hDestMatrix;
996   D3DMATRIXHANDLE hSrcMatrix1;
997   D3DMATRIXHANDLE hSrcMatrix2;
998 } D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY;
999 
1000 typedef struct _D3DPROCESSVERTICES {
1001   DWORD dwFlags;
1002   WORD  wStart;
1003   WORD  wDest;
1004   DWORD dwCount;
1005   DWORD dwReserved;
1006 } D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES;
1007 
1008 #define D3DPROCESSVERTICES_TRANSFORMLIGHT       __MSABI_LONG(0x00000000)
1009 #define D3DPROCESSVERTICES_TRANSFORM            __MSABI_LONG(0x00000001)
1010 #define D3DPROCESSVERTICES_COPY                 __MSABI_LONG(0x00000002)
1011 #define D3DPROCESSVERTICES_OPMASK               __MSABI_LONG(0x00000007)
1012 
1013 #define D3DPROCESSVERTICES_UPDATEEXTENTS        __MSABI_LONG(0x00000008)
1014 #define D3DPROCESSVERTICES_NOCOLOR              __MSABI_LONG(0x00000010)
1015 
1016 typedef enum _D3DTEXTURESTAGESTATETYPE
1017 {
1018     D3DTSS_COLOROP        =  1,
1019     D3DTSS_COLORARG1      =  2,
1020     D3DTSS_COLORARG2      =  3,
1021     D3DTSS_ALPHAOP        =  4,
1022     D3DTSS_ALPHAARG1      =  5,
1023     D3DTSS_ALPHAARG2      =  6,
1024     D3DTSS_BUMPENVMAT00   =  7,
1025     D3DTSS_BUMPENVMAT01   =  8,
1026     D3DTSS_BUMPENVMAT10   =  9,
1027     D3DTSS_BUMPENVMAT11   = 10,
1028     D3DTSS_TEXCOORDINDEX  = 11,
1029     D3DTSS_ADDRESS        = 12,
1030     D3DTSS_ADDRESSU       = 13,
1031     D3DTSS_ADDRESSV       = 14,
1032     D3DTSS_BORDERCOLOR    = 15,
1033     D3DTSS_MAGFILTER      = 16,
1034     D3DTSS_MINFILTER      = 17,
1035     D3DTSS_MIPFILTER      = 18,
1036     D3DTSS_MIPMAPLODBIAS  = 19,
1037     D3DTSS_MAXMIPLEVEL    = 20,
1038     D3DTSS_MAXANISOTROPY  = 21,
1039     D3DTSS_BUMPENVLSCALE  = 22,
1040     D3DTSS_BUMPENVLOFFSET = 23,
1041     D3DTSS_TEXTURETRANSFORMFLAGS = 24,
1042     D3DTSS_FORCE_DWORD   = 0x7fffffff
1043 } D3DTEXTURESTAGESTATETYPE;
1044 
1045 #define D3DTSS_TCI_PASSTHRU                             0x00000000
1046 #define D3DTSS_TCI_CAMERASPACENORMAL                    0x00010000
1047 #define D3DTSS_TCI_CAMERASPACEPOSITION                  0x00020000
1048 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          0x00030000
1049 
1050 typedef enum _D3DTEXTUREOP
1051 {
1052     D3DTOP_DISABLE    = 1,
1053     D3DTOP_SELECTARG1 = 2,
1054     D3DTOP_SELECTARG2 = 3,
1055 
1056     D3DTOP_MODULATE   = 4,
1057     D3DTOP_MODULATE2X = 5,
1058     D3DTOP_MODULATE4X = 6,
1059 
1060     D3DTOP_ADD          =  7,
1061     D3DTOP_ADDSIGNED    =  8,
1062     D3DTOP_ADDSIGNED2X  =  9,
1063     D3DTOP_SUBTRACT     = 10,
1064     D3DTOP_ADDSMOOTH    = 11,
1065 
1066     D3DTOP_BLENDDIFFUSEALPHA    = 12,
1067     D3DTOP_BLENDTEXTUREALPHA    = 13,
1068     D3DTOP_BLENDFACTORALPHA     = 14,
1069     D3DTOP_BLENDTEXTUREALPHAPM  = 15,
1070     D3DTOP_BLENDCURRENTALPHA    = 16,
1071 
1072     D3DTOP_PREMODULATE            = 17,
1073     D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
1074     D3DTOP_MODULATECOLOR_ADDALPHA = 19,
1075     D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
1076     D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
1077 
1078     D3DTOP_BUMPENVMAP           = 22,
1079     D3DTOP_BUMPENVMAPLUMINANCE  = 23,
1080     D3DTOP_DOTPRODUCT3          = 24,
1081 
1082     D3DTOP_FORCE_DWORD = 0x7fffffff
1083 } D3DTEXTUREOP;
1084 
1085 #define D3DTA_SELECTMASK        0x0000000f
1086 #define D3DTA_DIFFUSE           0x00000000
1087 #define D3DTA_CURRENT           0x00000001
1088 #define D3DTA_TEXTURE           0x00000002
1089 #define D3DTA_TFACTOR           0x00000003
1090 #define D3DTA_SPECULAR          0x00000004
1091 #define D3DTA_COMPLEMENT        0x00000010
1092 #define D3DTA_ALPHAREPLICATE    0x00000020
1093 
1094 typedef enum _D3DTEXTUREMAGFILTER
1095 {
1096     D3DTFG_POINT        = 1,
1097     D3DTFG_LINEAR       = 2,
1098     D3DTFG_FLATCUBIC    = 3,
1099     D3DTFG_GAUSSIANCUBIC = 4,
1100     D3DTFG_ANISOTROPIC  = 5,
1101     D3DTFG_FORCE_DWORD  = 0x7fffffff
1102 } D3DTEXTUREMAGFILTER;
1103 
1104 typedef enum _D3DTEXTUREMINFILTER
1105 {
1106     D3DTFN_POINT        = 1,
1107     D3DTFN_LINEAR       = 2,
1108     D3DTFN_ANISOTROPIC  = 3,
1109     D3DTFN_FORCE_DWORD  = 0x7fffffff
1110 } D3DTEXTUREMINFILTER;
1111 
1112 typedef enum _D3DTEXTUREMIPFILTER
1113 {
1114     D3DTFP_NONE         = 1,
1115     D3DTFP_POINT        = 2,
1116     D3DTFP_LINEAR       = 3,
1117     D3DTFP_FORCE_DWORD  = 0x7fffffff
1118 } D3DTEXTUREMIPFILTER;
1119 
1120 #define D3DTRIFLAG_START                        __MSABI_LONG(0x00000000)
1121 #define D3DTRIFLAG_STARTFLAT(len) (len)
1122 #define D3DTRIFLAG_ODD                          __MSABI_LONG(0x0000001e)
1123 #define D3DTRIFLAG_EVEN                         __MSABI_LONG(0x0000001f)
1124 
1125 #define D3DTRIFLAG_EDGEENABLE1                  __MSABI_LONG(0x00000100)
1126 #define D3DTRIFLAG_EDGEENABLE2                  __MSABI_LONG(0x00000200)
1127 #define D3DTRIFLAG_EDGEENABLE3                  __MSABI_LONG(0x00000400)
1128 #define D3DTRIFLAG_EDGEENABLETRIANGLE \
1129         (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3)
1130 
1131 typedef struct _D3DTRIANGLE {
1132   union {
1133     WORD v1;
1134     WORD wV1;
1135   } DUMMYUNIONNAME1;
1136   union {
1137     WORD v2;
1138     WORD wV2;
1139   } DUMMYUNIONNAME2;
1140   union {
1141     WORD v3;
1142     WORD wV3;
1143   } DUMMYUNIONNAME3;
1144   WORD     wFlags;
1145 } D3DTRIANGLE, *LPD3DTRIANGLE;
1146 
1147 typedef struct _D3DLINE {
1148   union {
1149     WORD v1;
1150     WORD wV1;
1151   } DUMMYUNIONNAME1;
1152   union {
1153     WORD v2;
1154     WORD wV2;
1155   } DUMMYUNIONNAME2;
1156 } D3DLINE, *LPD3DLINE;
1157 
1158 typedef struct _D3DSPAN {
1159   WORD wCount;
1160   WORD wFirst;
1161 } D3DSPAN, *LPD3DSPAN;
1162 
1163 typedef struct _D3DPOINT {
1164   WORD wCount;
1165   WORD wFirst;
1166 } D3DPOINT, *LPD3DPOINT;
1167 
1168 typedef struct _D3DBRANCH {
1169   DWORD dwMask;
1170   DWORD dwValue;
1171   WINBOOL  bNegate;
1172   DWORD dwOffset;
1173 } D3DBRANCH, *LPD3DBRANCH;
1174 
1175 typedef struct _D3DSTATUS {
1176   DWORD   dwFlags;
1177   DWORD   dwStatus;
1178   D3DRECT drExtent;
1179 } D3DSTATUS, *LPD3DSTATUS;
1180 
1181 #define D3DSETSTATUS_STATUS   __MSABI_LONG(0x00000001)
1182 #define D3DSETSTATUS_EXTENTS  __MSABI_LONG(0x00000002)
1183 #define D3DSETSTATUS_ALL      (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS)
1184 
1185 typedef struct _D3DCLIPSTATUS {
1186   DWORD dwFlags;
1187   DWORD dwStatus;
1188   float minx, maxx;
1189   float miny, maxy;
1190   float minz, maxz;
1191 } D3DCLIPSTATUS, *LPD3DCLIPSTATUS;
1192 
1193 #define D3DCLIPSTATUS_STATUS        __MSABI_LONG(0x00000001)
1194 #define D3DCLIPSTATUS_EXTENTS2      __MSABI_LONG(0x00000002)
1195 #define D3DCLIPSTATUS_EXTENTS3      __MSABI_LONG(0x00000004)
1196 
1197 typedef struct {
1198   DWORD        dwSize;
1199   DWORD        dwTrianglesDrawn;
1200   DWORD        dwLinesDrawn;
1201   DWORD        dwPointsDrawn;
1202   DWORD        dwSpansDrawn;
1203   DWORD        dwVerticesProcessed;
1204 } D3DSTATS, *LPD3DSTATS;
1205 
1206 #define D3DEXECUTE_CLIPPED       __MSABI_LONG(0x00000001)
1207 #define D3DEXECUTE_UNCLIPPED     __MSABI_LONG(0x00000002)
1208 
1209 typedef struct _D3DEXECUTEDATA {
1210   DWORD     dwSize;
1211   DWORD     dwVertexOffset;
1212   DWORD     dwVertexCount;
1213   DWORD     dwInstructionOffset;
1214   DWORD     dwInstructionLength;
1215   DWORD     dwHVertexOffset;
1216   D3DSTATUS dsStatus;
1217 } D3DEXECUTEDATA, *LPD3DEXECUTEDATA;
1218 
1219 #define D3DPAL_FREE 0x00
1220 #define D3DPAL_READONLY 0x40
1221 #define D3DPAL_RESERVED 0x80
1222 
1223 typedef struct _D3DVERTEXBUFFERDESC {
1224   DWORD dwSize;
1225   DWORD dwCaps;
1226   DWORD dwFVF;
1227   DWORD dwNumVertices;
1228 } D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC;
1229 
1230 #define D3DVBCAPS_SYSTEMMEMORY      __MSABI_LONG(0x00000800)
1231 #define D3DVBCAPS_WRITEONLY         __MSABI_LONG(0x00010000)
1232 #define D3DVBCAPS_OPTIMIZED         __MSABI_LONG(0x80000000)
1233 #define D3DVBCAPS_DONOTCLIP         __MSABI_LONG(0x00000001)
1234 
1235 #define D3DVOP_LIGHT       (1 << 10)
1236 #define D3DVOP_TRANSFORM   (1 << 0)
1237 #define D3DVOP_CLIP        (1 << 2)
1238 #define D3DVOP_EXTENTS     (1 << 3)
1239 
1240 #define D3DMAXNUMVERTICES    ((1<<16) - 1)
1241 
1242 #define D3DMAXNUMPRIMITIVES  ((1<<16) - 1)
1243 
1244 #define D3DPV_DONOTCOPYDATA (1 << 0)
1245 
1246 #define D3DFVF_RESERVED0        0x001
1247 #define D3DFVF_POSITION_MASK    0x00E
1248 #define D3DFVF_XYZ              0x002
1249 #define D3DFVF_XYZRHW           0x004
1250 #define D3DFVF_XYZB1            0x006
1251 #define D3DFVF_XYZB2            0x008
1252 #define D3DFVF_XYZB3            0x00a
1253 #define D3DFVF_XYZB4            0x00c
1254 #define D3DFVF_XYZB5            0x00e
1255 
1256 #define D3DFVF_NORMAL           0x010
1257 #define D3DFVF_RESERVED1        0x020
1258 #define D3DFVF_DIFFUSE          0x040
1259 #define D3DFVF_SPECULAR         0x080
1260 #define D3DFVF_TEXCOUNT_MASK    0xf00
1261 #define D3DFVF_TEXCOUNT_SHIFT   8
1262 #define D3DFVF_TEX0             0x000
1263 #define D3DFVF_TEX1             0x100
1264 #define D3DFVF_TEX2             0x200
1265 #define D3DFVF_TEX3             0x300
1266 #define D3DFVF_TEX4             0x400
1267 #define D3DFVF_TEX5             0x500
1268 #define D3DFVF_TEX6             0x600
1269 #define D3DFVF_TEX7             0x700
1270 #define D3DFVF_TEX8             0x800
1271 
1272 #define D3DFVF_RESERVED2        0xf000
1273 
1274 #define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )
1275 #define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \
1276                          D3DFVF_SPECULAR | D3DFVF_TEX1 )
1277 #define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \
1278                           D3DFVF_TEX1 )
1279 
1280 typedef struct _D3DDP_PTRSTRIDE
1281 {
1282   void *lpvData;
1283   DWORD dwStride;
1284 } D3DDP_PTRSTRIDE;
1285 
1286 #define D3DDP_MAXTEXCOORD 8
1287 
1288 typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA  {
1289   D3DDP_PTRSTRIDE position;
1290   D3DDP_PTRSTRIDE normal;
1291   D3DDP_PTRSTRIDE diffuse;
1292   D3DDP_PTRSTRIDE specular;
1293   D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD];
1294 } D3DDRAWPRIMITIVESTRIDEDDATA ,*LPD3DDRAWPRIMITIVESTRIDEDDATA;
1295 
1296 #define D3DVIS_INSIDE_FRUSTUM       0
1297 #define D3DVIS_INTERSECT_FRUSTUM    1
1298 #define D3DVIS_OUTSIDE_FRUSTUM      2
1299 #define D3DVIS_INSIDE_LEFT          0
1300 #define D3DVIS_INTERSECT_LEFT       (1 << 2)
1301 #define D3DVIS_OUTSIDE_LEFT         (2 << 2)
1302 #define D3DVIS_INSIDE_RIGHT         0
1303 #define D3DVIS_INTERSECT_RIGHT      (1 << 4)
1304 #define D3DVIS_OUTSIDE_RIGHT        (2 << 4)
1305 #define D3DVIS_INSIDE_TOP           0
1306 #define D3DVIS_INTERSECT_TOP        (1 << 6)
1307 #define D3DVIS_OUTSIDE_TOP          (2 << 6)
1308 #define D3DVIS_INSIDE_BOTTOM        0
1309 #define D3DVIS_INTERSECT_BOTTOM     (1 << 8)
1310 #define D3DVIS_OUTSIDE_BOTTOM       (2 << 8)
1311 #define D3DVIS_INSIDE_NEAR          0
1312 #define D3DVIS_INTERSECT_NEAR       (1 << 10)
1313 #define D3DVIS_OUTSIDE_NEAR         (2 << 10)
1314 #define D3DVIS_INSIDE_FAR           0
1315 #define D3DVIS_INTERSECT_FAR        (1 << 12)
1316 #define D3DVIS_OUTSIDE_FAR          (2 << 12)
1317 
1318 #define D3DVIS_MASK_FRUSTUM         (3 << 0)
1319 #define D3DVIS_MASK_LEFT            (3 << 2)
1320 #define D3DVIS_MASK_RIGHT           (3 << 4)
1321 #define D3DVIS_MASK_TOP             (3 << 6)
1322 #define D3DVIS_MASK_BOTTOM          (3 << 8)
1323 #define D3DVIS_MASK_NEAR            (3 << 10)
1324 #define D3DVIS_MASK_FAR             (3 << 12)
1325 
1326 #define D3DDEVINFOID_TEXTUREMANAGER    1
1327 #define D3DDEVINFOID_D3DTEXTUREMANAGER 2
1328 #define D3DDEVINFOID_TEXTURING         3
1329 
1330 typedef enum _D3DSTATEBLOCKTYPE
1331 {
1332     D3DSBT_ALL           = 1,
1333     D3DSBT_PIXELSTATE    = 2,
1334     D3DSBT_VERTEXSTATE   = 3,
1335     D3DSBT_FORCE_DWORD   = 0xffffffff
1336 } D3DSTATEBLOCKTYPE;
1337 
1338 typedef enum _D3DVERTEXBLENDFLAGS
1339 {
1340     D3DVBLEND_DISABLE  = 0,
1341     D3DVBLEND_1WEIGHT  = 1,
1342     D3DVBLEND_2WEIGHTS = 2,
1343     D3DVBLEND_3WEIGHTS = 3,
1344 } D3DVERTEXBLENDFLAGS;
1345 
1346 typedef enum _D3DTEXTURETRANSFORMFLAGS {
1347     D3DTTFF_DISABLE         = 0,
1348     D3DTTFF_COUNT1          = 1,
1349     D3DTTFF_COUNT2          = 2,
1350     D3DTTFF_COUNT3          = 3,
1351     D3DTTFF_COUNT4          = 4,
1352     D3DTTFF_PROJECTED       = 256,
1353     D3DTTFF_FORCE_DWORD     = 0x7fffffff
1354 } D3DTEXTURETRANSFORMFLAGS;
1355 
1356 #define D3DFVF_TEXTUREFORMAT2 0
1357 #define D3DFVF_TEXTUREFORMAT1 3
1358 #define D3DFVF_TEXTUREFORMAT3 1
1359 #define D3DFVF_TEXTUREFORMAT4 2
1360 
1361 #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
1362 #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
1363 #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
1364 #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
1365 
1366 #ifdef __i386__
1367 #include <poppack.h>
1368 #endif
1369 
1370 #endif
1371