winapi_ui_automation/shared/
d3d9types.rs

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