/[cvs]/api/include/d3d8types.h
ViewVC logotype

Annotation of /api/include/d3d8types.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Sun Jul 1 20:47:59 2001 UTC (22 years, 10 months ago) by bearsoft
Branch point for: lazy, MAIN
File MIME type: text/plain
Initial revision

1 bearsoft 1.1 /*==========================================================================;
2     *
3     * Copyright (C) 1995-2000 Microsoft Corporation. All Rights Reserved.
4     *
5     * File: d3d8types.h
6     * Content: Direct3D capabilities include file
7     *
8     ***************************************************************************/
9    
10     #ifndef _D3D8TYPES_H_
11     #define _D3D8TYPES_H_
12    
13     #ifndef DIRECT3D_VERSION
14     #define DIRECT3D_VERSION 0x0800
15     #endif //DIRECT3D_VERSION
16    
17     // include this file content only if compiling for DX8 interfaces
18     #if(DIRECT3D_VERSION >= 0x0800)
19    
20     #include <float.h>
21    
22     #pragma warning(disable:4201) // anonymous unions warning
23     #pragma pack(4)
24    
25     // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8
26     #ifndef D3DCOLOR_DEFINED
27     typedef DWORD D3DCOLOR;
28     #define D3DCOLOR_DEFINED
29     #endif
30    
31     // maps unsigned 8 bits/channel to D3DCOLOR
32     #define D3DCOLOR_ARGB(a,r,g,b) \
33     ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
34     #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
35     #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)
36    
37     // maps floating point channels (0.f to 1.f range) to D3DCOLOR
38     #define D3DCOLOR_COLORVALUE(r,g,b,a) \
39     D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
40    
41    
42     #ifndef D3DVECTOR_DEFINED
43     typedef struct _D3DVECTOR {
44     float x;
45     float y;
46     float z;
47     } D3DVECTOR;
48     #define D3DVECTOR_DEFINED
49     #endif
50    
51     #ifndef D3DCOLORVALUE_DEFINED
52     typedef struct _D3DCOLORVALUE {
53     float r;
54     float g;
55     float b;
56     float a;
57     } D3DCOLORVALUE;
58     #define D3DCOLORVALUE_DEFINED
59     #endif
60    
61     #ifndef D3DRECT_DEFINED
62     typedef struct _D3DRECT {
63     LONG x1;
64     LONG y1;
65     LONG x2;
66     LONG y2;
67     } D3DRECT;
68     #define D3DRECT_DEFINED
69     #endif
70    
71     #ifndef D3DMATRIX_DEFINED
72     typedef struct _D3DMATRIX {
73     union {
74     struct {
75     float _11, _12, _13, _14;
76     float _21, _22, _23, _24;
77     float _31, _32, _33, _34;
78     float _41, _42, _43, _44;
79    
80     };
81     float m[4][4];
82     };
83     } D3DMATRIX;
84     #define D3DMATRIX_DEFINED
85     #endif
86    
87     typedef struct _D3DVIEWPORT8 {
88     DWORD X;
89     DWORD Y; /* Viewport Top left */
90     DWORD Width;
91     DWORD Height; /* Viewport Dimensions */
92     float MinZ; /* Min/max of clip Volume */
93     float MaxZ;
94     } D3DVIEWPORT8;
95    
96     /*
97     * Values for clip fields.
98     */
99    
100     // Max number of user clipping planes, supported in D3D.
101     #define D3DMAXUSERCLIPPLANES 32
102    
103     // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE
104     //
105     #define D3DCLIPPLANE0 (1 << 0)
106     #define D3DCLIPPLANE1 (1 << 1)
107     #define D3DCLIPPLANE2 (1 << 2)
108     #define D3DCLIPPLANE3 (1 << 3)
109     #define D3DCLIPPLANE4 (1 << 4)
110     #define D3DCLIPPLANE5 (1 << 5)
111    
112     // The following bits are used in the ClipUnion and ClipIntersection
113     // members of the D3DCLIPSTATUS8
114     //
115    
116     #define D3DCS_LEFT 0x00000001L
117     #define D3DCS_RIGHT 0x00000002L
118     #define D3DCS_TOP 0x00000004L
119     #define D3DCS_BOTTOM 0x00000008L
120     #define D3DCS_FRONT 0x00000010L
121     #define D3DCS_BACK 0x00000020L
122     #define D3DCS_PLANE0 0x00000040L
123     #define D3DCS_PLANE1 0x00000080L
124     #define D3DCS_PLANE2 0x00000100L
125     #define D3DCS_PLANE3 0x00000200L
126     #define D3DCS_PLANE4 0x00000400L
127     #define D3DCS_PLANE5 0x00000800L
128    
129     #define D3DCS_ALL D3DCS_LEFT | \
130     D3DCS_RIGHT | \
131     D3DCS_TOP | \
132     D3DCS_BOTTOM | \
133     D3DCS_FRONT | \
134     D3DCS_BACK | \
135     D3DCS_PLANE0 | \
136     D3DCS_PLANE1 | \
137     D3DCS_PLANE2 | \
138     D3DCS_PLANE3 | \
139     D3DCS_PLANE4 | \
140     D3DCS_PLANE5;
141    
142     typedef struct _D3DCLIPSTATUS8 {
143     DWORD ClipUnion;
144     DWORD ClipIntersection;
145     } D3DCLIPSTATUS8;
146    
147     typedef struct _D3DMATERIAL8 {
148     D3DCOLORVALUE Diffuse; /* Diffuse color RGBA */
149     D3DCOLORVALUE Ambient; /* Ambient color RGB */
150     D3DCOLORVALUE Specular; /* Specular 'shininess' */
151     D3DCOLORVALUE Emissive; /* Emissive color RGB */
152     float Power; /* Sharpness if specular highlight */
153     } D3DMATERIAL8;
154    
155     typedef enum _D3DLIGHTTYPE {
156     D3DLIGHT_POINT = 1,
157     D3DLIGHT_SPOT = 2,
158     D3DLIGHT_DIRECTIONAL = 3,
159     D3DLIGHT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
160     } D3DLIGHTTYPE;
161    
162     typedef struct _D3DLIGHT8 {
163     D3DLIGHTTYPE Type; /* Type of light source */
164     D3DCOLORVALUE Diffuse; /* Diffuse color of light */
165     D3DCOLORVALUE Specular; /* Specular color of light */
166     D3DCOLORVALUE Ambient; /* Ambient color of light */
167     D3DVECTOR Position; /* Position in world space */
168     D3DVECTOR Direction; /* Direction in world space */
169     float Range; /* Cutoff range */
170     float Falloff; /* Falloff */
171     float Attenuation0; /* Constant attenuation */
172     float Attenuation1; /* Linear attenuation */
173     float Attenuation2; /* Quadratic attenuation */
174     float Theta; /* Inner angle of spotlight cone */
175     float Phi; /* Outer angle of spotlight cone */
176     } D3DLIGHT8;
177    
178     /*
179     * Options for clearing
180     */
181     #define D3DCLEAR_TARGET 0x00000001l /* Clear target surface */
182     #define D3DCLEAR_ZBUFFER 0x00000002l /* Clear target z buffer */
183     #define D3DCLEAR_STENCIL 0x00000004l /* Clear stencil planes */
184    
185     /*
186     * The following defines the rendering states
187     */
188    
189     typedef enum _D3DSHADEMODE {
190     D3DSHADE_FLAT = 1,
191     D3DSHADE_GOURAUD = 2,
192     D3DSHADE_PHONG = 3,
193     D3DSHADE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
194     } D3DSHADEMODE;
195    
196     typedef enum _D3DFILLMODE {
197     D3DFILL_POINT = 1,
198     D3DFILL_WIREFRAME = 2,
199     D3DFILL_SOLID = 3,
200     D3DFILL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
201     } D3DFILLMODE;
202    
203     typedef struct _D3DLINEPATTERN {
204     WORD wRepeatFactor;
205     WORD wLinePattern;
206     } D3DLINEPATTERN;
207    
208     typedef enum _D3DBLEND {
209     D3DBLEND_ZERO = 1,
210     D3DBLEND_ONE = 2,
211     D3DBLEND_SRCCOLOR = 3,
212     D3DBLEND_INVSRCCOLOR = 4,
213     D3DBLEND_SRCALPHA = 5,
214     D3DBLEND_INVSRCALPHA = 6,
215     D3DBLEND_DESTALPHA = 7,
216     D3DBLEND_INVDESTALPHA = 8,
217     D3DBLEND_DESTCOLOR = 9,
218     D3DBLEND_INVDESTCOLOR = 10,
219     D3DBLEND_SRCALPHASAT = 11,
220     D3DBLEND_BOTHSRCALPHA = 12,
221     D3DBLEND_BOTHINVSRCALPHA = 13,
222     D3DBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
223     } D3DBLEND;
224    
225     typedef enum _D3DBLENDOP {
226     D3DBLENDOP_ADD = 1,
227     D3DBLENDOP_SUBTRACT = 2,
228     D3DBLENDOP_REVSUBTRACT = 3,
229     D3DBLENDOP_MIN = 4,
230     D3DBLENDOP_MAX = 5,
231     D3DBLENDOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
232     } D3DBLENDOP;
233    
234     typedef enum _D3DTEXTUREADDRESS {
235     D3DTADDRESS_WRAP = 1,
236     D3DTADDRESS_MIRROR = 2,
237     D3DTADDRESS_CLAMP = 3,
238     D3DTADDRESS_BORDER = 4,
239     D3DTADDRESS_MIRRORONCE = 5,
240     D3DTADDRESS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
241     } D3DTEXTUREADDRESS;
242    
243     typedef enum _D3DCULL {
244     D3DCULL_NONE = 1,
245     D3DCULL_CW = 2,
246     D3DCULL_CCW = 3,
247     D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
248     } D3DCULL;
249    
250     typedef enum _D3DCMPFUNC {
251     D3DCMP_NEVER = 1,
252     D3DCMP_LESS = 2,
253     D3DCMP_EQUAL = 3,
254     D3DCMP_LESSEQUAL = 4,
255     D3DCMP_GREATER = 5,
256     D3DCMP_NOTEQUAL = 6,
257     D3DCMP_GREATEREQUAL = 7,
258     D3DCMP_ALWAYS = 8,
259     D3DCMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
260     } D3DCMPFUNC;
261    
262     typedef enum _D3DSTENCILOP {
263     D3DSTENCILOP_KEEP = 1,
264     D3DSTENCILOP_ZERO = 2,
265     D3DSTENCILOP_REPLACE = 3,
266     D3DSTENCILOP_INCRSAT = 4,
267     D3DSTENCILOP_DECRSAT = 5,
268     D3DSTENCILOP_INVERT = 6,
269     D3DSTENCILOP_INCR = 7,
270     D3DSTENCILOP_DECR = 8,
271     D3DSTENCILOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
272     } D3DSTENCILOP;
273    
274     typedef enum _D3DFOGMODE {
275     D3DFOG_NONE = 0,
276     D3DFOG_EXP = 1,
277     D3DFOG_EXP2 = 2,
278     D3DFOG_LINEAR = 3,
279     D3DFOG_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
280     } D3DFOGMODE;
281    
282     typedef enum _D3DZBUFFERTYPE {
283     D3DZB_FALSE = 0,
284     D3DZB_TRUE = 1, // Z buffering
285     D3DZB_USEW = 2, // W buffering
286     D3DZB_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
287     } D3DZBUFFERTYPE;
288    
289     // Primitives supported by draw-primitive API
290     typedef enum _D3DPRIMITIVETYPE {
291     D3DPT_POINTLIST = 1,
292     D3DPT_LINELIST = 2,
293     D3DPT_LINESTRIP = 3,
294     D3DPT_TRIANGLELIST = 4,
295     D3DPT_TRIANGLESTRIP = 5,
296     D3DPT_TRIANGLEFAN = 6,
297     D3DPT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
298     } D3DPRIMITIVETYPE;
299    
300     typedef enum _D3DTRANSFORMSTATETYPE {
301     D3DTS_VIEW = 2,
302     D3DTS_PROJECTION = 3,
303     D3DTS_TEXTURE0 = 16,
304     D3DTS_TEXTURE1 = 17,
305     D3DTS_TEXTURE2 = 18,
306     D3DTS_TEXTURE3 = 19,
307     D3DTS_TEXTURE4 = 20,
308     D3DTS_TEXTURE5 = 21,
309     D3DTS_TEXTURE6 = 22,
310     D3DTS_TEXTURE7 = 23,
311     D3DTS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
312     } D3DTRANSFORMSTATETYPE;
313    
314     #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
315     #define D3DTS_WORLD D3DTS_WORLDMATRIX(0)
316     #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
317     #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
318     #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
319    
320     typedef enum _D3DRENDERSTATETYPE {
321     D3DRS_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */
322     D3DRS_FILLMODE = 8, /* D3DFILL_MODE */
323     D3DRS_SHADEMODE = 9, /* D3DSHADEMODE */
324     D3DRS_LINEPATTERN = 10, /* D3DLINEPATTERN */
325     D3DRS_ZWRITEENABLE = 14, /* TRUE to enable z writes */
326     D3DRS_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */
327     D3DRS_LASTPIXEL = 16, /* TRUE for last-pixel on lines */
328     D3DRS_SRCBLEND = 19, /* D3DBLEND */
329     D3DRS_DESTBLEND = 20, /* D3DBLEND */
330     D3DRS_CULLMODE = 22, /* D3DCULL */
331     D3DRS_ZFUNC = 23, /* D3DCMPFUNC */
332     D3DRS_ALPHAREF = 24, /* D3DFIXED */
333     D3DRS_ALPHAFUNC = 25, /* D3DCMPFUNC */
334     D3DRS_DITHERENABLE = 26, /* TRUE to enable dithering */
335     D3DRS_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */
336     D3DRS_FOGENABLE = 28, /* TRUE to enable fog blending */
337     D3DRS_SPECULARENABLE = 29, /* TRUE to enable specular */
338     D3DRS_ZVISIBLE = 30, /* TRUE to enable z checking */
339     D3DRS_FOGCOLOR = 34, /* D3DCOLOR */
340     D3DRS_FOGTABLEMODE = 35, /* D3DFOGMODE */
341     D3DRS_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */
342     D3DRS_FOGEND = 37, /* Fog end */
343     D3DRS_FOGDENSITY = 38, /* Fog density */
344     D3DRS_EDGEANTIALIAS = 40, /* TRUE to enable edge antialiasing */
345     D3DRS_ZBIAS = 47, /* LONG Z bias */
346     D3DRS_RANGEFOGENABLE = 48, /* Enables range-based fog */
347     D3DRS_STENCILENABLE = 52, /* BOOL enable/disable stenciling */
348     D3DRS_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */
349     D3DRS_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */
350     D3DRS_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */
351     D3DRS_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
352     D3DRS_STENCILREF = 57, /* Reference value used in stencil test */
353     D3DRS_STENCILMASK = 58, /* Mask value used in stencil test */
354     D3DRS_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */
355     D3DRS_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */
356     D3DRS_WRAP0 = 128, /* wrap for 1st texture coord. set */
357     D3DRS_WRAP1 = 129, /* wrap for 2nd texture coord. set */
358     D3DRS_WRAP2 = 130, /* wrap for 3rd texture coord. set */
359     D3DRS_WRAP3 = 131, /* wrap for 4th texture coord. set */
360     D3DRS_WRAP4 = 132, /* wrap for 5th texture coord. set */
361     D3DRS_WRAP5 = 133, /* wrap for 6th texture coord. set */
362     D3DRS_WRAP6 = 134, /* wrap for 7th texture coord. set */
363     D3DRS_WRAP7 = 135, /* wrap for 8th texture coord. set */
364     D3DRS_CLIPPING = 136,
365     D3DRS_LIGHTING = 137,
366     D3DRS_AMBIENT = 139,
367     D3DRS_FOGVERTEXMODE = 140,
368     D3DRS_COLORVERTEX = 141,
369     D3DRS_LOCALVIEWER = 142,
370     D3DRS_NORMALIZENORMALS = 143,
371     D3DRS_DIFFUSEMATERIALSOURCE = 145,
372     D3DRS_SPECULARMATERIALSOURCE = 146,
373     D3DRS_AMBIENTMATERIALSOURCE = 147,
374     D3DRS_EMISSIVEMATERIALSOURCE = 148,
375     D3DRS_VERTEXBLEND = 151,
376     D3DRS_CLIPPLANEENABLE = 152,
377     D3DRS_SOFTWAREVERTEXPROCESSING = 153,
378     D3DRS_POINTSIZE = 154, /* float point size */
379     D3DRS_POINTSIZE_MIN = 155, /* float point size min threshold */
380     D3DRS_POINTSPRITEENABLE = 156, /* BOOL point texture coord control */
381     D3DRS_POINTSCALEENABLE = 157, /* BOOL point size scale enable */
382     D3DRS_POINTSCALE_A = 158, /* float point attenuation A value */
383     D3DRS_POINTSCALE_B = 159, /* float point attenuation B value */
384     D3DRS_POINTSCALE_C = 160, /* float point attenuation C value */
385     D3DRS_MULTISAMPLEANTIALIAS = 161, // BOOL - set to do FSAA with multisample buffer
386     D3DRS_MULTISAMPLEMASK = 162, // DWORD - per-sample enable/disable
387     D3DRS_PATCHEDGESTYLE = 163, // Sets whether patch edges will use float style tessellation
388     D3DRS_PATCHSEGMENTS = 164, // Number of segments per edge when drawing patches
389     D3DRS_DEBUGMONITORTOKEN = 165, // DEBUG ONLY - token to debug monitor
390     D3DRS_POINTSIZE_MAX = 166, /* float point size max threshold */
391     D3DRS_INDEXEDVERTEXBLENDENABLE = 167,
392     D3DRS_COLORWRITEENABLE = 168, // per-channel write enable
393     D3DRS_TWEENFACTOR = 170, // float tween factor
394     D3DRS_BLENDOP = 171, // D3DBLENDOP setting
395    
396     D3DRS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
397     } D3DRENDERSTATETYPE;
398    
399     // Values for material source
400     typedef enum _D3DMATERIALCOLORSOURCE
401     {
402     D3DMCS_MATERIAL = 0, // Color from material is used
403     D3DMCS_COLOR1 = 1, // Diffuse vertex color is used
404     D3DMCS_COLOR2 = 2, // Specular vertex color is used
405     D3DMCS_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
406     } D3DMATERIALCOLORSOURCE;
407    
408     // Bias to apply to the texture coordinate set to apply a wrap to.
409     #define D3DRENDERSTATE_WRAPBIAS 128UL
410    
411     /* Flags to construct the WRAP render states */
412     #define D3DWRAP_U 0x00000001L
413     #define D3DWRAP_V 0x00000002L
414     #define D3DWRAP_W 0x00000004L
415    
416     /* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */
417     #define D3DWRAPCOORD_0 0x00000001L // same as D3DWRAP_U
418     #define D3DWRAPCOORD_1 0x00000002L // same as D3DWRAP_V
419     #define D3DWRAPCOORD_2 0x00000004L // same as D3DWRAP_W
420     #define D3DWRAPCOORD_3 0x00000008L
421    
422     /* Flags to construct D3DRS_COLORWRITEENABLE */
423     #define D3DCOLORWRITEENABLE_RED (1L<<0)
424     #define D3DCOLORWRITEENABLE_GREEN (1L<<1)
425     #define D3DCOLORWRITEENABLE_BLUE (1L<<2)
426     #define D3DCOLORWRITEENABLE_ALPHA (1L<<3)
427    
428     /*
429     * State enumerants for per-stage texture processing.
430     */
431     typedef enum _D3DTEXTURESTAGESTATETYPE
432     {
433     D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */
434     D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */
435     D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */
436     D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */
437     D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */
438     D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */
439     D3DTSS_BUMPENVMAT00 = 7, /* float (bump mapping matrix) */
440     D3DTSS_BUMPENVMAT01 = 8, /* float (bump mapping matrix) */
441     D3DTSS_BUMPENVMAT10 = 9, /* float (bump mapping matrix) */
442     D3DTSS_BUMPENVMAT11 = 10, /* float (bump mapping matrix) */
443     D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */
444     D3DTSS_ADDRESSU = 13, /* D3DTEXTUREADDRESS for U coordinate */
445     D3DTSS_ADDRESSV = 14, /* D3DTEXTUREADDRESS for V coordinate */
446     D3DTSS_BORDERCOLOR = 15, /* D3DCOLOR */
447     D3DTSS_MAGFILTER = 16, /* D3DTEXTUREFILTER filter to use for magnification */
448     D3DTSS_MINFILTER = 17, /* D3DTEXTUREFILTER filter to use for minification */
449     D3DTSS_MIPFILTER = 18, /* D3DTEXTUREFILTER filter to use between mipmaps during minification */
450     D3DTSS_MIPMAPLODBIAS = 19, /* float Mipmap LOD bias */
451     D3DTSS_MAXMIPLEVEL = 20, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */
452     D3DTSS_MAXANISOTROPY = 21, /* DWORD maximum anisotropy */
453     D3DTSS_BUMPENVLSCALE = 22, /* float scale for bump map luminance */
454     D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */
455     D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */
456     D3DTSS_ADDRESSW = 25, /* D3DTEXTUREADDRESS for W coordinate */
457     D3DTSS_COLORARG0 = 26, /* D3DTA_* third arg for triadic ops */
458     D3DTSS_ALPHAARG0 = 27, /* D3DTA_* third arg for triadic ops */
459     D3DTSS_RESULTARG = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */
460     D3DTSS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
461     } D3DTEXTURESTAGESTATETYPE;
462    
463     // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
464     // and normal in the camera space) should be taken as texture coordinates
465     // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
466     //
467     #define D3DTSS_TCI_PASSTHRU 0x00000000
468     #define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000
469     #define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000
470     #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000
471    
472     /*
473     * Enumerations for COLOROP and ALPHAOP texture blending operations set in
474     * texture processing stage controls in D3DRENDERSTATE.
475     */
476     typedef enum _D3DTEXTUREOP
477     {
478     // Control
479     D3DTOP_DISABLE = 1, // disables stage
480     D3DTOP_SELECTARG1 = 2, // the default
481     D3DTOP_SELECTARG2 = 3,
482    
483     // Modulate
484     D3DTOP_MODULATE = 4, // multiply args together
485     D3DTOP_MODULATE2X = 5, // multiply and 1 bit
486     D3DTOP_MODULATE4X = 6, // multiply and 2 bits
487    
488     // Add
489     D3DTOP_ADD = 7, // add arguments together
490     D3DTOP_ADDSIGNED = 8, // add with -0.5 bias
491     D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit
492     D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation
493     D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product
494     // Arg1 + Arg2 - Arg1*Arg2
495     // = Arg1 + (1-Arg1)*Arg2
496    
497     // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
498     D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha
499     D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha
500     D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRENDERSTATE_TEXTUREFACTOR
501    
502     // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
503     D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha
504     D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color
505    
506     // Specular mapping
507     D3DTOP_PREMODULATE = 17, // modulate with next texture before use
508     D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB
509     // COLOROP only
510     D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A
511     // COLOROP only
512     D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
513     // COLOROP only
514     D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
515     // COLOROP only
516    
517     // Bump mapping
518     D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation
519     D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel
520    
521     // This can do either diffuse or specular bump mapping with correct input.
522     // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
523     // where each component has been scaled and offset to make it signed.
524     // The result is replicated into all four (including alpha) channels.
525     // This is a valid COLOROP only.
526     D3DTOP_DOTPRODUCT3 = 24,
527    
528     // Triadic ops
529     D3DTOP_MULTIPLYADD = 25, // Arg0 + Arg1*Arg2
530     D3DTOP_LERP = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2
531    
532     D3DTOP_FORCE_DWORD = 0x7fffffff,
533     } D3DTEXTUREOP;
534    
535     /*
536     * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending
537     * operations set in texture processing stage controls in D3DRENDERSTATE.
538     */
539     #define D3DTA_SELECTMASK 0x0000000f // mask for arg selector
540     #define D3DTA_DIFFUSE 0x00000000 // select diffuse color (read only)
541     #define D3DTA_CURRENT 0x00000001 // select stage destination register (read/write)
542     #define D3DTA_TEXTURE 0x00000002 // select texture color (read only)
543     #define D3DTA_TFACTOR 0x00000003 // select RENDERSTATE_TEXTUREFACTOR (read only)
544     #define D3DTA_SPECULAR 0x00000004 // select specular color (read only)
545     #define D3DTA_TEMP 0x00000005 // select temporary register color (read/write)
546     #define D3DTA_COMPLEMENT 0x00000010 // take 1.0 - x (read modifier)
547     #define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components (read modifier)
548    
549     //
550     // Values for D3DTSS_***FILTER texture stage states
551     //
552     typedef enum _D3DTEXTUREFILTERTYPE
553     {
554     D3DTEXF_NONE = 0, // filtering disabled (valid for mip filter only)
555     D3DTEXF_POINT = 1, // nearest
556     D3DTEXF_LINEAR = 2, // linear interpolation
557     D3DTEXF_ANISOTROPIC = 3, // anisotropic
558     D3DTEXF_FLATCUBIC = 4, // cubic
559     D3DTEXF_GAUSSIANCUBIC = 5, // different cubic kernel
560     D3DTEXF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
561     } D3DTEXTUREFILTERTYPE;
562    
563     /* Bits for Flags in ProcessVertices call */
564    
565     #define D3DPV_DONOTCOPYDATA (1 << 0)
566    
567     //-------------------------------------------------------------------
568    
569     // Flexible vertex format bits
570     //
571     #define D3DFVF_RESERVED0 0x001
572     #define D3DFVF_POSITION_MASK 0x00E
573     #define D3DFVF_XYZ 0x002
574     #define D3DFVF_XYZRHW 0x004
575     #define D3DFVF_XYZB1 0x006
576     #define D3DFVF_XYZB2 0x008
577     #define D3DFVF_XYZB3 0x00a
578     #define D3DFVF_XYZB4 0x00c
579     #define D3DFVF_XYZB5 0x00e
580    
581     #define D3DFVF_NORMAL 0x010
582     #define D3DFVF_PSIZE 0x020
583     #define D3DFVF_DIFFUSE 0x040
584     #define D3DFVF_SPECULAR 0x080
585    
586     #define D3DFVF_TEXCOUNT_MASK 0xf00
587     #define D3DFVF_TEXCOUNT_SHIFT 8
588     #define D3DFVF_TEX0 0x000
589     #define D3DFVF_TEX1 0x100
590     #define D3DFVF_TEX2 0x200
591     #define D3DFVF_TEX3 0x300
592     #define D3DFVF_TEX4 0x400
593     #define D3DFVF_TEX5 0x500
594     #define D3DFVF_TEX6 0x600
595     #define D3DFVF_TEX7 0x700
596     #define D3DFVF_TEX8 0x800
597    
598     #define D3DFVF_LASTBETA_UBYTE4 0x1000
599    
600     #define D3DFVF_RESERVED2 0xE000 // 4 reserved bits
601    
602     //---------------------------------------------------------------------
603     // Vertex Shaders
604     //
605    
606     /*
607    
608     Vertex Shader Declaration
609    
610     The declaration portion of a vertex shader defines the static external
611     interface of the shader. The information in the declaration includes:
612    
613     - Assignments of vertex shader input registers to data streams. These
614     assignments bind a specific vertex register to a single component within a
615     vertex stream. A vertex stream element is identified by a byte offset
616     within the stream and a type. The type specifies the arithmetic data type
617     plus the dimensionality (1, 2, 3, or 4 values). Stream data which is
618     less than 4 values are always expanded out to 4 values with zero or more
619     0.F values and one 1.F value.
620    
621     - Assignment of vertex shader input registers to implicit data from the
622     primitive tessellator. This controls the loading of vertex data which is
623     not loaded from a stream, but rather is generated during primitive
624     tessellation prior to the vertex shader.
625    
626     - Loading data into the constant memory at the time a shader is set as the
627     current shader. Each token specifies values for one or more contiguous 4
628     DWORD constant registers. This allows the shader to update an arbitrary
629     subset of the constant memory, overwriting the device state (which
630     contains the current values of the constant memory). Note that these
631     values can be subsequently overwritten (between DrawPrimitive calls)
632     during the time a shader is bound to a device via the
633     SetVertexShaderConstant method.
634    
635    
636     Declaration arrays are single-dimensional arrays of DWORDs composed of
637     multiple tokens each of which is one or more DWORDs. The single-DWORD
638     token value 0xFFFFFFFF is a special token used to indicate the end of the
639     declaration array. The single DWORD token value 0x00000000 is a NOP token
640     with is ignored during the declaration parsing. Note that 0x00000000 is a
641     valid value for DWORDs following the first DWORD for multiple word tokens.
642    
643     [31:29] TokenType
644     0x0 - NOP (requires all DWORD bits to be zero)
645     0x1 - stream selector
646     0x2 - stream data definition (map to vertex input memory)
647     0x3 - vertex input memory from tessellator
648     0x4 - constant memory from shader
649     0x5 - extension
650     0x6 - reserved
651     0x7 - end-of-array (requires all DWORD bits to be 1)
652    
653     NOP Token (single DWORD token)
654     [31:29] 0x0
655     [28:00] 0x0
656    
657     Stream Selector (single DWORD token)
658     [31:29] 0x1
659     [28] indicates whether this is a tessellator stream
660     [27:04] 0x0
661     [03:00] stream selector (0..15)
662    
663     Stream Data Definition (single DWORD token)
664     Vertex Input Register Load
665     [31:29] 0x2
666     [28] 0x0
667     [27:20] 0x0
668     [19:16] type (dimensionality and data type)
669     [15:04] 0x0
670     [03:00] vertex register address (0..15)
671     Data Skip (no register load)
672     [31:29] 0x2
673     [28] 0x1
674     [27:20] 0x0
675     [19:16] count of DWORDS to skip over (0..15)
676     [15:00] 0x0
677     Vertex Input Memory from Tessellator Data (single DWORD token)
678     [31:29] 0x3
679     [28] indicates whether data is normals or u/v
680     [27:24] 0x0
681     [23:20] vertex register address (0..15)
682     [19:16] type (dimensionality)
683     [15:04] 0x0
684     [03:00] vertex register address (0..15)
685    
686     Constant Memory from Shader (multiple DWORD token)
687     [31:29] 0x4
688     [28:25] count of 4*DWORD constants to load (0..15)
689     [24:07] 0x0
690     [06:00] constant memory address (0..95)
691    
692     Extension Token (single or multiple DWORD token)
693     [31:29] 0x5
694     [28:24] count of additional DWORDs in token (0..31)
695     [23:00] extension-specific information
696    
697     End-of-array token (single DWORD token)
698     [31:29] 0x7
699     [28:00] 0x1fffffff
700    
701     The stream selector token must be immediately followed by a contiguous set of stream data definition tokens. This token sequence fully defines that stream, including the set of elements within the stream, the order in which the elements appear, the type of each element, and the vertex register into which to load an element.
702     Streams are allowed to include data which is not loaded into a vertex register, thus allowing data which is not used for this shader to exist in the vertex stream. This skipped data is defined only by a count of DWORDs to skip over, since the type information is irrelevant.
703     The token sequence:
704     Stream Select: stream=0
705     Stream Data Definition (Load): type=FLOAT3; register=3
706     Stream Data Definition (Load): type=FLOAT3; register=4
707     Stream Data Definition (Skip): count=2
708     Stream Data Definition (Load): type=FLOAT2; register=7
709    
710     defines stream zero to consist of 4 elements, 3 of which are loaded into registers and the fourth skipped over. Register 3 is loaded with the first three DWORDs in each vertex interpreted as FLOAT data. Register 4 is loaded with the 4th, 5th, and 6th DWORDs interpreted as FLOAT data. The next two DWORDs (7th and 8th) are skipped over and not loaded into any vertex input register. Register 7 is loaded with the 9th and 10th DWORDS interpreted as FLOAT data.
711     Placing of tokens other than NOPs between the Stream Selector and Stream Data Definition tokens is disallowed.
712    
713     */
714    
715     typedef enum _D3DVSD_TOKENTYPE
716     {
717     D3DVSD_TOKEN_NOP = 0, // NOP or extension
718     D3DVSD_TOKEN_STREAM, // stream selector
719     D3DVSD_TOKEN_STREAMDATA, // stream data definition (map to vertex input memory)
720     D3DVSD_TOKEN_TESSELLATOR, // vertex input memory from tessellator
721     D3DVSD_TOKEN_CONSTMEM, // constant memory from shader
722     D3DVSD_TOKEN_EXT, // extension
723     D3DVSD_TOKEN_END = 7, // end-of-array (requires all DWORD bits to be 1)
724     D3DVSD_FORCE_DWORD = 0x7fffffff,// force 32-bit size enum
725     } D3DVSD_TOKENTYPE;
726    
727     #define D3DVSD_TOKENTYPESHIFT 29
728     #define D3DVSD_TOKENTYPEMASK (7 << D3DVSD_TOKENTYPESHIFT)
729    
730     #define D3DVSD_STREAMNUMBERSHIFT 0
731     #define D3DVSD_STREAMNUMBERMASK (0xF << D3DVSD_STREAMNUMBERSHIFT)
732    
733     #define D3DVSD_DATALOADTYPESHIFT 28
734     #define D3DVSD_DATALOADTYPEMASK (0x1 << D3DVSD_DATALOADTYPESHIFT)
735    
736     #define D3DVSD_DATATYPESHIFT 16
737     #define D3DVSD_DATATYPEMASK (0xF << D3DVSD_DATATYPESHIFT)
738    
739     #define D3DVSD_SKIPCOUNTSHIFT 16
740     #define D3DVSD_SKIPCOUNTMASK (0xF << D3DVSD_SKIPCOUNTSHIFT)
741    
742     #define D3DVSD_VERTEXREGSHIFT 0
743     #define D3DVSD_VERTEXREGMASK (0x1F << D3DVSD_VERTEXREGSHIFT)
744    
745     #define D3DVSD_VERTEXREGINSHIFT 20
746     #define D3DVSD_VERTEXREGINMASK (0xF << D3DVSD_VERTEXREGINSHIFT)
747    
748     #define D3DVSD_CONSTCOUNTSHIFT 25
749     #define D3DVSD_CONSTCOUNTMASK (0xF << D3DVSD_CONSTCOUNTSHIFT)
750    
751     #define D3DVSD_CONSTADDRESSSHIFT 0
752     #define D3DVSD_CONSTADDRESSMASK (0x7F << D3DVSD_CONSTADDRESSSHIFT)
753    
754     #define D3DVSD_CONSTRSSHIFT 16
755     #define D3DVSD_CONSTRSMASK (0x1FFF << D3DVSD_CONSTRSSHIFT)
756    
757     #define D3DVSD_EXTCOUNTSHIFT 24
758     #define D3DVSD_EXTCOUNTMASK (0x1F << D3DVSD_EXTCOUNTSHIFT)
759    
760     #define D3DVSD_EXTINFOSHIFT 0
761     #define D3DVSD_EXTINFOMASK (0xFFFFFF << D3DVSD_EXTINFOSHIFT)
762    
763     #define D3DVSD_MAKETOKENTYPE(tokenType) ((tokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
764    
765     // macros for generation of CreateVertexShader Declaration token array
766    
767     // Set current stream
768     // _StreamNumber [0..(MaxStreams-1)] stream to get data from
769     //
770     #define D3DVSD_STREAM( _StreamNumber ) \
771     (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (_StreamNumber))
772    
773     // Set tessellator stream
774     //
775     #define D3DVSD_STREAMTESSSHIFT 28
776     #define D3DVSD_STREAMTESSMASK (1 << D3DVSD_STREAMTESSSHIFT)
777     #define D3DVSD_STREAM_TESS( ) \
778     (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))
779    
780     // bind single vertex register to vertex element from vertex stream
781     //
782     // _VertexRegister [0..15] address of the vertex register
783     // _Type [D3DVSDT_*] dimensionality and arithmetic data type
784    
785     #define D3DVSD_REG( _VertexRegister, _Type ) \
786     (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | \
787     ((_Type) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))
788    
789     // Skip _DWORDCount DWORDs in vertex
790     //
791     #define D3DVSD_SKIP( _DWORDCount ) \
792     (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | \
793     ((_DWORDCount) << D3DVSD_SKIPCOUNTSHIFT))
794    
795     // load data into vertex shader constant memory
796     //
797     // _ConstantAddress [0..95] - address of constant array to begin filling data
798     // _Count [0..15] - number of constant vectors to load (4 DWORDs each)
799     // followed by 4*_Count DWORDS of data
800     //
801     #define D3DVSD_CONST( _ConstantAddress, _Count ) \
802     (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | \
803     ((_Count) << D3DVSD_CONSTCOUNTSHIFT) | (_ConstantAddress))
804    
805     // enable tessellator generated normals
806     //
807     // _VertexRegisterIn [0..15] address of vertex register whose input stream
808     // will be used in normal computation
809     // _VertexRegisterOut [0..15] address of vertex register to output the normal to
810     //
811     #define D3DVSD_TESSNORMAL( _VertexRegisterIn, _VertexRegisterOut ) \
812     (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | \
813     ((_VertexRegisterIn) << D3DVSD_VERTEXREGINSHIFT) | \
814     ((0x02) << D3DVSD_DATATYPESHIFT) | (_VertexRegisterOut))
815    
816     // enable tessellator generated surface parameters
817     //
818     // _VertexRegister [0..15] address of vertex register to output parameters
819     //
820     #define D3DVSD_TESSUV( _VertexRegister ) \
821     (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | \
822     ((0x01) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))
823    
824     // Generates END token
825     //
826     #define D3DVSD_END() 0xFFFFFFFF
827    
828     // Generates NOP token
829     #define D3DVSD_NOP() 0x00000000
830    
831     // bit declarations for _Type fields
832     #define D3DVSDT_FLOAT1 0x00 // 1D float expanded to (value, 0., 0., 1.)
833     #define D3DVSDT_FLOAT2 0x01 // 2D float expanded to (value, value, 0., 1.)
834     #define D3DVSDT_FLOAT3 0x02 // 3D float expanded to (value, value, value, 1.)
835     #define D3DVSDT_FLOAT4 0x03 // 4D float
836     #define D3DVSDT_D3DCOLOR 0x04 // 4D packed unsigned bytes mapped to 0. to 1. range
837     // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A)
838     #define D3DVSDT_UBYTE4 0x05 // 4D unsigned byte
839     #define D3DVSDT_SHORT2 0x06 // 2D signed short expanded to (value, value, 0., 1.)
840     #define D3DVSDT_SHORT4 0x07 // 4D signed short
841    
842     // assignments of vertex input registers for fixed function vertex shader
843     //
844     #define D3DVSDE_POSITION 0
845     #define D3DVSDE_BLENDWEIGHT 1
846     #define D3DVSDE_BLENDINDICES 2
847     #define D3DVSDE_NORMAL 3
848     #define D3DVSDE_PSIZE 4
849     #define D3DVSDE_DIFFUSE 5
850     #define D3DVSDE_SPECULAR 6
851     #define D3DVSDE_TEXCOORD0 7
852     #define D3DVSDE_TEXCOORD1 8
853     #define D3DVSDE_TEXCOORD2 9
854     #define D3DVSDE_TEXCOORD3 10
855     #define D3DVSDE_TEXCOORD4 11
856     #define D3DVSDE_TEXCOORD5 12
857     #define D3DVSDE_TEXCOORD6 13
858     #define D3DVSDE_TEXCOORD7 14
859     #define D3DVSDE_POSITION2 15
860     #define D3DVSDE_NORMAL2 16
861    
862     // Maximum supported number of texture coordinate sets
863     #define D3DDP_MAXTEXCOORD 8
864    
865    
866     //
867     // Instruction Token Bit Definitions
868     //
869     #define D3DSI_OPCODE_MASK 0x0000FFFF
870    
871     typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE
872     {
873     D3DSIO_NOP = 0, // PS/VS
874     D3DSIO_MOV , // PS/VS
875     D3DSIO_ADD , // PS/VS
876     D3DSIO_SUB , // PS
877     D3DSIO_MAD , // PS/VS
878     D3DSIO_MUL , // PS/VS
879     D3DSIO_RCP , // VS
880     D3DSIO_RSQ , // VS
881     D3DSIO_DP3 , // PS/VS
882     D3DSIO_DP4 , // PS/VS
883     D3DSIO_MIN , // VS
884     D3DSIO_MAX , // VS
885     D3DSIO_SLT , // VS
886     D3DSIO_SGE , // VS
887     D3DSIO_EXP , // VS
888     D3DSIO_LOG , // VS
889     D3DSIO_LIT , // VS
890     D3DSIO_DST , // VS
891     D3DSIO_LRP , // PS
892     D3DSIO_FRC , // VS
893     D3DSIO_M4x4 , // VS
894     D3DSIO_M4x3 , // VS
895     D3DSIO_M3x4 , // VS
896     D3DSIO_M3x3 , // VS
897     D3DSIO_M3x2 , // VS
898    
899     D3DSIO_TEXCOORD = 64, // PS
900     D3DSIO_TEXKILL , // PS
901     D3DSIO_TEX , // PS
902     D3DSIO_TEXBEM , // PS
903     D3DSIO_TEXBEML , // PS
904     D3DSIO_TEXREG2AR , // PS
905     D3DSIO_TEXREG2GB , // PS
906     D3DSIO_TEXM3x2PAD , // PS
907     D3DSIO_TEXM3x2TEX , // PS
908     D3DSIO_TEXM3x3PAD , // PS
909     D3DSIO_TEXM3x3TEX , // PS
910     D3DSIO_TEXM3x3DIFF , // PS
911     D3DSIO_TEXM3x3SPEC , // PS
912     D3DSIO_TEXM3x3VSPEC , // PS
913     D3DSIO_EXPP , // VS
914     D3DSIO_LOGP , // VS
915     D3DSIO_CND , // PS
916     D3DSIO_DEF , // PS
917     D3DSIO_COMMENT = 0xFFFE,
918     D3DSIO_END = 0xFFFF,
919    
920     D3DSIO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
921     } D3DSHADER_INSTRUCTION_OPCODE_TYPE;
922    
923     //
924     // Co-Issue Instruction Modifier - if set then this instruction is to be
925     // issued in parallel with the previous instruction(s) for which this bit
926     // is not set.
927     //
928     #define D3DSI_COISSUE 0x40000000
929    
930     //
931     // Parameter Token Bit Definitions
932     //
933     #define D3DSP_REGNUM_MASK 0x00000FFF
934    
935     // destination parameter write mask
936     #define D3DSP_WRITEMASK_0 0x00010000 // Component 0 (X;Red)
937     #define D3DSP_WRITEMASK_1 0x00020000 // Component 1 (Y;Green)
938     #define D3DSP_WRITEMASK_2 0x00040000 // Component 2 (Z;Blue)
939     #define D3DSP_WRITEMASK_3 0x00080000 // Component 3 (W;Alpha)
940     #define D3DSP_WRITEMASK_ALL 0x000F0000 // All Components
941    
942     // destination parameter modifiers
943     #define D3DSP_DSTMOD_SHIFT 20
944     #define D3DSP_DSTMOD_MASK 0x00F00000
945    
946     typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE
947     {
948     D3DSPDM_NONE = 0<<D3DSP_DSTMOD_SHIFT, // nop
949     D3DSPDM_SATURATE= 1<<D3DSP_DSTMOD_SHIFT, // clamp to 0. to 1. range
950     D3DSPDM_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
951     } D3DSHADER_PARAM_DSTMOD_TYPE;
952    
953     // destination parameter
954     #define D3DSP_DSTSHIFT_SHIFT 24
955     #define D3DSP_DSTSHIFT_MASK 0x0F000000
956    
957     // destination/source parameter register type
958     #define D3DSP_REGTYPE_SHIFT 28
959     #define D3DSP_REGTYPE_MASK 0x70000000
960    
961     typedef enum _D3DSHADER_PARAM_REGISTER_TYPE
962     {
963     D3DSPR_TEMP = 0<<D3DSP_REGTYPE_SHIFT, // Temporary Register File
964     D3DSPR_INPUT = 1<<D3DSP_REGTYPE_SHIFT, // Input Register File
965     D3DSPR_CONST = 2<<D3DSP_REGTYPE_SHIFT, // Constant Register File
966     D3DSPR_ADDR = 3<<D3DSP_REGTYPE_SHIFT, // Address Register (VS)
967     D3DSPR_TEXTURE = 3<<D3DSP_REGTYPE_SHIFT, // Texture Register File (PS)
968     D3DSPR_RASTOUT = 4<<D3DSP_REGTYPE_SHIFT, // Rasterizer Register File
969     D3DSPR_ATTROUT = 5<<D3DSP_REGTYPE_SHIFT, // Attribute Output Register File
970     D3DSPR_TEXCRDOUT= 6<<D3DSP_REGTYPE_SHIFT, // Texture Coordinate Output Register File
971     D3DSPR_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
972     } D3DSHADER_PARAM_REGISTER_TYPE;
973    
974     // Register offsets in the Rasterizer Register File
975     //
976     typedef enum _D3DVS_RASTOUT_OFFSETS
977     {
978     D3DSRO_POSITION = 0,
979     D3DSRO_FOG,
980     D3DSRO_POINT_SIZE,
981     D3DSRO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
982     } D3DVS_RASTOUT_OFFSETS;
983    
984     // Source operand addressing modes
985    
986     #define D3DVS_ADDRESSMODE_SHIFT 13
987     #define D3DVS_ADDRESSMODE_MASK (1 << D3DVS_ADDRESSMODE_SHIFT)
988    
989     typedef enum _D3DVS_ADDRESSMODE_TYPE
990     {
991     D3DVS_ADDRMODE_ABSOLUTE = (0 << D3DVS_ADDRESSMODE_SHIFT),
992     D3DVS_ADDRMODE_RELATIVE = (1 << D3DVS_ADDRESSMODE_SHIFT), // Relative to register A0
993     D3DVS_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
994     } D3DVS_ADDRESSMODE_TYPE;
995    
996     // Source operand swizzle definitions
997     //
998     #define D3DVS_SWIZZLE_SHIFT 16
999     #define D3DVS_SWIZZLE_MASK 0x00FF0000
1000    
1001     // The following bits define where to take component X:
1002    
1003     #define D3DVS_X_X (0 << D3DVS_SWIZZLE_SHIFT)
1004     #define D3DVS_X_Y (1 << D3DVS_SWIZZLE_SHIFT)
1005     #define D3DVS_X_Z (2 << D3DVS_SWIZZLE_SHIFT)
1006     #define D3DVS_X_W (3 << D3DVS_SWIZZLE_SHIFT)
1007    
1008     // The following bits define where to take component Y:
1009    
1010     #define D3DVS_Y_X (0 << (D3DVS_SWIZZLE_SHIFT + 2))
1011     #define D3DVS_Y_Y (1 << (D3DVS_SWIZZLE_SHIFT + 2))
1012     #define D3DVS_Y_Z (2 << (D3DVS_SWIZZLE_SHIFT + 2))
1013     #define D3DVS_Y_W (3 << (D3DVS_SWIZZLE_SHIFT + 2))
1014    
1015     // The following bits define where to take component Z:
1016    
1017     #define D3DVS_Z_X (0 << (D3DVS_SWIZZLE_SHIFT + 4))
1018     #define D3DVS_Z_Y (1 << (D3DVS_SWIZZLE_SHIFT + 4))
1019     #define D3DVS_Z_Z (2 << (D3DVS_SWIZZLE_SHIFT + 4))
1020     #define D3DVS_Z_W (3 << (D3DVS_SWIZZLE_SHIFT + 4))
1021    
1022     // The following bits define where to take component W:
1023    
1024     #define D3DVS_W_X (0 << (D3DVS_SWIZZLE_SHIFT + 6))
1025     #define D3DVS_W_Y (1 << (D3DVS_SWIZZLE_SHIFT + 6))
1026     #define D3DVS_W_Z (2 << (D3DVS_SWIZZLE_SHIFT + 6))
1027     #define D3DVS_W_W (3 << (D3DVS_SWIZZLE_SHIFT + 6))
1028    
1029     // Value when there is no swizzle (X is taken from X, Y is taken from Y,
1030     // Z is taken from Z, W is taken from W
1031     //
1032     #define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)
1033    
1034     // source parameter swizzle
1035     #define D3DSP_SWIZZLE_SHIFT 16
1036     #define D3DSP_SWIZZLE_MASK 0x00FF0000
1037    
1038     #define D3DSP_NOSWIZZLE \
1039     ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
1040     (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
1041     (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
1042     (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )
1043    
1044     // pixel-shader swizzle ops
1045     #define D3DSP_REPLICATEALPHA \
1046     ( (3 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
1047     (3 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
1048     (3 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
1049     (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )
1050    
1051     // source parameter modifiers
1052     #define D3DSP_SRCMOD_SHIFT 24
1053     #define D3DSP_SRCMOD_MASK 0x0F000000
1054    
1055     typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE
1056     {
1057     D3DSPSM_NONE = 0<<D3DSP_SRCMOD_SHIFT, // nop
1058     D3DSPSM_NEG = 1<<D3DSP_SRCMOD_SHIFT, // negate
1059     D3DSPSM_BIAS = 2<<D3DSP_SRCMOD_SHIFT, // bias
1060     D3DSPSM_BIASNEG = 3<<D3DSP_SRCMOD_SHIFT, // bias and negate
1061     D3DSPSM_SIGN = 4<<D3DSP_SRCMOD_SHIFT, // sign
1062     D3DSPSM_SIGNNEG = 5<<D3DSP_SRCMOD_SHIFT, // sign and negate
1063     D3DSPSM_COMP = 6<<D3DSP_SRCMOD_SHIFT, // complement
1064     D3DSPSM_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
1065     } D3DSHADER_PARAM_SRCMOD_TYPE;
1066    
1067     // pixel shader version token
1068     #define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))
1069    
1070     // vertex shader version token
1071     #define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))
1072    
1073     // extract major/minor from version cap
1074     #define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
1075     #define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
1076    
1077     // destination/source parameter register type
1078     #define D3DSI_COMMENTSIZE_SHIFT 16
1079     #define D3DSI_COMMENTSIZE_MASK 0x7FFF0000
1080     #define D3DSHADER_COMMENT(_DWordSize) \
1081     ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT)
1082    
1083     // pixel/vertex shader end token
1084     #define D3DPS_END() 0x0000FFFF
1085     #define D3DVS_END() 0x0000FFFF
1086    
1087     //---------------------------------------------------------------------
1088    
1089     // High order surfaces
1090     //
1091     typedef enum _D3DBASISTYPE
1092     {
1093     D3DBASIS_BEZIER = 0,
1094     D3DBASIS_BSPLINE = 1,
1095     D3DBASIS_INTERPOLATE = 2,
1096     D3DBASIS_FORCE_DWORD = 0x7fffffff,
1097     } D3DBASISTYPE;
1098    
1099     typedef enum _D3DORDERTYPE
1100     {
1101     D3DORDER_LINEAR = 1,
1102     D3DORDER_CUBIC = 3,
1103     D3DORDER_QUINTIC = 5,
1104     D3DORDER_FORCE_DWORD = 0x7fffffff,
1105     } D3DORDERTYPE;
1106    
1107     typedef enum _D3DPATCHEDGESTYLE
1108     {
1109     D3DPATCHEDGE_DISCRETE = 0,
1110     D3DPATCHEDGE_CONTINUOUS = 1,
1111     D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,
1112     } D3DPATCHEDGESTYLE;
1113    
1114     typedef enum _D3DSTATEBLOCKTYPE
1115     {
1116     D3DSBT_ALL = 1, // capture all state
1117     D3DSBT_PIXELSTATE = 2, // capture pixel state
1118     D3DSBT_VERTEXSTATE = 3, // capture vertex state
1119     D3DSBT_FORCE_DWORD = 0x7fffffff,
1120     } D3DSTATEBLOCKTYPE;
1121    
1122     // The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state.
1123     //
1124     typedef enum _D3DVERTEXBLENDFLAGS
1125     {
1126     D3DVBF_DISABLE = 0, // Disable vertex blending
1127     D3DVBF_1WEIGHTS = 1, // 2 matrix blending
1128     D3DVBF_2WEIGHTS = 2, // 3 matrix blending
1129     D3DVBF_3WEIGHTS = 3, // 4 matrix blending
1130     D3DVBF_TWEENING = 255, // blending using D3DRS_TWEENFACTOR
1131     D3DVBF_0WEIGHTS = 256, // one matrix is used with weight 1.0
1132     D3DVBF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
1133     } D3DVERTEXBLENDFLAGS;
1134    
1135     typedef enum _D3DTEXTURETRANSFORMFLAGS {
1136     D3DTTFF_DISABLE = 0, // texture coordinates are passed directly
1137     D3DTTFF_COUNT1 = 1, // rasterizer should expect 1-D texture coords
1138     D3DTTFF_COUNT2 = 2, // rasterizer should expect 2-D texture coords
1139     D3DTTFF_COUNT3 = 3, // rasterizer should expect 3-D texture coords
1140     D3DTTFF_COUNT4 = 4, // rasterizer should expect 4-D texture coords
1141     D3DTTFF_PROJECTED = 256, // texcoords to be divided by COUNTth element
1142     D3DTTFF_FORCE_DWORD = 0x7fffffff,
1143     } D3DTEXTURETRANSFORMFLAGS;
1144    
1145     // Macros to set texture coordinate format bits in the FVF id
1146    
1147     #define D3DFVF_TEXTUREFORMAT2 0 // Two floating point values
1148     #define D3DFVF_TEXTUREFORMAT1 3 // One floating point value
1149     #define D3DFVF_TEXTUREFORMAT3 1 // Three floating point values
1150     #define D3DFVF_TEXTUREFORMAT4 2 // Four floating point values
1151    
1152     #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
1153     #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
1154     #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
1155     #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
1156    
1157    
1158     //---------------------------------------------------------------------
1159    
1160     /* Direct3D8 Device types */
1161     typedef enum _D3DDEVTYPE
1162     {
1163     D3DDEVTYPE_HAL = 1,
1164     D3DDEVTYPE_REF = 2,
1165     D3DDEVTYPE_SW = 3,
1166    
1167     D3DDEVTYPE_FORCE_DWORD = 0x7fffffff
1168     } D3DDEVTYPE;
1169    
1170     /* Multi-Sample buffer types */
1171     typedef enum _D3DMULTISAMPLE_TYPE
1172     {
1173     D3DMULTISAMPLE_NONE = 0,
1174     D3DMULTISAMPLE_2_SAMPLES = 2,
1175     D3DMULTISAMPLE_3_SAMPLES = 3,
1176     D3DMULTISAMPLE_4_SAMPLES = 4,
1177     D3DMULTISAMPLE_5_SAMPLES = 5,
1178     D3DMULTISAMPLE_6_SAMPLES = 6,
1179     D3DMULTISAMPLE_7_SAMPLES = 7,
1180     D3DMULTISAMPLE_8_SAMPLES = 8,
1181     D3DMULTISAMPLE_9_SAMPLES = 9,
1182     D3DMULTISAMPLE_10_SAMPLES = 10,
1183     D3DMULTISAMPLE_11_SAMPLES = 11,
1184     D3DMULTISAMPLE_12_SAMPLES = 12,
1185     D3DMULTISAMPLE_13_SAMPLES = 13,
1186     D3DMULTISAMPLE_14_SAMPLES = 14,
1187     D3DMULTISAMPLE_15_SAMPLES = 15,
1188     D3DMULTISAMPLE_16_SAMPLES = 16,
1189    
1190     D3DMULTISAMPLE_FORCE_DWORD = 0x7fffffff
1191     } D3DMULTISAMPLE_TYPE;
1192    
1193     /* Formats
1194     * Most of these names have the following convention:
1195     * A = Alpha
1196     * R = Red
1197     * G = Green
1198     * B = Blue
1199     * X = Unused Bits
1200     * P = Palette
1201     * L = Luminance
1202     * U = dU coordinate for BumpMap
1203     * V = dV coordinate for BumpMap
1204     * S = Stencil
1205     * D = Depth (e.g. Z or W buffer)
1206     *
1207     * Further, the order of the pieces are from MSB first; hence
1208     * D3DFMT_A8L8 indicates that the high byte of this two byte
1209     * format is alpha.
1210     *
1211     * D16 indicates:
1212     * - An integer 16-bit value.
1213     * - An app-lockable surface.
1214     *
1215     * All Depth/Stencil formats except D3DFMT_D16_LOCKABLE indicate:
1216     * - no particular bit ordering per pixel, and
1217     * - are not app lockable, and
1218     * - the driver is allowed to consume more than the indicated
1219     * number of bits per Depth channel (but not Stencil channel).
1220     */
1221     #ifndef MAKEFOURCC
1222     #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
1223     ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
1224     ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
1225     #endif /* defined(MAKEFOURCC) */
1226    
1227    
1228     typedef enum _D3DFORMAT
1229     {
1230     D3DFMT_UNKNOWN = 0,
1231    
1232     D3DFMT_R8G8B8 = 20,
1233     D3DFMT_A8R8G8B8 = 21,
1234     D3DFMT_X8R8G8B8 = 22,
1235     D3DFMT_R5G6B5 = 23,
1236     D3DFMT_X1R5G5B5 = 24,
1237     D3DFMT_A1R5G5B5 = 25,
1238     D3DFMT_A4R4G4B4 = 26,
1239     D3DFMT_R3G3B2 = 27,
1240     D3DFMT_A8 = 28,
1241     D3DFMT_A8R3G3B2 = 29,
1242     D3DFMT_X4R4G4B4 = 30,
1243    
1244     D3DFMT_A8P8 = 40,
1245     D3DFMT_P8 = 41,
1246    
1247     D3DFMT_L8 = 50,
1248     D3DFMT_A8L8 = 51,
1249     D3DFMT_A4L4 = 52,
1250    
1251     D3DFMT_V8U8 = 60,
1252     D3DFMT_L6V5U5 = 61,
1253     D3DFMT_X8L8V8U8 = 62,
1254     D3DFMT_Q8W8V8U8 = 63,
1255     D3DFMT_V16U16 = 64,
1256     D3DFMT_W11V11U10 = 65,
1257    
1258     D3DFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'),
1259     D3DFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'),
1260     D3DFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'),
1261     D3DFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'),
1262     D3DFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'),
1263     D3DFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'),
1264     D3DFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'),
1265    
1266     D3DFMT_D16_LOCKABLE = 70,
1267     D3DFMT_D32 = 71,
1268     D3DFMT_D15S1 = 73,
1269     D3DFMT_D24S8 = 75,
1270     D3DFMT_D16 = 80,
1271     D3DFMT_D24X8 = 77,
1272     D3DFMT_D24X4S4 = 79,
1273    
1274    
1275     D3DFMT_VERTEXDATA =100,
1276     D3DFMT_INDEX16 =101,
1277     D3DFMT_INDEX32 =102,
1278    
1279     D3DFMT_FORCE_DWORD =0x7fffffff
1280     } D3DFORMAT;
1281    
1282     /* Display Modes */
1283     typedef struct _D3DDISPLAYMODE
1284     {
1285     UINT Width;
1286     UINT Height;
1287     UINT RefreshRate;
1288     D3DFORMAT Format;
1289     } D3DDISPLAYMODE;
1290    
1291     /* Creation Parameters */
1292     typedef struct _D3DDEVICE_CREATION_PARAMETERS
1293     {
1294     UINT AdapterOrdinal;
1295     D3DDEVTYPE DeviceType;
1296     HWND hFocusWindow;
1297     DWORD BehaviorFlags;
1298     } D3DDEVICE_CREATION_PARAMETERS;
1299    
1300    
1301     /* SwapEffects */
1302     typedef enum _D3DSWAPEFFECT
1303     {
1304     D3DSWAPEFFECT_DISCARD = 1,
1305     D3DSWAPEFFECT_FLIP = 2,
1306     D3DSWAPEFFECT_COPY = 3,
1307     D3DSWAPEFFECT_COPY_VSYNC = 4,
1308    
1309     D3DSWAPEFFECT_FORCE_DWORD = 0x7fffffff
1310     } D3DSWAPEFFECT;
1311    
1312     /* Pool types */
1313     typedef enum _D3DPOOL {
1314     D3DPOOL_DEFAULT = 0,
1315     D3DPOOL_MANAGED = 1,
1316     D3DPOOL_SYSTEMMEM = 2,
1317    
1318     D3DPOOL_FORCE_DWORD = 0x7fffffff
1319     } D3DPOOL;
1320    
1321    
1322     /* RefreshRate pre-defines */
1323     #define D3DPRESENT_RATE_DEFAULT 0x00000000
1324     #define D3DPRESENT_RATE_UNLIMITED 0x7fffffff
1325    
1326    
1327     /* Resize Optional Parameters */
1328     typedef struct _D3DPRESENT_PARAMETERS_
1329     {
1330     UINT BackBufferWidth;
1331     UINT BackBufferHeight;
1332     D3DFORMAT BackBufferFormat;
1333     UINT BackBufferCount;
1334    
1335     D3DMULTISAMPLE_TYPE MultiSampleType;
1336    
1337     D3DSWAPEFFECT SwapEffect;
1338     HWND hDeviceWindow;
1339     BOOL Windowed;
1340     BOOL EnableAutoDepthStencil;
1341     D3DFORMAT AutoDepthStencilFormat;
1342     DWORD Flags;
1343    
1344     /* Following elements must be zero for Windowed mode */
1345     UINT FullScreen_RefreshRateInHz;
1346     UINT FullScreen_PresentationInterval;
1347    
1348     } D3DPRESENT_PARAMETERS;
1349    
1350     // Values for D3DPRESENT_PARAMETERS.Flags
1351    
1352     #define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x00000001
1353    
1354    
1355     /* Gamma Ramp: Same as DX7 */
1356    
1357     typedef struct _D3DGAMMARAMP
1358     {
1359     WORD red [256];
1360     WORD green[256];
1361     WORD blue [256];
1362     } D3DGAMMARAMP;
1363    
1364     /* Back buffer types */
1365     typedef enum _D3DBACKBUFFER_TYPE
1366     {
1367     D3DBACKBUFFER_TYPE_MONO = 0,
1368     D3DBACKBUFFER_TYPE_LEFT = 1,
1369     D3DBACKBUFFER_TYPE_RIGHT = 2,
1370    
1371     D3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
1372     } D3DBACKBUFFER_TYPE;
1373    
1374    
1375     /* Types */
1376     typedef enum _D3DRESOURCETYPE {
1377     D3DRTYPE_SURFACE = 1,
1378     D3DRTYPE_VOLUME = 2,
1379     D3DRTYPE_TEXTURE = 3,
1380     D3DRTYPE_VOLUMETEXTURE = 4,
1381     D3DRTYPE_CUBETEXTURE = 5,
1382     D3DRTYPE_VERTEXBUFFER = 6,
1383     D3DRTYPE_INDEXBUFFER = 7,
1384    
1385    
1386     D3DRTYPE_FORCE_DWORD = 0x7fffffff
1387     } D3DRESOURCETYPE;
1388    
1389     /* Usages */
1390     #define D3DUSAGE_RENDERTARGET (0x00000001L)
1391     #define D3DUSAGE_DEPTHSTENCIL (0x00000002L)
1392    
1393     /* Usages for Vertex/Index buffers */
1394     #define D3DUSAGE_WRITEONLY (0x00000008L)
1395     #define D3DUSAGE_SOFTWAREPROCESSING (0x00000010L)
1396     #define D3DUSAGE_DONOTCLIP (0x00000020L)
1397     #define D3DUSAGE_POINTS (0x00000040L)
1398     #define D3DUSAGE_RTPATCHES (0x00000080L)
1399     #define D3DUSAGE_NPATCHES (0x00000100L)
1400     #define D3DUSAGE_DYNAMIC (0x00000200L)
1401    
1402    
1403    
1404    
1405    
1406    
1407    
1408    
1409    
1410     /* CubeMap Face identifiers */
1411     typedef enum _D3DCUBEMAP_FACES
1412     {
1413     D3DCUBEMAP_FACE_POSITIVE_X = 0,
1414     D3DCUBEMAP_FACE_NEGATIVE_X = 1,
1415     D3DCUBEMAP_FACE_POSITIVE_Y = 2,
1416     D3DCUBEMAP_FACE_NEGATIVE_Y = 3,
1417     D3DCUBEMAP_FACE_POSITIVE_Z = 4,
1418     D3DCUBEMAP_FACE_NEGATIVE_Z = 5,
1419    
1420     D3DCUBEMAP_FACE_FORCE_DWORD = 0x7fffffff
1421     } D3DCUBEMAP_FACES;
1422    
1423    
1424     /* Lock flags */
1425    
1426     #define D3DLOCK_READONLY 0x00000010L
1427     #define D3DLOCK_DISCARD 0x00002000L
1428     #define D3DLOCK_NOOVERWRITE 0x00001000L
1429     #define D3DLOCK_NOSYSLOCK 0x00000800L
1430    
1431     #define D3DLOCK_NO_DIRTY_UPDATE 0x00008000L
1432    
1433    
1434    
1435    
1436    
1437    
1438     /* Vertex Buffer Description */
1439     typedef struct _D3DVERTEXBUFFER_DESC
1440     {
1441     D3DFORMAT Format;
1442     D3DRESOURCETYPE Type;
1443     DWORD Usage;
1444     D3DPOOL Pool;
1445     UINT Size;
1446    
1447     DWORD FVF;
1448    
1449     } D3DVERTEXBUFFER_DESC;
1450    
1451     /* Index Buffer Description */
1452     typedef struct _D3DINDEXBUFFER_DESC
1453     {
1454     D3DFORMAT Format;
1455     D3DRESOURCETYPE Type;
1456     DWORD Usage;
1457     D3DPOOL Pool;
1458     UINT Size;
1459     } D3DINDEXBUFFER_DESC;
1460    
1461    
1462     /* Surface Description */
1463     typedef struct _D3DSURFACE_DESC
1464     {
1465     D3DFORMAT Format;
1466     D3DRESOURCETYPE Type;
1467     DWORD Usage;
1468     D3DPOOL Pool;
1469     UINT Size;
1470    
1471     D3DMULTISAMPLE_TYPE MultiSampleType;
1472     UINT Width;
1473     UINT Height;
1474     } D3DSURFACE_DESC;
1475    
1476     typedef struct _D3DVOLUME_DESC
1477     {
1478     D3DFORMAT Format;
1479     D3DRESOURCETYPE Type;
1480     DWORD Usage;
1481     D3DPOOL Pool;
1482     UINT Size;
1483    
1484     UINT Width;
1485     UINT Height;
1486     UINT Depth;
1487     } D3DVOLUME_DESC;
1488    
1489     /* Structure for LockRect */
1490     typedef struct _D3DLOCKED_RECT
1491     {
1492     INT Pitch;
1493     void* pBits;
1494     } D3DLOCKED_RECT;
1495    
1496     /* Structures for LockBox */
1497     typedef struct _D3DBOX
1498     {
1499     UINT Left;
1500     UINT Top;
1501     UINT Right;
1502     UINT Bottom;
1503     UINT Front;
1504     UINT Back;
1505     } D3DBOX;
1506    
1507     typedef struct _D3DLOCKED_BOX
1508     {
1509     INT RowPitch;
1510     INT SlicePitch;
1511     void* pBits;
1512     } D3DLOCKED_BOX;
1513    
1514     /* Structures for LockRange */
1515     typedef struct _D3DRANGE
1516     {
1517     UINT Offset;
1518     UINT Size;
1519     } D3DRANGE;
1520    
1521     /* Structures for high order primitives */
1522     typedef struct _D3DRECTPATCH_INFO
1523     {
1524     UINT StartVertexOffsetWidth;
1525     UINT StartVertexOffsetHeight;
1526     UINT Width;
1527     UINT Height;
1528     UINT Stride;
1529     D3DBASISTYPE Basis;
1530     D3DORDERTYPE Order;
1531     } D3DRECTPATCH_INFO;
1532    
1533     typedef struct _D3DTRIPATCH_INFO
1534     {
1535     UINT StartVertexOffset;
1536     UINT NumVertices;
1537     D3DBASISTYPE Basis;
1538     D3DORDERTYPE Order;
1539     } D3DTRIPATCH_INFO;
1540    
1541     /* Adapter Identifier */
1542    
1543     #define MAX_DEVICE_IDENTIFIER_STRING 512
1544     typedef struct _D3DADAPTER_IDENTIFIER8
1545     {
1546     char Driver[MAX_DEVICE_IDENTIFIER_STRING];
1547     char Description[MAX_DEVICE_IDENTIFIER_STRING];
1548    
1549     #ifdef _WIN32
1550     LARGE_INTEGER DriverVersion; /* Defined for 32 bit components */
1551     #else
1552     DWORD DriverVersionLowPart; /* Defined for 16 bit driver components */
1553     DWORD DriverVersionHighPart;
1554     #endif
1555    
1556     DWORD VendorId;
1557     DWORD DeviceId;
1558     DWORD SubSysId;
1559     DWORD Revision;
1560    
1561     GUID DeviceIdentifier;
1562    
1563     DWORD WHQLLevel;
1564    
1565     } D3DADAPTER_IDENTIFIER8;
1566    
1567    
1568     /* Raster Status structure returned by GetRasterStatus */
1569     typedef struct _D3DRASTER_STATUS
1570     {
1571     BOOL InVBlank;
1572     UINT ScanLine;
1573     } D3DRASTER_STATUS;
1574    
1575    
1576    
1577     /* Debug monitor tokens (DEBUG only)
1578    
1579     Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as
1580     passing a token to the debug monitor. For example, if, after passing
1581     D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values
1582     are passed in, the enabled/disabled state of the debug
1583     monitor will still persist.
1584    
1585     The debug monitor defaults to enabled.
1586    
1587     Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use.
1588     */
1589     typedef enum _D3DDEBUGMONITORTOKENS {
1590     D3DDMT_ENABLE = 0, // enable debug monitor
1591     D3DDMT_DISABLE = 1, // disable debug monitor
1592     D3DDMT_FORCE_DWORD = 0x7fffffff,
1593     } D3DDEBUGMONITORTOKENS;
1594    
1595     #pragma pack()
1596     #pragma warning(default:4201)
1597    
1598     #endif /* (DIRECT3D_VERSION >= 0x0800) */
1599     #endif /* _D3D8TYPES(P)_H_ */
1600    

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26