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