1 // Copyright © 2015, Corey Richardson
2 // Licensed under the MIT License <LICENSE.md>
3 //! Direct3D capabilities include file
4 pub type D3DCOLOR = ::DWORD;
5 STRUCT!{struct D3DVECTOR {
6     x: ::c_float,
7     y: ::c_float,
8     z: ::c_float,
9 }}
10 STRUCT!{struct D3DCOLORVALUE {
11     r: ::c_float,
12     g: ::c_float,
13     b: ::c_float,
14     a: ::c_float,
15 }}
16 STRUCT!{struct D3DRECT {
17     x1: ::LONG,
18     y1: ::LONG,
19     x2: ::LONG,
20     y2: ::LONG,
21 }}
22 STRUCT!{struct D3DMATRIX {
23     m: [[::c_float; 4]; 4],
24 }}
25 STRUCT!{struct D3DVIEWPORT9 {
26     X: ::DWORD,
27     Y: ::DWORD,
28     Width: ::DWORD,
29     Height: ::DWORD,
30     MinZ: ::c_float,
31     MaxZ: ::c_float,
32 }}
33 pub const D3DMAXUSERCLIPPLANES: ::DWORD = 32;
34 pub const D3DCLIPPLANE0: ::DWORD = (1 << 0);
35 pub const D3DCLIPPLANE1: ::DWORD = (1 << 1);
36 pub const D3DCLIPPLANE2: ::DWORD = (1 << 2);
37 pub const D3DCLIPPLANE3: ::DWORD = (1 << 3);
38 pub const D3DCLIPPLANE4: ::DWORD = (1 << 4);
39 pub const D3DCLIPPLANE5: ::DWORD = (1 << 5);
40 pub const D3DCS_LEFT: ::DWORD = 0x00000001;
41 pub const D3DCS_RIGHT: ::DWORD = 0x00000002;
42 pub const D3DCS_TOP: ::DWORD = 0x00000004;
43 pub const D3DCS_BOTTOM: ::DWORD = 0x00000008;
44 pub const D3DCS_FRONT: ::DWORD = 0x00000010;
45 pub const D3DCS_BACK: ::DWORD = 0x00000020;
46 pub const D3DCS_PLANE0: ::DWORD = 0x00000040;
47 pub const D3DCS_PLANE1: ::DWORD = 0x00000080;
48 pub const D3DCS_PLANE2: ::DWORD = 0x00000100;
49 pub const D3DCS_PLANE3: ::DWORD = 0x00000200;
50 pub const D3DCS_PLANE4: ::DWORD = 0x00000400;
51 pub const D3DCS_PLANE5: ::DWORD = 0x00000800;
52 pub const D3DCS_ALL: ::DWORD = D3DCS_LEFT | D3DCS_RIGHT | D3DCS_TOP | D3DCS_BOTTOM | D3DCS_FRONT
53     | D3DCS_BACK | D3DCS_PLANE0 | D3DCS_PLANE1 | D3DCS_PLANE2 | D3DCS_PLANE3 | D3DCS_PLANE4
54     | D3DCS_PLANE5;
55 STRUCT!{struct D3DCLIPSTATUS9 {
56     ClipUnion: ::DWORD,
57     ClipIntersection: ::DWORD,
58 }}
59 STRUCT!{struct D3DMATERIAL9 {
60     Diffuse: D3DCOLORVALUE,
61     Ambient: D3DCOLORVALUE,
62     Specular: D3DCOLORVALUE,
63     Emissive: D3DCOLORVALUE,
64     Power: ::c_float,
65 }}
66 ENUM!{enum D3DLIGHTTYPE {
67     D3DLIGHT_POINT = 1,
68     D3DLIGHT_SPOT = 2,
69     D3DLIGHT_DIRECTIONAL = 3,
70 }}
71 STRUCT!{struct D3DLIGHT9 {
72     Type: D3DLIGHTTYPE,
73     Diffuse: D3DCOLORVALUE,
74     Specular: D3DCOLORVALUE,
75     Ambient: D3DCOLORVALUE,
76     Position: D3DVECTOR,
77     Direction: D3DVECTOR,
78     Range: ::c_float,
79     Falloff: ::c_float,
80     Attenuation0: ::c_float,
81     Attenuation1: ::c_float,
82     Attenuation2: ::c_float,
83     Theta: ::c_float,
84     Phi: ::c_float,
85 }}
86 pub const D3DCLEAR_TARGET: ::DWORD = 0x1;
87 pub const D3DCLEAR_ZBUFFER: ::DWORD = 0x2;
88 pub const D3DCLEAR_STENCIL: ::DWORD = 0x4;
89 ENUM!{enum D3DSHADEMODE {
90     D3DSHADE_FLAT = 1,
91     D3DSHADE_GOURAUD = 2,
92     D3DSHADE_PHONG = 3,
93 }}
94 ENUM!{enum D3DFILLMODE {
95     D3DFILL_POINT = 1,
96     D3DFILL_WIREFRAME = 2,
97     D3DFILL_SOLID = 3,
98 }}
99 ENUM!{enum D3DBLEND {
100     D3DBLEND_ZERO = 1,
101     D3DBLEND_ONE = 2,
102     D3DBLEND_SRCCOLOR = 3,
103     D3DBLEND_INVSRCCOLOR = 4,
104     D3DBLEND_SRCALPHA = 5,
105     D3DBLEND_INVSRCALPHA = 6,
106     D3DBLEND_DESTALPHA = 7,
107     D3DBLEND_INVDESTALPHA = 8,
108     D3DBLEND_DESTCOLOR = 9,
109     D3DBLEND_INVDESTCOLOR = 10,
110     D3DBLEND_SRCALPHASAT = 11,
111     D3DBLEND_BOTHSRCALPHA = 12,
112     D3DBLEND_BOTHINVSRCALPHA = 13,
113     D3DBLEND_BLENDFACTOR = 14,
114     D3DBLEND_INVBLENDFACTOR = 15,
115 }}
116 ENUM!{enum D3DBLENDOP {
117     D3DBLENDOP_ADD = 1,
118     D3DBLENDOP_SUBTRACT = 2,
119     D3DBLENDOP_REVSUBTRACT = 3,
120     D3DBLENDOP_MIN = 4,
121     D3DBLENDOP_MAX = 5,
122 }}
123 ENUM!{enum D3DTEXTUREADDRESS {
124     D3DTADDRESS_WRAP = 1,
125     D3DTADDRESS_MIRROR = 2,
126     D3DTADDRESS_CLAMP = 3,
127     D3DTADDRESS_BORDER = 4,
128     D3DTADDRESS_MIRRORONCE = 5,
129 }}
130 ENUM!{enum D3DCULL {
131     D3DCULL_NONE = 1,
132     D3DCULL_CW = 2,
133     D3DCULL_CCW = 3,
134 }}
135 ENUM!{enum D3DCMPFUNC {
136     D3DCMP_NEVER = 1,
137     D3DCMP_LESS = 2,
138     D3DCMP_EQUAL = 3,
139     D3DCMP_LESSEQUAL = 4,
140     D3DCMP_GREATER = 5,
141     D3DCMP_NOTEQUAL = 6,
142     D3DCMP_GREATEREQUAL = 7,
143     D3DCMP_ALWAYS = 8,
144 }}
145 ENUM!{enum D3DSTENCILOP {
146     D3DSTENCILOP_KEEP = 1,
147     D3DSTENCILOP_ZERO = 2,
148     D3DSTENCILOP_REPLACE = 3,
149     D3DSTENCILOP_INCRSAT = 4,
150     D3DSTENCILOP_DECRSAT = 5,
151     D3DSTENCILOP_INVERT = 6,
152     D3DSTENCILOP_INCR = 7,
153     D3DSTENCILOP_DECR = 8,
154 }}
155 ENUM!{enum D3DFOGMODE {
156     D3DFOG_NONE = 0,
157     D3DFOG_EXP = 1,
158     D3DFOG_EXP2 = 2,
159     D3DFOG_LINEAR = 3,
160 }}
161 ENUM!{enum D3DZBUFFERTYPE {
162     D3DZB_FALSE = 0,
163     D3DZB_TRUE = 1,
164     D3DZB_USEW = 2,
165 }}
166 ENUM!{enum D3DPRIMITIVETYPE {
167     D3DPT_POINTLIST = 1,
168     D3DPT_LINELIST = 2,
169     D3DPT_LINESTRIP = 3,
170     D3DPT_TRIANGLELIST = 4,
171     D3DPT_TRIANGLESTRIP = 5,
172     D3DPT_TRIANGLEFAN = 6,
173 }}
174 ENUM!{enum D3DTRANSFORMSTATETYPE {
175     D3DTS_VIEW = 2,
176     D3DTS_PROJECTION = 3,
177     D3DTS_TEXTURE0 = 16,
178     D3DTS_TEXTURE1 = 17,
179     D3DTS_TEXTURE2 = 18,
180     D3DTS_TEXTURE3 = 19,
181     D3DTS_TEXTURE4 = 20,
182     D3DTS_TEXTURE5 = 21,
183     D3DTS_TEXTURE6 = 22,
184     D3DTS_TEXTURE7 = 23,
185 }}
186 ENUM!{enum D3DRENDERSTATETYPE {
187     D3DRS_ZENABLE = 7,
188     D3DRS_FILLMODE = 8,
189     D3DRS_SHADEMODE = 9,
190     D3DRS_ZWRITEENABLE = 14,
191     D3DRS_ALPHATESTENABLE = 15,
192     D3DRS_LASTPIXEL = 16,
193     D3DRS_SRCBLEND = 19,
194     D3DRS_DESTBLEND = 20,
195     D3DRS_CULLMODE = 22,
196     D3DRS_ZFUNC = 23,
197     D3DRS_ALPHAREF = 24,
198     D3DRS_ALPHAFUNC = 25,
199     D3DRS_DITHERENABLE = 26,
200     D3DRS_ALPHABLENDENABLE = 27,
201     D3DRS_FOGENABLE = 28,
202     D3DRS_SPECULARENABLE = 29,
203     D3DRS_FOGCOLOR = 34,
204     D3DRS_FOGTABLEMODE = 35,
205     D3DRS_FOGSTART = 36,
206     D3DRS_FOGEND = 37,
207     D3DRS_FOGDENSITY = 38,
208     D3DRS_RANGEFOGENABLE = 48,
209     D3DRS_STENCILENABLE = 52,
210     D3DRS_STENCILFAIL = 53,
211     D3DRS_STENCILZFAIL = 54,
212     D3DRS_STENCILPASS = 55,
213     D3DRS_STENCILFUNC = 56,
214     D3DRS_STENCILREF = 57,
215     D3DRS_STENCILMASK = 58,
216     D3DRS_STENCILWRITEMASK = 59,
217     D3DRS_TEXTUREFACTOR = 60,
218     D3DRS_WRAP0 = 128,
219     D3DRS_WRAP1 = 129,
220     D3DRS_WRAP2 = 130,
221     D3DRS_WRAP3 = 131,
222     D3DRS_WRAP4 = 132,
223     D3DRS_WRAP5 = 133,
224     D3DRS_WRAP6 = 134,
225     D3DRS_WRAP7 = 135,
226     D3DRS_CLIPPING = 136,
227     D3DRS_LIGHTING = 137,
228     D3DRS_AMBIENT = 139,
229     D3DRS_FOGVERTEXMODE = 140,
230     D3DRS_COLORVERTEX = 141,
231     D3DRS_LOCALVIEWER = 142,
232     D3DRS_NORMALIZENORMALS = 143,
233     D3DRS_DIFFUSEMATERIALSOURCE = 145,
234     D3DRS_SPECULARMATERIALSOURCE = 146,
235     D3DRS_AMBIENTMATERIALSOURCE = 147,
236     D3DRS_EMISSIVEMATERIALSOURCE = 148,
237     D3DRS_VERTEXBLEND = 151,
238     D3DRS_CLIPPLANEENABLE = 152,
239     D3DRS_POINTSIZE = 154,
240     D3DRS_POINTSIZE_MIN = 155,
241     D3DRS_POINTSPRITEENABLE = 156,
242     D3DRS_POINTSCALEENABLE = 157,
243     D3DRS_POINTSCALE_A = 158,
244     D3DRS_POINTSCALE_B = 159,
245     D3DRS_POINTSCALE_C = 160,
246     D3DRS_MULTISAMPLEANTIALIAS = 161,
247     D3DRS_MULTISAMPLEMASK = 162,
248     D3DRS_PATCHEDGESTYLE = 163,
249     D3DRS_DEBUGMONITORTOKEN = 165,
250     D3DRS_POINTSIZE_MAX = 166,
251     D3DRS_INDEXEDVERTEXBLENDENABLE = 167,
252     D3DRS_COLORWRITEENABLE = 168,
253     D3DRS_TWEENFACTOR = 170,
254     D3DRS_BLENDOP = 171,
255     D3DRS_POSITIONDEGREE = 172,
256     D3DRS_NORMALDEGREE = 173,
257     D3DRS_SCISSORTESTENABLE = 174,
258     D3DRS_SLOPESCALEDEPTHBIAS = 175,
259     D3DRS_ANTIALIASEDLINEENABLE = 176,
260     D3DRS_MINTESSELLATIONLEVEL = 178,
261     D3DRS_MAXTESSELLATIONLEVEL = 179,
262     D3DRS_ADAPTIVETESS_X = 180,
263     D3DRS_ADAPTIVETESS_Y = 181,
264     D3DRS_ADAPTIVETESS_Z = 182,
265     D3DRS_ADAPTIVETESS_W = 183,
266     D3DRS_ENABLEADAPTIVETESSELLATION = 184,
267     D3DRS_TWOSIDEDSTENCILMODE = 185,
268     D3DRS_CCW_STENCILFAIL = 186,
269     D3DRS_CCW_STENCILZFAIL = 187,
270     D3DRS_CCW_STENCILPASS = 188,
271     D3DRS_CCW_STENCILFUNC = 189,
272     D3DRS_COLORWRITEENABLE1 = 190,
273     D3DRS_COLORWRITEENABLE2 = 191,
274     D3DRS_COLORWRITEENABLE3 = 192,
275     D3DRS_BLENDFACTOR = 193,
276     D3DRS_SRGBWRITEENABLE = 194,
277     D3DRS_DEPTHBIAS = 195,
278     D3DRS_WRAP8 = 198,
279     D3DRS_WRAP9 = 199,
280     D3DRS_WRAP10 = 200,
281     D3DRS_WRAP11 = 201,
282     D3DRS_WRAP12 = 202,
283     D3DRS_WRAP13 = 203,
284     D3DRS_WRAP14 = 204,
285     D3DRS_WRAP15 = 205,
286     D3DRS_SEPARATEALPHABLENDENABLE = 206,
287     D3DRS_SRCBLENDALPHA = 207,
288     D3DRS_DESTBLENDALPHA = 208,
289     D3DRS_BLENDOPALPHA = 209,
290 }}
291 pub const D3D_MAX_SIMULTANEOUS_RENDERTARGETS: ::DWORD = 4;
292 ENUM!{enum D3DMATERIALCOLORSOURCE {
293     D3DMCS_MATERIAL = 0,
294     D3DMCS_COLOR1 = 1,
295     D3DMCS_COLOR2 = 2,
296 }}
297 pub const D3DRENDERSTATE_WRAPBIAS: ::DWORD = 128;
298 pub const D3DWRAP_U: ::DWORD = 0x00000001;
299 pub const D3DWRAP_V: ::DWORD = 0x00000002;
300 pub const D3DWRAP_W: ::DWORD = 0x00000004;
301 pub const D3DWRAPCOORD_0: ::DWORD = 0x00000001;
302 pub const D3DWRAPCOORD_1: ::DWORD = 0x00000002;
303 pub const D3DWRAPCOORD_2: ::DWORD = 0x00000004;
304 pub const D3DWRAPCOORD_3: ::DWORD = 0x00000008;
305 pub const D3DCOLORWRITEENABLE_RED: ::DWORD = 1 << 0;
306 pub const D3DCOLORWRITEENABLE_GREEN: ::DWORD = 1 << 1;
307 pub const D3DCOLORWRITEENABLE_BLUE: ::DWORD = 1 << 2;
308 pub const D3DCOLORWRITEENABLE_ALPHA: ::DWORD = 1 << 3;
309 ENUM!{enum D3DTEXTURESTAGESTATETYPE {
310     D3DTSS_COLOROP = 1,
311     D3DTSS_COLORARG1 = 2,
312     D3DTSS_COLORARG2 = 3,
313     D3DTSS_ALPHAOP = 4,
314     D3DTSS_ALPHAARG1 = 5,
315     D3DTSS_ALPHAARG2 = 6,
316     D3DTSS_BUMPENVMAT00 = 7,
317     D3DTSS_BUMPENVMAT01 = 8,
318     D3DTSS_BUMPENVMAT10 = 9,
319     D3DTSS_BUMPENVMAT11 = 10,
320     D3DTSS_TEXCOORDINDEX = 11,
321     D3DTSS_BUMPENVLSCALE = 22,
322     D3DTSS_BUMPENVLOFFSET = 23,
323     D3DTSS_TEXTURETRANSFORMFLAGS = 24,
324     D3DTSS_COLORARG0 = 26,
325     D3DTSS_ALPHAARG0 = 27,
326     D3DTSS_RESULTARG = 28,
327     D3DTSS_CONSTANT = 32,
328 }}
329 ENUM!{enum D3DSAMPLERSTATETYPE {
330     D3DSAMP_ADDRESSU = 1,
331     D3DSAMP_ADDRESSV = 2,
332     D3DSAMP_ADDRESSW = 3,
333     D3DSAMP_BORDERCOLOR = 4,
334     D3DSAMP_MAGFILTER = 5,
335     D3DSAMP_MINFILTER = 6,
336     D3DSAMP_MIPFILTER = 7,
337     D3DSAMP_MIPMAPLODBIAS = 8,
338     D3DSAMP_MAXMIPLEVEL = 9,
339     D3DSAMP_MAXANISOTROPY = 10,
340     D3DSAMP_SRGBTEXTURE = 11,
341     D3DSAMP_ELEMENTINDEX = 12,
342     D3DSAMP_DMAPOFFSET = 13,
343 }}
344 pub const D3DDMAPSAMPLER: ::DWORD = 256;
345 pub const D3DVERTEXTEXTURESAMPLER0: ::DWORD = D3DDMAPSAMPLER + 1;
346 pub const D3DVERTEXTEXTURESAMPLER1: ::DWORD = D3DDMAPSAMPLER + 2;
347 pub const D3DVERTEXTEXTURESAMPLER2: ::DWORD = D3DDMAPSAMPLER + 3;
348 pub const D3DVERTEXTEXTURESAMPLER3: ::DWORD = D3DDMAPSAMPLER + 4;
349 pub const D3DTSS_TCI_PASSTHRU: ::DWORD = 0x00000000;
350 pub const D3DTSS_TCI_CAMERASPACENORMAL: ::DWORD = 0x00010000;
351 pub const D3DTSS_TCI_CAMERASPACEPOSITION: ::DWORD = 0x00020000;
352 pub const D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR: ::DWORD = 0x00030000;
353 pub const D3DTSS_TCI_SPHEREMAP: ::DWORD = 0x00040000;
354 ENUM!{enum D3DTEXTUREOP {
355     D3DTOP_DISABLE = 1,
356     D3DTOP_SELECTARG1 = 2,
357     D3DTOP_SELECTARG2 = 3,
358     D3DTOP_MODULATE = 4,
359     D3DTOP_MODULATE2X = 5,
360     D3DTOP_MODULATE4X = 6,
361     D3DTOP_ADD = 7,
362     D3DTOP_ADDSIGNED = 8,
363     D3DTOP_ADDSIGNED2X = 9,
364     D3DTOP_SUBTRACT = 10,
365     D3DTOP_ADDSMOOTH = 11,
366     D3DTOP_BLENDDIFFUSEALPHA = 12,
367     D3DTOP_BLENDTEXTUREALPHA = 13,
368     D3DTOP_BLENDFACTORALPHA = 14,
369     D3DTOP_BLENDTEXTUREALPHAPM = 15,
370     D3DTOP_BLENDCURRENTALPHA = 16,
371     D3DTOP_PREMODULATE = 17,
372     D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
373     D3DTOP_MODULATECOLOR_ADDALPHA = 19,
374     D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
375     D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
376     D3DTOP_BUMPENVMAP = 22,
377     D3DTOP_BUMPENVMAPLUMINANCE = 23,
378     D3DTOP_DOTPRODUCT3 = 24,
379     D3DTOP_MULTIPLYADD = 25,
380     D3DTOP_LERP = 26,
381 }}
382 pub const D3DTA_SELECTMASK: ::DWORD = 0x0000000f;
383 pub const D3DTA_DIFFUSE: ::DWORD = 0x00000000;
384 pub const D3DTA_CURRENT: ::DWORD = 0x00000001;
385 pub const D3DTA_TEXTURE: ::DWORD = 0x00000002;
386 pub const D3DTA_TFACTOR: ::DWORD = 0x00000003;
387 pub const D3DTA_SPECULAR: ::DWORD = 0x00000004;
388 pub const D3DTA_TEMP: ::DWORD = 0x00000005;
389 pub const D3DTA_CONSTANT: ::DWORD = 0x00000006;
390 pub const D3DTA_COMPLEMENT: ::DWORD = 0x00000010;
391 pub const D3DTA_ALPHAREPLICATE: ::DWORD = 0x00000020;
392 ENUM!{enum D3DTEXTUREFILTERTYPE {
393     D3DTEXF_NONE = 0,
394     D3DTEXF_POINT = 1,
395     D3DTEXF_LINEAR = 2,
396     D3DTEXF_ANISOTROPIC = 3,
397     D3DTEXF_PYRAMIDALQUAD = 6,
398     D3DTEXF_GAUSSIANQUAD = 7,
399     D3DTEXF_CONVOLUTIONMONO = 8,
400 }}
401 pub const D3DPV_DONOTCOPYDATA: ::DWORD = 1 << 0;
402 pub const D3DFVF_RESERVED0: ::DWORD = 0x001;
403 pub const D3DFVF_POSITION_MASK: ::DWORD = 0x400E;
404 pub const D3DFVF_XYZ: ::DWORD = 0x002;
405 pub const D3DFVF_XYZRHW: ::DWORD = 0x004;
406 pub const D3DFVF_XYZB1: ::DWORD = 0x006;
407 pub const D3DFVF_XYZB2: ::DWORD = 0x008;
408 pub const D3DFVF_XYZB3: ::DWORD = 0x00a;
409 pub const D3DFVF_XYZB4: ::DWORD = 0x00c;
410 pub const D3DFVF_XYZB5: ::DWORD = 0x00e;
411 pub const D3DFVF_XYZW: ::DWORD = 0x4002;
412 pub const D3DFVF_NORMAL: ::DWORD = 0x010;
413 pub const D3DFVF_PSIZE: ::DWORD = 0x020;
414 pub const D3DFVF_DIFFUSE: ::DWORD = 0x040;
415 pub const D3DFVF_SPECULAR: ::DWORD = 0x080;
416 pub const D3DFVF_TEXCOUNT_MASK: ::DWORD = 0xf00;
417 pub const D3DFVF_TEXCOUNT_SHIFT: ::DWORD = 8;
418 pub const D3DFVF_TEX0: ::DWORD = 0x000;
419 pub const D3DFVF_TEX1: ::DWORD = 0x100;
420 pub const D3DFVF_TEX2: ::DWORD = 0x200;
421 pub const D3DFVF_TEX3: ::DWORD = 0x300;
422 pub const D3DFVF_TEX4: ::DWORD = 0x400;
423 pub const D3DFVF_TEX5: ::DWORD = 0x500;
424 pub const D3DFVF_TEX6: ::DWORD = 0x600;
425 pub const D3DFVF_TEX7: ::DWORD = 0x700;
426 pub const D3DFVF_TEX8: ::DWORD = 0x800;
427 pub const D3DFVF_LASTBETA_UBYTE4: ::DWORD = 0x1000;
428 pub const D3DFVF_LASTBETA_D3DCOLOR: ::DWORD = 0x8000;
429 pub const D3DFVF_RESERVED2: ::DWORD = 0x6000;
430 ENUM!{enum D3DDECLUSAGE {
431     D3DDECLUSAGE_POSITION = 0,
432     D3DDECLUSAGE_BLENDWEIGHT,
433     D3DDECLUSAGE_BLENDINDICES,
434     D3DDECLUSAGE_NORMAL,
435     D3DDECLUSAGE_PSIZE,
436     D3DDECLUSAGE_TEXCOORD,
437     D3DDECLUSAGE_TANGENT,
438     D3DDECLUSAGE_BINORMAL,
439     D3DDECLUSAGE_TESSFACTOR,
440     D3DDECLUSAGE_POSITIONT,
441     D3DDECLUSAGE_COLOR,
442     D3DDECLUSAGE_FOG,
443     D3DDECLUSAGE_DEPTH,
444     D3DDECLUSAGE_SAMPLE,
445 }}
446 pub const MAXD3DDECLUSAGE: D3DDECLUSAGE = D3DDECLUSAGE_SAMPLE;
447 pub const MAXD3DDECLUSAGEINDEX: ::DWORD = 15;
448 pub const MAXD3DDECLLENGTH: ::DWORD = 64;
449 ENUM!{enum D3DDECLMETHOD {
450     D3DDECLMETHOD_DEFAULT = 0,
451     D3DDECLMETHOD_PARTIALU,
452     D3DDECLMETHOD_PARTIALV,
453     D3DDECLMETHOD_CROSSUV,
454     D3DDECLMETHOD_UV,
455     D3DDECLMETHOD_LOOKUP,
456     D3DDECLMETHOD_LOOKUPPRESAMPLED,
457 }}
458 pub const MAXD3DDECLMETHOD: D3DDECLMETHOD = D3DDECLMETHOD_LOOKUPPRESAMPLED;
459 ENUM!{enum D3DDECLTYPE {
460     D3DDECLTYPE_FLOAT1 = 0,
461     D3DDECLTYPE_FLOAT2 = 1,
462     D3DDECLTYPE_FLOAT3 = 2,
463     D3DDECLTYPE_FLOAT4 = 3,
464     D3DDECLTYPE_D3DCOLOR = 4,
465     D3DDECLTYPE_UBYTE4 = 5,
466     D3DDECLTYPE_SHORT2 = 6,
467     D3DDECLTYPE_SHORT4 = 7,
468     D3DDECLTYPE_UBYTE4N = 8,
469     D3DDECLTYPE_SHORT2N = 9,
470     D3DDECLTYPE_SHORT4N = 10,
471     D3DDECLTYPE_USHORT2N = 11,
472     D3DDECLTYPE_USHORT4N = 12,
473     D3DDECLTYPE_UDEC3 = 13,
474     D3DDECLTYPE_DEC3N = 14,
475     D3DDECLTYPE_FLOAT16_2 = 15,
476     D3DDECLTYPE_FLOAT16_4 = 16,
477     D3DDECLTYPE_UNUSED = 17,
478 }}
479 pub const MAXD3DDECLTYPE: D3DDECLTYPE = D3DDECLTYPE_UNUSED;
480 STRUCT!{struct D3DVERTEXELEMENT9 {
481     Stream: ::WORD,
482     Offset: ::WORD,
483     Type: ::BYTE,
484     Method: ::BYTE,
485     Usage: ::BYTE,
486     UsageIndex: ::BYTE,
487 }}
488 pub type LPD3DVERTEXELEMENT9 = *mut D3DVERTEXELEMENT9;
489 pub const D3DDECL_END: D3DVERTEXELEMENT9 = D3DVERTEXELEMENT9 {
490     Stream: 0xFF,
491     Offset: 0,
492     Type: D3DDECLTYPE_UNUSED.0 as ::BYTE,
493     Method: 0,
494     Usage: 0,
495     UsageIndex: 0,
496 };
497 pub const D3DDP_MAXTEXCOORD: ::DWORD = 8;
498 pub const D3DSTREAMSOURCE_INDEXEDDATA: ::DWORD = 1 << 30;
499 pub const D3DSTREAMSOURCE_INSTANCEDATA: ::DWORD = 2 << 30;
500 pub const D3DSI_OPCODE_MASK: ::DWORD = 0x0000FFFF;
501 pub const D3DSI_INSTLENGTH_MASK: ::DWORD = 0x0F000000;
502 pub const D3DSI_INSTLENGTH_SHIFT: ::DWORD = 24;
503 ENUM!{enum D3DSHADER_INSTRUCTION_OPCODE_TYPE {
504     D3DSIO_NOP = 0,
505     D3DSIO_MOV = 1,
506     D3DSIO_ADD = 2,
507     D3DSIO_SUB = 3,
508     D3DSIO_MAD = 4,
509     D3DSIO_MUL = 5,
510     D3DSIO_RCP = 6,
511     D3DSIO_RSQ = 7,
512     D3DSIO_DP3 = 8,
513     D3DSIO_DP4 = 9,
514     D3DSIO_MIN = 10,
515     D3DSIO_MAX = 11,
516     D3DSIO_SLT = 12,
517     D3DSIO_SGE = 13,
518     D3DSIO_EXP = 14,
519     D3DSIO_LOG = 15,
520     D3DSIO_LIT = 16,
521     D3DSIO_DST = 17,
522     D3DSIO_LRP = 18,
523     D3DSIO_FRC = 18,
524     D3DSIO_M4x4 = 20,
525     D3DSIO_M4x3 = 21,
526     D3DSIO_M3x4 = 22,
527     D3DSIO_M3x3 = 23,
528     D3DSIO_M3x2 = 24,
529     D3DSIO_CALL = 25,
530     D3DSIO_CALLNZ = 26,
531     D3DSIO_LOOP = 27,
532     D3DSIO_RET = 28,
533     D3DSIO_ENDLOOP = 29,
534     D3DSIO_LABEL = 30,
535     D3DSIO_DCL = 31,
536     D3DSIO_POW = 32,
537     D3DSIO_CRS = 33,
538     D3DSIO_SGN = 34,
539     D3DSIO_ABS = 35,
540     D3DSIO_NRM = 36,
541     D3DSIO_SINCOS = 37,
542     D3DSIO_REP = 38,
543     D3DSIO_ENDREP = 39,
544     D3DSIO_IF = 40,
545     D3DSIO_IFC = 41,
546     D3DSIO_ELSE = 42,
547     D3DSIO_ENDIF = 43,
548     D3DSIO_BREAK = 44,
549     D3DSIO_BREAKC = 45,
550     D3DSIO_MOVA = 46,
551     D3DSIO_DEFB = 47,
552     D3DSIO_DEFI = 48,
553     D3DSIO_TEXCOORD = 64,
554     D3DSIO_TEXKILL = 65,
555     D3DSIO_TEX = 66,
556     D3DSIO_TEXBEM = 67,
557     D3DSIO_TEXBEML = 68,
558     D3DSIO_TEXREG2AR = 69,
559     D3DSIO_TEXREG2GB = 70,
560     D3DSIO_TEXM3x2PAD = 71,
561     D3DSIO_TEXM3x2TEX = 72,
562     D3DSIO_TEXM3x3PAD = 73,
563     D3DSIO_TEXM3x3TEX = 74,
564     D3DSIO_RESERVED0 = 75,
565     D3DSIO_TEXM3x3SPEC = 76,
566     D3DSIO_TEXM3x3VSPEC = 77,
567     D3DSIO_EXPP = 78,
568     D3DSIO_LOGP = 79,
569     D3DSIO_CND = 80,
570     D3DSIO_DEF = 81,
571     D3DSIO_TEXREG2RGB = 82,
572     D3DSIO_TEXDP3TEX = 83,
573     D3DSIO_TEXM3x2DEPTH = 84,
574     D3DSIO_TEXDP3 = 85,
575     D3DSIO_TEXM3x3 = 86,
576     D3DSIO_TEXDEPTH = 87,
577     D3DSIO_CMP = 88,
578     D3DSIO_BEM = 89,
579     D3DSIO_DP2ADD = 90,
580     D3DSIO_DSX = 91,
581     D3DSIO_DSY = 92,
582     D3DSIO_TEXLDD = 93,
583     D3DSIO_SETP = 94,
584     D3DSIO_TEXLDL = 95,
585     D3DSIO_BREAKP = 96,
586     D3DSIO_PHASE = 0xFFFD,
587     D3DSIO_COMMENT = 0xFFFE,
588     D3DSIO_END = 0xFFFF,
589 }}
590 pub const D3DSI_COISSUE: ::DWORD = 0x40000000;
591 pub const D3DSP_OPCODESPECIFICCONTROL_MASK: ::DWORD = 0x00ff0000;
592 pub const D3DSP_OPCODESPECIFICCONTROL_SHIFT: ::DWORD = 16;
593 pub const D3DSI_TEXLD_PROJECT: ::DWORD = 0x01 << D3DSP_OPCODESPECIFICCONTROL_SHIFT;
594 pub const D3DSI_TEXLD_BIAS: ::DWORD = 0x02 << D3DSP_OPCODESPECIFICCONTROL_SHIFT;
595 ENUM!{enum D3DSHADER_COMPARISON {
596     D3DSPC_RESERVED0 = 0,
597     D3DSPC_GT = 1,
598     D3DSPC_EQ = 2,
599     D3DSPC_GE = 3,
600     D3DSPC_LT = 4,
601     D3DSPC_NE = 5,
602     D3DSPC_LE = 6,
603     D3DSPC_RESERVED1 = 7,
604 }}
605 pub const D3DSHADER_COMPARISON_SHIFT: ::DWORD = D3DSP_OPCODESPECIFICCONTROL_SHIFT;
606 pub const D3DSHADER_COMPARISON_MASK: ::DWORD = 0x7 << D3DSHADER_COMPARISON_SHIFT;
607 pub const D3DSHADER_INSTRUCTION_PREDICATED: ::DWORD = 0x1 << 28;
608 pub const D3DSP_DCL_USAGE_SHIFT: ::DWORD = 0;
609 pub const D3DSP_DCL_USAGE_MASK: ::DWORD = 0x0000000f;
610 pub const D3DSP_DCL_USAGEINDEX_SHIFT: ::DWORD = 16;
611 pub const D3DSP_DCL_USAGEINDEX_MASK: ::DWORD = 0x000f0000;
612 pub const D3DSP_TEXTURETYPE_SHIFT: ::DWORD = 27;
613 pub const D3DSP_TEXTURETYPE_MASK: ::DWORD = 0x78000000;
614 ENUM!{enum D3DSAMPLER_TEXTURE_TYPE {
615     D3DSTT_UNKNOWN = 0 << D3DSP_TEXTURETYPE_SHIFT,
616     D3DSTT_2D = 2 << D3DSP_TEXTURETYPE_SHIFT,
617     D3DSTT_CUBE = 3 << D3DSP_TEXTURETYPE_SHIFT,
618     D3DSTT_VOLUME = 4 << D3DSP_TEXTURETYPE_SHIFT,
619 }}
620 pub const D3DSP_REGNUM_MASK: ::DWORD = 0x000007FF;
621 pub const D3DSP_WRITEMASK_0: ::DWORD = 0x00010000;
622 pub const D3DSP_WRITEMASK_1: ::DWORD = 0x00020000;
623 pub const D3DSP_WRITEMASK_2: ::DWORD = 0x00040000;
624 pub const D3DSP_WRITEMASK_3: ::DWORD = 0x00080000;
625 pub const D3DSP_WRITEMASK_ALL: ::DWORD = 0x000F0000;
626 pub const D3DSP_DSTMOD_SHIFT: ::DWORD = 20;
627 pub const D3DSP_DSTMOD_MASK: ::DWORD = 0x00F00000;
628 pub const D3DSPDM_NONE: ::DWORD = 0 << D3DSP_DSTMOD_SHIFT;
629 pub const D3DSPDM_SATURATE: ::DWORD = 1 << D3DSP_DSTMOD_SHIFT;
630 pub const D3DSPDM_PARTIALPRECISION: ::DWORD = 2 << D3DSP_DSTMOD_SHIFT;
631 pub const D3DSPDM_MSAMPCENTROID: ::DWORD = 4 << D3DSP_DSTMOD_SHIFT;
632 pub const D3DSP_DSTSHIFT_SHIFT: ::DWORD = 24;
633 pub const D3DSP_DSTSHIFT_MASK: ::DWORD = 0x0F000000;
634 pub const D3DSP_REGTYPE_SHIFT: ::DWORD = 28;
635 pub const D3DSP_REGTYPE_SHIFT2: ::DWORD = 8;
636 pub const D3DSP_REGTYPE_MASK: ::DWORD = 0x70000000;
637 pub const D3DSP_REGTYPE_MASK2: ::DWORD = 0x00001800;
638 ENUM!{enum D3DSHADER_PARAM_REGISTER_TYPE {
639     D3DSPR_TEMP = 0,
640     D3DSPR_INPUT = 1,
641     D3DSPR_CONST = 2,
642     D3DSPR_ADDR = 3,
643     D3DSPR_TEXTURE = 3,
644     D3DSPR_RASTOUT = 4,
645     D3DSPR_ATTROUT = 5,
646     D3DSPR_TEXCRDOUT = 6,
647     D3DSPR_OUTPUT = 6,
648     D3DSPR_CONSTINT = 7,
649     D3DSPR_COLOROUT = 8,
650     D3DSPR_DEPTHOUT = 9,
651     D3DSPR_SAMPLER = 10,
652     D3DSPR_CONST2 = 11,
653     D3DSPR_CONST3 = 12,
654     D3DSPR_CONST4 = 13,
655     D3DSPR_CONSTBOOL = 14,
656     D3DSPR_LOOP = 15,
657     D3DSPR_TEMPFLOAT16 = 16,
658     D3DSPR_MISCTYPE = 17,
659     D3DSPR_LABEL = 18,
660     D3DSPR_PREDICATE = 19,
661 }}
662 ENUM!{enum D3DSHADER_MISCTYPE_OFFSETS {
663     D3DSMO_POSITION = 0,
664     D3DSMO_FACE = 1,
665 }}
666 ENUM!{enum D3DVS_RASTOUT_OFFSETS {
667     D3DSRO_POSITION = 0,
668     D3DSRO_FOG,
669     D3DSRO_POINT_SIZE,
670 }}
671 pub const D3DVS_ADDRESSMODE_SHIFT: ::DWORD = 13;
672 pub const D3DVS_ADDRESSMODE_MASK: ::DWORD = 1 << D3DVS_ADDRESSMODE_SHIFT;
673 ENUM!{enum D3DVS_ADDRESSMODE_TYPE {
674     D3DVS_ADDRMODE_ABSOLUTE = 0 << D3DVS_ADDRESSMODE_SHIFT,
675     D3DVS_ADDRMODE_RELATIVE = 1 << D3DVS_ADDRESSMODE_SHIFT,
676 }}
677 pub const D3DSHADER_ADDRESSMODE_SHIFT: ::DWORD = 13;
678 pub const D3DSHADER_ADDRESSMODE_MASK: ::DWORD = 1 << D3DSHADER_ADDRESSMODE_SHIFT;
679 ENUM!{enum D3DSHADER_ADDRESSMODE_TYPE {
680     D3DSHADER_ADDRMODE_ABSOLUTE = 0 << D3DSHADER_ADDRESSMODE_SHIFT,
681     D3DSHADER_ADDRMODE_RELATIVE = 1 << D3DSHADER_ADDRESSMODE_SHIFT,
682 }}
683 pub const D3DVS_SWIZZLE_SHIFT: ::DWORD = 16;
684 pub const D3DVS_SWIZZLE_MASK: ::DWORD = 0x00FF0000;
685 pub const D3DVS_X_X: ::DWORD = 0 << D3DVS_SWIZZLE_SHIFT;
686 pub const D3DVS_X_Y: ::DWORD = 1 << D3DVS_SWIZZLE_SHIFT;
687 pub const D3DVS_X_Z: ::DWORD = 2 << D3DVS_SWIZZLE_SHIFT;
688 pub const D3DVS_X_W: ::DWORD = 3 << D3DVS_SWIZZLE_SHIFT;
689 pub const D3DVS_Y_X: ::DWORD = 0 << (D3DVS_SWIZZLE_SHIFT + 2);
690 pub const D3DVS_Y_Y: ::DWORD = 1 << (D3DVS_SWIZZLE_SHIFT + 2);
691 pub const D3DVS_Y_Z: ::DWORD = 2 << (D3DVS_SWIZZLE_SHIFT + 2);
692 pub const D3DVS_Y_W: ::DWORD = 3 << (D3DVS_SWIZZLE_SHIFT + 2);
693 pub const D3DVS_Z_X: ::DWORD = 0 << (D3DVS_SWIZZLE_SHIFT + 4);
694 pub const D3DVS_Z_Y: ::DWORD = 1 << (D3DVS_SWIZZLE_SHIFT + 4);
695 pub const D3DVS_Z_Z: ::DWORD = 2 << (D3DVS_SWIZZLE_SHIFT + 4);
696 pub const D3DVS_Z_W: ::DWORD = 3 << (D3DVS_SWIZZLE_SHIFT + 4);
697 pub const D3DVS_W_X: ::DWORD = 0 << (D3DVS_SWIZZLE_SHIFT + 6);
698 pub const D3DVS_W_Y: ::DWORD = 1 << (D3DVS_SWIZZLE_SHIFT + 6);
699 pub const D3DVS_W_Z: ::DWORD = 2 << (D3DVS_SWIZZLE_SHIFT + 6);
700 pub const D3DVS_W_W: ::DWORD = 3 << (D3DVS_SWIZZLE_SHIFT + 6);
701 pub const D3DVS_NOSWIZZLE: ::DWORD = D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W;
702 pub const D3DSP_SWIZZLE_SHIFT: ::DWORD = 16;
703 pub const D3DSP_SWIZZLE_MASK: ::DWORD = 0x00FF0000;
704 pub const D3DSP_NOSWIZZLE: ::DWORD = (0 << (D3DSP_SWIZZLE_SHIFT + 0))
705     | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4))
706     | (3 << (D3DSP_SWIZZLE_SHIFT + 6));
707 pub const D3DSP_REPLICATERED: ::DWORD = (0 << (D3DSP_SWIZZLE_SHIFT + 0))
708     | (0 << (D3DSP_SWIZZLE_SHIFT + 2)) | (0 << (D3DSP_SWIZZLE_SHIFT + 4))
709     | (0 << (D3DSP_SWIZZLE_SHIFT + 6));
710 pub const D3DSP_REPLICATEGREEN: ::DWORD = (1 << (D3DSP_SWIZZLE_SHIFT + 0))
711     | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (1 << (D3DSP_SWIZZLE_SHIFT + 4))
712     | (1 << (D3DSP_SWIZZLE_SHIFT + 6));
713 pub const D3DSP_REPLICATEBLUE: ::DWORD = (2 << (D3DSP_SWIZZLE_SHIFT + 0))
714     | (2 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4))
715     | (2 << (D3DSP_SWIZZLE_SHIFT + 6));
716 pub const D3DSP_REPLICATEALPHA: ::DWORD = (3 << (D3DSP_SWIZZLE_SHIFT + 0))
717     | (3 << (D3DSP_SWIZZLE_SHIFT + 2)) | (3 << (D3DSP_SWIZZLE_SHIFT + 4))
718     | (3 << (D3DSP_SWIZZLE_SHIFT + 6));
719 pub const D3DSP_SRCMOD_SHIFT: ::DWORD = 24;
720 pub const D3DSP_SRCMOD_MASK: ::DWORD = 0x0F000000;
721 ENUM!{enum D3DSHADER_PARAM_SRCMOD_TYPE {
722     D3DSPSM_NONE = 0 << D3DSP_SRCMOD_SHIFT,
723     D3DSPSM_NEG = 1 << D3DSP_SRCMOD_SHIFT,
724     D3DSPSM_BIAS = 2 << D3DSP_SRCMOD_SHIFT,
725     D3DSPSM_BIASNEG = 3 << D3DSP_SRCMOD_SHIFT,
726     D3DSPSM_SIGN = 4 << D3DSP_SRCMOD_SHIFT,
727     D3DSPSM_SIGNNEG = 5 << D3DSP_SRCMOD_SHIFT,
728     D3DSPSM_COMP = 6 << D3DSP_SRCMOD_SHIFT,
729     D3DSPSM_X2 = 7 << D3DSP_SRCMOD_SHIFT,
730     D3DSPSM_X2NEG = 8 << D3DSP_SRCMOD_SHIFT,
731     D3DSPSM_DZ = 9 << D3DSP_SRCMOD_SHIFT,
732     D3DSPSM_DW = 10 << D3DSP_SRCMOD_SHIFT,
733     D3DSPSM_ABS = 11 << D3DSP_SRCMOD_SHIFT,
734     D3DSPSM_ABSNEG = 12 << D3DSP_SRCMOD_SHIFT,
735     D3DSPSM_NOT = 13 << D3DSP_SRCMOD_SHIFT,
736 }}
737 pub const D3DSP_MIN_PRECISION_SHIFT: ::DWORD = 14;
738 pub const D3DSP_MIN_PRECISION_MASK: ::DWORD = 0x0000C000;
739 ENUM!{enum D3DSHADER_MIN_PRECISION {
740     D3DMP_DEFAULT = 0,
741     D3DMP_16 = 1,
742     D3DMP_2_8 = 2,
743 }}
744 pub const D3DSI_COMMENTSIZE_SHIFT: ::DWORD = 16;
745 pub const D3DSI_COMMENTSIZE_MASK: ::DWORD = 0x7FFF0000;
746 pub const D3DPS_END: ::DWORD = 0x0000FFFF;
747 pub const D3DVS_END: ::DWORD = 0x0000FFFF;
748 ENUM!{enum D3DBASISTYPE {
749     D3DBASIS_BEZIER = 0,
750     D3DBASIS_BSPLINE = 1,
751     D3DBASIS_CATMULL_ROM = 2,
752 }}
753 ENUM!{enum D3DDEGREETYPE {
754     D3DDEGREE_LINEAR = 1,
755     D3DDEGREE_QUADRATIC = 2,
756     D3DDEGREE_CUBIC = 3,
757     D3DDEGREE_QUINTIC = 5,
758 }}
759 ENUM!{enum D3DPATCHEDGESTYLE {
760     D3DPATCHEDGE_DISCRETE = 0,
761     D3DPATCHEDGE_CONTINUOUS = 1,
762 }}
763 ENUM!{enum D3DSTATEBLOCKTYPE {
764     D3DSBT_ALL = 1,
765     D3DSBT_PIXELSTATE = 2,
766     D3DSBT_VERTEXSTATE = 3,
767 }}
768 FLAGS!{enum D3DVERTEXBLENDFLAGS {
769     D3DVBF_DISABLE = 0,
770     D3DVBF_1WEIGHTS = 1,
771     D3DVBF_2WEIGHTS = 2,
772     D3DVBF_3WEIGHTS = 3,
773     D3DVBF_TWEENING = 255,
774     D3DVBF_0WEIGHTS = 256,
775 }}
776 ENUM!{enum D3DTEXTURETRANSFORMFLAGS {
777     D3DTTFF_DISABLE = 0,
778     D3DTTFF_COUNT1 = 1,
779     D3DTTFF_COUNT2 = 2,
780     D3DTTFF_COUNT3 = 3,
781     D3DTTFF_COUNT4 = 4,
782     D3DTTFF_PROJECTED = 256,
783 }}
784 pub const D3DFVF_TEXTUREFORMAT2: ::DWORD = 0;
785 pub const D3DFVF_TEXTUREFORMAT1: ::DWORD = 3;
786 pub const D3DFVF_TEXTUREFORMAT3: ::DWORD = 1;
787 pub const D3DFVF_TEXTUREFORMAT4: ::DWORD = 2;
788 ENUM!{enum D3DDEVTYPE {
789     D3DDEVTYPE_HAL = 1,
790     D3DDEVTYPE_REF = 2,
791     D3DDEVTYPE_SW = 3,
792     D3DDEVTYPE_NULLREF = 4,
793 }}
794 ENUM!{enum D3DMULTISAMPLE_TYPE {
795     D3DMULTISAMPLE_NONE = 0,
796     D3DMULTISAMPLE_NONMASKABLE = 1,
797     D3DMULTISAMPLE_2_SAMPLES = 2,
798     D3DMULTISAMPLE_3_SAMPLES = 3,
799     D3DMULTISAMPLE_4_SAMPLES = 4,
800     D3DMULTISAMPLE_5_SAMPLES = 5,
801     D3DMULTISAMPLE_6_SAMPLES = 6,
802     D3DMULTISAMPLE_7_SAMPLES = 7,
803     D3DMULTISAMPLE_8_SAMPLES = 8,
804     D3DMULTISAMPLE_9_SAMPLES = 9,
805     D3DMULTISAMPLE_10_SAMPLES = 10,
806     D3DMULTISAMPLE_11_SAMPLES = 11,
807     D3DMULTISAMPLE_12_SAMPLES = 12,
808     D3DMULTISAMPLE_13_SAMPLES = 13,
809     D3DMULTISAMPLE_14_SAMPLES = 14,
810     D3DMULTISAMPLE_15_SAMPLES = 15,
811     D3DMULTISAMPLE_16_SAMPLES = 16,
812 }}
813 ENUM!{enum D3DFORMAT {
814     D3DFMT_UNKNOWN = 0,
815     D3DFMT_R8G8B8 = 20,
816     D3DFMT_A8R8G8B8 = 21,
817     D3DFMT_X8R8G8B8 = 22,
818     D3DFMT_R5G6B5 = 23,
819     D3DFMT_X1R5G5B5 = 24,
820     D3DFMT_A1R5G5B5 = 25,
821     D3DFMT_A4R4G4B4 = 26,
822     D3DFMT_R3G3B2 = 27,
823     D3DFMT_A8 = 28,
824     D3DFMT_A8R3G3B2 = 29,
825     D3DFMT_X4R4G4B4 = 30,
826     D3DFMT_A2B10G10R10 = 31,
827     D3DFMT_A8B8G8R8 = 32,
828     D3DFMT_X8B8G8R8 = 33,
829     D3DFMT_G16R16 = 34,
830     D3DFMT_A2R10G10B10 = 35,
831     D3DFMT_A16B16G16R16 = 36,
832     D3DFMT_A8P8 = 40,
833     D3DFMT_P8 = 41,
834     D3DFMT_L8 = 50,
835     D3DFMT_A8L8 = 51,
836     D3DFMT_A4L4 = 52,
837     D3DFMT_V8U8 = 60,
838     D3DFMT_L6V5U5 = 61,
839     D3DFMT_X8L8V8U8 = 62,
840     D3DFMT_Q8W8V8U8 = 63,
841     D3DFMT_V16U16 = 64,
842     D3DFMT_A2W10V10U10 = 67,
843     D3DFMT_UYVY = MAKEFOURCC!(b'U', b'Y', b'V', b'Y') as u32,
844     D3DFMT_R8G8_B8G8 = MAKEFOURCC!(b'R', b'G', b'B', b'G') as u32,
845     D3DFMT_YUY2 = MAKEFOURCC!(b'Y', b'U', b'Y', b'2') as u32,
846     D3DFMT_G8R8_G8B8 = MAKEFOURCC!(b'G', b'R', b'G', b'B') as u32,
847     D3DFMT_DXT1 = MAKEFOURCC!(b'D', b'X', b'T', b'1') as u32,
848     D3DFMT_DXT2 = MAKEFOURCC!(b'D', b'X', b'T', b'2') as u32,
849     D3DFMT_DXT3 = MAKEFOURCC!(b'D', b'X', b'T', b'3') as u32,
850     D3DFMT_DXT4 = MAKEFOURCC!(b'D', b'X', b'T', b'4') as u32,
851     D3DFMT_DXT5 = MAKEFOURCC!(b'D', b'X', b'T', b'5') as u32,
852     D3DFMT_D16_LOCKABLE = 70,
853     D3DFMT_D32 = 71,
854     D3DFMT_D15S1 = 73,
855     D3DFMT_D24S8 = 75,
856     D3DFMT_D24X8 = 77,
857     D3DFMT_D24X4S4 = 79,
858     D3DFMT_D16 = 80,
859     D3DFMT_D32F_LOCKABLE = 82,
860     D3DFMT_D24FS8 = 83,
861     D3DFMT_D32_LOCKABLE = 84,
862     D3DFMT_S8_LOCKABLE = 85,
863     D3DFMT_L16 = 81,
864     D3DFMT_VERTEXDATA = 100,
865     D3DFMT_INDEX16 = 101,
866     D3DFMT_INDEX32 = 102,
867     D3DFMT_Q16W16V16U16 = 110,
868     D3DFMT_MULTI2_ARGB8 = MAKEFOURCC!(b'M', b'E', b'T', b'1') as u32,
869     D3DFMT_R16F = 111,
870     D3DFMT_G16R16F = 112,
871     D3DFMT_A16B16G16R16F = 113,
872     D3DFMT_R32F = 114,
873     D3DFMT_G32R32F = 115,
874     D3DFMT_A32B32G32R32F = 116,
875     D3DFMT_CxV8U8 = 117,
876     D3DFMT_A1 = 118,
877     D3DFMT_A2B10G10R10_XR_BIAS = 119,
878     D3DFMT_BINARYBUFFER = 199,
879 }}
880 STRUCT!{struct D3DDISPLAYMODE {
881     Width: ::UINT,
882     Height: ::UINT,
883     RefreshRate: ::UINT,
884     Format: D3DFORMAT,
885 }}
886 STRUCT!{struct D3DDEVICE_CREATION_PARAMETERS {
887     AdapterOrdinal: ::UINT,
888     DeviceType: D3DDEVTYPE,
889     hFocusWindow: ::HWND,
890     BehaviorFlags: ::DWORD,
891 }}
892 ENUM!{enum D3DSWAPEFFECT {
893     D3DSWAPEFFECT_DISCARD = 1,
894     D3DSWAPEFFECT_FLIP = 2,
895     D3DSWAPEFFECT_COPY = 3,
896     D3DSWAPEFFECT_OVERLAY = 4,
897     D3DSWAPEFFECT_FLIPEX = 5,
898 }}
899 ENUM!{enum D3DPOOL {
900     D3DPOOL_DEFAULT = 0,
901     D3DPOOL_MANAGED = 1,
902     D3DPOOL_SYSTEMMEM = 2,
903     D3DPOOL_SCRATCH = 3,
904 }}
905 pub const D3DPRESENT_RATE_DEFAULT: ::DWORD = 0x00000000;
906 STRUCT!{struct D3DPRESENT_PARAMETERS {
907     BackBufferWidth: ::UINT,
908     BackBufferHeight: ::UINT,
909     BackBufferFormat: D3DFORMAT,
910     BackBufferCount: ::UINT,
911     MultiSampleType: D3DMULTISAMPLE_TYPE,
912     MultiSampleQuality: ::DWORD,
913     SwapEffect: D3DSWAPEFFECT,
914     hDeviceWindow: ::HWND,
915     Windowed: ::BOOL,
916     EnableAutoDepthStencil: ::BOOL,
917     AutoDepthStencilFormat: D3DFORMAT,
918     Flags: ::DWORD,
919     FullScreen_RefreshRateInHz: ::UINT,
920     PresentationInterval: ::UINT,
921 }}
922 pub const D3DPRESENTFLAG_LOCKABLE_BACKBUFFER: ::DWORD = 0x00000001;
923 pub const D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL: ::DWORD = 0x00000002;
924 pub const D3DPRESENTFLAG_DEVICECLIP: ::DWORD = 0x00000004;
925 pub const D3DPRESENTFLAG_VIDEO: ::DWORD = 0x00000010;
926 pub const D3DPRESENTFLAG_NOAUTOROTATE: ::DWORD = 0x00000020;
927 pub const D3DPRESENTFLAG_UNPRUNEDMODE: ::DWORD = 0x00000040;
928 pub const D3DPRESENTFLAG_OVERLAY_LIMITEDRGB: ::DWORD = 0x00000080;
929 pub const D3DPRESENTFLAG_OVERLAY_YCbCr_BT709: ::DWORD = 0x00000100;
930 pub const D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC: ::DWORD = 0x00000200;
931 pub const D3DPRESENTFLAG_RESTRICTED_CONTENT: ::DWORD = 0x00000400;
932 pub const D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER: ::DWORD = 0x00000800;
933 STRUCT!{nodebug struct D3DGAMMARAMP {
934     red: [::WORD; 256],
935     green: [::WORD; 256],
936     blue: [::WORD; 256],
937 }}
938 ENUM!{enum D3DBACKBUFFER_TYPE {
939     D3DBACKBUFFER_TYPE_MONO = 0,
940     D3DBACKBUFFER_TYPE_LEFT = 1,
941     D3DBACKBUFFER_TYPE_RIGHT = 2,
942 }}
943 ENUM!{enum D3DRESOURCETYPE {
944     D3DRTYPE_SURFACE = 1,
945     D3DRTYPE_VOLUME = 2,
946     D3DRTYPE_TEXTURE = 3,
947     D3DRTYPE_VOLUMETEXTURE = 4,
948     D3DRTYPE_CUBETEXTURE = 5,
949     D3DRTYPE_VERTEXBUFFER = 6,
950     D3DRTYPE_INDEXBUFFER = 7,
951 }}
952 pub const D3DUSAGE_RENDERTARGET: ::DWORD = 0x00000001;
953 pub const D3DUSAGE_DEPTHSTENCIL: ::DWORD = 0x00000002;
954 pub const D3DUSAGE_DYNAMIC: ::DWORD = 0x00000200;
955 pub const D3DUSAGE_NONSECURE: ::DWORD = 0x00800000;
956 pub const D3DUSAGE_AUTOGENMIPMAP: ::DWORD = 0x00000400;
957 pub const D3DUSAGE_DMAP: ::DWORD = 0x00004000;
958 pub const D3DUSAGE_QUERY_LEGACYBUMPMAP: ::DWORD = 0x00008000;
959 pub const D3DUSAGE_QUERY_SRGBREAD: ::DWORD = 0x00010000;
960 pub const D3DUSAGE_QUERY_FILTER: ::DWORD = 0x00020000;
961 pub const D3DUSAGE_QUERY_SRGBWRITE: ::DWORD = 0x00040000;
962 pub const D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING: ::DWORD = 0x00080000;
963 pub const D3DUSAGE_QUERY_VERTEXTEXTURE: ::DWORD = 0x00100000;
964 pub const D3DUSAGE_QUERY_WRAPANDMIP: ::DWORD = 0x00200000;
965 pub const D3DUSAGE_WRITEONLY: ::DWORD = 0x00000008;
966 pub const D3DUSAGE_SOFTWAREPROCESSING: ::DWORD = 0x00000010;
967 pub const D3DUSAGE_DONOTCLIP: ::DWORD = 0x00000020;
968 pub const D3DUSAGE_POINTS: ::DWORD = 0x00000040;
969 pub const D3DUSAGE_RTPATCHES: ::DWORD = 0x00000080;
970 pub const D3DUSAGE_NPATCHES: ::DWORD = 0x00000100;
971 pub const D3DUSAGE_TEXTAPI: ::DWORD = 0x10000000;
972 pub const D3DUSAGE_RESTRICTED_CONTENT: ::DWORD = 0x00000800;
973 pub const D3DUSAGE_RESTRICT_SHARED_RESOURCE: ::DWORD = 0x00002000;
974 pub const D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER: ::DWORD = 0x00001000;
975 ENUM!{enum D3DCUBEMAP_FACES {
976     D3DCUBEMAP_FACE_POSITIVE_X = 0,
977     D3DCUBEMAP_FACE_NEGATIVE_X = 1,
978     D3DCUBEMAP_FACE_POSITIVE_Y = 2,
979     D3DCUBEMAP_FACE_NEGATIVE_Y = 3,
980     D3DCUBEMAP_FACE_POSITIVE_Z = 4,
981     D3DCUBEMAP_FACE_NEGATIVE_Z = 5,
982 }}
983 pub const D3DLOCK_READONLY: ::DWORD = 0x00000010;
984 pub const D3DLOCK_DISCARD: ::DWORD = 0x00002000;
985 pub const D3DLOCK_NOOVERWRITE: ::DWORD = 0x00001000;
986 pub const D3DLOCK_NOSYSLOCK: ::DWORD = 0x00000800;
987 pub const D3DLOCK_DONOTWAIT: ::DWORD = 0x00004000;
988 pub const D3DLOCK_NO_DIRTY_UPDATE: ::DWORD = 0x00008000;
989 STRUCT!{struct D3DVERTEXBUFFER_DESC {
990     Format: D3DFORMAT,
991     Type: D3DRESOURCETYPE,
992     Usage: ::DWORD,
993     Pool: D3DPOOL,
994     Size: ::UINT,
995     FVF: ::DWORD,
996 }}
997 STRUCT!{struct D3DINDEXBUFFER_DESC {
998     Format: D3DFORMAT,
999     Type: D3DRESOURCETYPE,
1000     Usage: ::DWORD,
1001     Pool: D3DPOOL,
1002     Size: ::UINT,
1003 }}
1004 STRUCT!{struct D3DSURFACE_DESC {
1005     Format: D3DFORMAT,
1006     Type: D3DRESOURCETYPE,
1007     Usage: ::DWORD,
1008     Pool: D3DPOOL,
1009     MultiSampleType: D3DMULTISAMPLE_TYPE,
1010     MultiSampleQuality: ::DWORD,
1011     Width: ::UINT,
1012     Height: ::UINT,
1013 }}
1014 STRUCT!{struct D3DVOLUME_DESC {
1015     Format: D3DFORMAT,
1016     Type: D3DRESOURCETYPE,
1017     Usage: ::DWORD,
1018     Pool: D3DPOOL,
1019     Width: ::UINT,
1020     Height: ::UINT,
1021     Depth: ::UINT,
1022 }}
1023 STRUCT!{struct D3DLOCKED_RECT {
1024     Pitch: ::INT,
1025     pBits: *mut ::c_void,
1026 }}
1027 STRUCT!{struct D3DBOX {
1028     Left: ::UINT,
1029     Top: ::UINT,
1030     Right: ::UINT,
1031     Bottom: ::UINT,
1032     Front: ::UINT,
1033     Back: ::UINT,
1034 }}
1035 STRUCT!{struct D3DLOCKED_BOX {
1036     RowPitch: ::INT,
1037     SlicePitch: ::INT,
1038     pBits: *mut ::c_void,
1039 }}
1040 STRUCT!{struct D3DRANGE {
1041     Offset: ::UINT,
1042     Size: ::UINT,
1043 }}
1044 STRUCT!{struct D3DRECTPATCH_INFO {
1045     StartVertexOffsetWidth: ::UINT,
1046     StartVertexOffsetHeight: ::UINT,
1047     Width: ::UINT,
1048     Height: ::UINT,
1049     Stride: ::UINT,
1050     Basis: D3DBASISTYPE,
1051     Degree: D3DDEGREETYPE,
1052 }}
1053 STRUCT!{struct D3DTRIPATCH_INFO {
1054     StartVertexOffset: ::UINT,
1055     NumVertices: ::UINT,
1056     Basis: D3DBASISTYPE,
1057     Degree: D3DDEGREETYPE,
1058 }}
1059 pub const MAX_DEVICE_IDENTIFIER_STRING: usize = 512;
1060 STRUCT!{nodebug struct D3DADAPTER_IDENTIFIER9 {
1061     Driver: [::c_char; MAX_DEVICE_IDENTIFIER_STRING],
1062     Description: [::c_char; MAX_DEVICE_IDENTIFIER_STRING],
1063     DeviceName: [::c_char; 32],
1064     DriverVersion: ::LARGE_INTEGER,
1065     VendorId: ::DWORD,
1066     DeviceId: ::DWORD,
1067     SubSysId: ::DWORD,
1068     Revision: ::DWORD,
1069     DeviceIdentifier: ::GUID,
1070     WHQLLevel: ::DWORD,
1071 }}
1072 STRUCT!{struct D3DRASTER_STATUS {
1073     InVBlank: ::BOOL,
1074     ScanLine: ::UINT,
1075 }}
1076 ENUM!{enum D3DDEBUGMONITORTOKENS {
1077     D3DDMT_ENABLE = 0,
1078     D3DDMT_DISABLE = 1,
1079 }}
1080 ENUM!{enum D3DQUERYTYPE {
1081     D3DQUERYTYPE_VCACHE = 4,
1082     D3DQUERYTYPE_RESOURCEMANAGER = 5,
1083     D3DQUERYTYPE_VERTEXSTATS = 6,
1084     D3DQUERYTYPE_EVENT = 8,
1085     D3DQUERYTYPE_OCCLUSION = 9,
1086     D3DQUERYTYPE_TIMESTAMP = 10,
1087     D3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
1088     D3DQUERYTYPE_TIMESTAMPFREQ = 12,
1089     D3DQUERYTYPE_PIPELINETIMINGS = 13,
1090     D3DQUERYTYPE_INTERFACETIMINGS = 14,
1091     D3DQUERYTYPE_VERTEXTIMINGS = 15,
1092     D3DQUERYTYPE_PIXELTIMINGS = 16,
1093     D3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
1094     D3DQUERYTYPE_CACHEUTILIZATION = 18,
1095     D3DQUERYTYPE_MEMORYPRESSURE = 19,
1096 }}
1097 pub const D3DISSUE_END: ::DWORD = 1 << 0;
1098 pub const D3DISSUE_BEGIN: ::DWORD = 1 << 1;
1099 pub const D3DGETDATA_FLUSH: ::DWORD = 1 << 0;
1100 STRUCT!{struct D3DRESOURCESTATS {
1101     bThrashing: ::BOOL,
1102     ApproxBytesDownloaded: ::DWORD,
1103     NumEvicts: ::DWORD,
1104     NumVidCreates: ::DWORD,
1105     LastPri: ::DWORD,
1106     NumUsed: ::DWORD,
1107     NumUsedInVidMem: ::DWORD,
1108     WorkingSet: ::DWORD,
1109     WorkingSetBytes: ::DWORD,
1110     TotalManaged: ::DWORD,
1111     TotalBytes: ::DWORD,
1112 }}
1113 pub const D3DRTYPECOUNT: usize = 8;
1114 STRUCT!{struct D3DDEVINFO_RESOURCEMANAGER {
1115     stats: [D3DRESOURCESTATS; 8 /*D3DRTYPECOUNT, rust bug?*/],
1116 }}
1117 pub type LPD3DDEVINFO_RESOURCEMANAGER = *mut D3DDEVINFO_RESOURCEMANAGER;
1118 STRUCT!{struct D3DDEVINFO_D3DVERTEXSTATS {
1119     NumRenderedTriangles: ::DWORD,
1120     NumExtraClippingTriangles: ::DWORD,
1121 }}
1122 pub type LPD3DDEVINFO_D3DVERTEXSTATS = *mut D3DDEVINFO_D3DVERTEXSTATS;
1123 STRUCT!{struct D3DDEVINFO_VCACHE {
1124     Pattern: ::DWORD,
1125     OptMethod: ::DWORD,
1126     CacheSize: ::DWORD,
1127     MagicNumber: ::DWORD,
1128 }}
1129 pub type LPD3DDEVINFO_VCACHE = *mut D3DDEVINFO_VCACHE;
1130 STRUCT!{struct D3DDEVINFO_D3D9PIPELINETIMINGS {
1131     VertexProcessingTimePercent: ::FLOAT,
1132     PixelProcessingTimePercent: ::FLOAT,
1133     OtherGPUProcessingTimePercent: ::FLOAT,
1134     GPUIdleTimePercent: ::FLOAT,
1135 }}
1136 STRUCT!{struct D3DDEVINFO_D3D9INTERFACETIMINGS {
1137     WaitingForGPUToUseApplicationResourceTimePercent: ::FLOAT,
1138     WaitingForGPUToAcceptMoreCommandsTimePercent: ::FLOAT,
1139     WaitingForGPUToStayWithinLatencyTimePercent: ::FLOAT,
1140     WaitingForGPUExclusiveResourceTimePercent: ::FLOAT,
1141     WaitingForGPUOtherTimePercent: ::FLOAT,
1142 }}
1143 STRUCT!{struct D3DDEVINFO_D3D9STAGETIMINGS {
1144     MemoryProcessingPercent: ::FLOAT,
1145     ComputationProcessingPercent: ::FLOAT,
1146 }}
1147 STRUCT!{struct D3DDEVINFO_D3D9BANDWIDTHTIMINGS {
1148     MaxBandwidthUtilized: ::FLOAT,
1149     FrontEndUploadMemoryUtilizedPercent: ::FLOAT,
1150     VertexRateUtilizedPercent: ::FLOAT,
1151     TriangleSetupRateUtilizedPercent: ::FLOAT,
1152     FillRateUtilizedPercent: ::FLOAT,
1153 }}
1154 STRUCT!{struct D3DDEVINFO_D3D9CACHEUTILIZATION {
1155     TextureCacheHitRate: ::FLOAT,
1156     PostTransformVertexCacheHitRate: ::FLOAT,
1157 }}
1158 STRUCT!{struct D3DMEMORYPRESSURE {
1159     BytesEvictedFromProcess: ::UINT64,
1160     SizeOfInefficientAllocation: ::UINT64,
1161     LevelOfEfficiency: ::DWORD,
1162 }}
1163 ENUM!{enum D3DCOMPOSERECTSOP {
1164     D3DCOMPOSERECTS_COPY = 1,
1165     D3DCOMPOSERECTS_OR = 2,
1166     D3DCOMPOSERECTS_AND = 3,
1167     D3DCOMPOSERECTS_NEG = 4,
1168 }}
1169 STRUCT!{struct D3DCOMPOSERECTDESC {
1170     X: ::USHORT,
1171     Y: ::USHORT,
1172     Width: ::USHORT,
1173     Height: ::USHORT,
1174 }}
1175 STRUCT!{struct D3DCOMPOSERECTDESTINATION {
1176     SrcRectIndex: ::USHORT,
1177     Reserved: ::USHORT,
1178     X: ::SHORT,
1179     Y: ::SHORT,
1180 }}
1181 pub const D3DCOMPOSERECTS_MAXNUMRECTS: ::DWORD = 0xFFFF;
1182 pub const D3DCONVOLUTIONMONO_MAXWIDTH: ::DWORD = 7;
1183 pub const D3DCONVOLUTIONMONO_MAXHEIGHT: ::DWORD = D3DCONVOLUTIONMONO_MAXWIDTH;
1184 pub const D3DFMT_A1_SURFACE_MAXWIDTH: ::DWORD = 8192;
1185 pub const D3DFMT_A1_SURFACE_MAXHEIGHT: ::DWORD = 2048;
1186 STRUCT!{struct D3DPRESENTSTATS {
1187     PresentCount: ::UINT,
1188     PresentRefreshCount: ::UINT,
1189     SyncRefreshCount: ::UINT,
1190     SyncQPCTime: ::LARGE_INTEGER,
1191     SyncGPUTime: ::LARGE_INTEGER,
1192 }}
1193 ENUM!{enum D3DSCANLINEORDERING {
1194     D3DSCANLINEORDERING_UNKNOWN = 0,
1195     D3DSCANLINEORDERING_PROGRESSIVE = 1,
1196     D3DSCANLINEORDERING_INTERLACED = 2,
1197 }}
1198 STRUCT!{struct D3DDISPLAYMODEEX {
1199     Size: ::UINT,
1200     Width: ::UINT,
1201     Height: ::UINT,
1202     RefreshRate: ::UINT,
1203     Format: D3DFORMAT,
1204     ScanLineOrdering: D3DSCANLINEORDERING,
1205 }}
1206 STRUCT!{struct D3DDISPLAYMODEFILTER {
1207     Size: ::UINT,
1208     Format: D3DFORMAT,
1209     ScanLineOrdering: D3DSCANLINEORDERING,
1210 }}
1211 ENUM!{enum D3DDISPLAYROTATION {
1212     D3DDISPLAYROTATION_IDENTITY = 1,
1213     D3DDISPLAYROTATION_90 = 2,
1214     D3DDISPLAYROTATION_180 = 3,
1215     D3DDISPLAYROTATION_270 = 4,
1216 }}
1217 pub const D3D9_RESOURCE_PRIORITY_MINIMUM: ::DWORD = 0x28000000;
1218 pub const D3D9_RESOURCE_PRIORITY_LOW: ::DWORD = 0x50000000;
1219 pub const D3D9_RESOURCE_PRIORITY_NORMAL: ::DWORD = 0x78000000;
1220 pub const D3D9_RESOURCE_PRIORITY_HIGH: ::DWORD = 0xa0000000;
1221 pub const D3D9_RESOURCE_PRIORITY_MAXIMUM: ::DWORD = 0xc8000000;
1222 pub const D3D_OMAC_SIZE: usize = 16;
1223 STRUCT!{struct D3D_OMAC {
1224     Omac: [::BYTE; D3D_OMAC_SIZE],
1225 }}
1226 ENUM!{enum D3DAUTHENTICATEDCHANNELTYPE {
1227     D3DAUTHENTICATEDCHANNEL_D3D9 = 1,
1228     D3DAUTHENTICATEDCHANNEL_DRIVER_SOFTWARE = 2,
1229     D3DAUTHENTICATEDCHANNEL_DRIVER_HARDWARE = 3,
1230 }}
1231 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERY_INPUT {
1232     QueryType: ::GUID,
1233     hChannel: ::HANDLE,
1234     SequenceNumber: ::UINT,
1235 }}
1236 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT {
1237     omac: D3D_OMAC,
1238     QueryType: ::GUID,
1239     hChannel: ::HANDLE,
1240     SequenceNumber: ::UINT,
1241     ReturnCode: ::HRESULT,
1242 }}
1243 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS {
1244     Value: ::UINT,
1245 }}
1246 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT {
1247     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1248     ProtectionFlags: D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS,
1249 }}
1250 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT {
1251     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1252     ChannelType: D3DAUTHENTICATEDCHANNELTYPE,
1253 }}
1254 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT {
1255     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1256     DeviceHandle: ::HANDLE,
1257 }}
1258 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT {
1259     Input: D3DAUTHENTICATEDCHANNEL_QUERY_INPUT,
1260     DXVA2DecodeHandle: ::HANDLE,
1261 }}
1262 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT {
1263     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1264     DXVA2DecodeHandle: ::HANDLE,
1265     CryptoSessionHandle: ::HANDLE,
1266     DeviceHandle: ::HANDLE,
1267 }}
1268 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT {
1269     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1270     NumRestrictedSharedResourceProcesses: ::UINT,
1271 }}
1272 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT {
1273     Input: D3DAUTHENTICATEDCHANNEL_QUERY_INPUT,
1274     ProcessIndex: ::UINT,
1275 }}
1276 ENUM!{enum D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE {
1277     PROCESSIDTYPE_UNKNOWN = 0,
1278     PROCESSIDTYPE_DWM = 1,
1279     PROCESSIDTYPE_HANDLE = 2,
1280 }}
1281 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT {
1282     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1283     ProcessIndex: ::UINT,
1284     ProcessIdentifer: D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE,
1285     ProcessHandle: ::HANDLE,
1286 }}
1287 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT {
1288     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1289     NumUnrestrictedProtectedSharedResources: ::UINT,
1290 }}
1291 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT {
1292     Input: D3DAUTHENTICATEDCHANNEL_QUERY_INPUT,
1293     DeviceHandle: ::HANDLE,
1294     CryptoSessionHandle: ::HANDLE,
1295 }}
1296 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT {
1297     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1298     DeviceHandle: ::HANDLE,
1299     CryptoSessionHandle: ::HANDLE,
1300     NumOutputIDs: ::UINT,
1301 }}
1302 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT {
1303     Input: D3DAUTHENTICATEDCHANNEL_QUERY_INPUT,
1304     DeviceHandle: ::HANDLE,
1305     CryptoSessionHandle: ::HANDLE,
1306     OutputIDIndex: ::UINT,
1307 }}
1308 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT {
1309     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1310     DeviceHandle: ::HANDLE,
1311     CryptoSessionHandle: ::HANDLE,
1312     OutputIDIndex: ::UINT,
1313     OutputID: ::UINT64,
1314 }}
1315 FLAGS!{enum D3DBUSTYPE {
1316     D3DBUSTYPE_OTHER = 0x00000000,
1317     D3DBUSTYPE_PCI = 0x00000001,
1318     D3DBUSTYPE_PCIX = 0x00000002,
1319     D3DBUSTYPE_PCIEXPRESS = 0x00000003,
1320     D3DBUSTYPE_AGP = 0x00000004,
1321     D3DBUSIMPL_MODIFIER_INSIDE_OF_CHIPSET = 0x00010000,
1322     MD3DBUSIMPL_ODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP = 0x00020000,
1323     D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET = 0x00030000,
1324     D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR = 0x00040000,
1325     D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE = 0x00050000,
1326     D3DBUSIMPL_MODIFIER_NON_STANDARD = 0x80000000,
1327 }}
1328 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT {
1329     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1330     BusType: D3DBUSTYPE,
1331     bAccessibleInContiguousBlocks: ::BOOL,
1332     bAccessibleInNonContiguousBlocks: ::BOOL,
1333 }}
1334 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT {
1335     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1336     NumEncryptionGuids: ::UINT,
1337 }}
1338 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT {
1339     Input: D3DAUTHENTICATEDCHANNEL_QUERY_INPUT,
1340     EncryptionGuidIndex: ::UINT,
1341 }}
1342 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT {
1343     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1344     EncryptionGuidIndex: ::UINT,
1345     EncryptionGuid: ::GUID,
1346 }}
1347 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT {
1348     Output: D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT,
1349     EncryptionGuid: ::GUID,
1350 }}
1351 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT {
1352     omac: D3D_OMAC,
1353     ConfigureType: ::GUID,
1354     hChannel: ::HANDLE,
1355     SequenceNumber: ::UINT,
1356 }}
1357 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT {
1358     omac: D3D_OMAC,
1359     ConfigureType: ::GUID,
1360     hChannel: ::HANDLE,
1361     SequenceNumber: ::UINT,
1362     ReturnCode: ::HRESULT,
1363 }}
1364 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE {
1365     Parameters: D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT,
1366     StartSequenceQuery: ::UINT,
1367     StartSequenceConfigure: ::UINT,
1368 }}
1369 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION {
1370     Parameters: D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT,
1371     Protections: D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS,
1372 }}
1373 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION {
1374     Parameters: D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT,
1375     DXVA2DecodeHandle: ::HANDLE,
1376     CryptoSessionHandle: ::HANDLE,
1377     DeviceHandle: ::HANDLE,
1378 }}
1379 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE {
1380     Parameters: D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT,
1381     ProcessIdentiferType: D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE,
1382     ProcessHandle: ::HANDLE,
1383     AllowAccess: ::BOOL,
1384 }}
1385 STRUCT!{struct D3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION {
1386     Parameters: D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT,
1387     EncryptionGuid: ::GUID,
1388 }}
1389 STRUCT!{struct D3DENCRYPTED_BLOCK_INFO {
1390     NumEncryptedBytesAtBeginning: ::UINT,
1391     NumBytesInSkipPattern: ::UINT,
1392     NumBytesInEncryptPattern: ::UINT,
1393 }}
1394 STRUCT!{struct D3DAES_CTR_IV {
1395     IV: ::UINT64,
1396     Count: ::UINT64,
1397 }}
1398