]> git.cworth.org Git - apitrace/blob - specs/d3d9types.py
d3dtrace: Recognize YV12 format.
[apitrace] / specs / d3d9types.py
1 ##########################################################################
2 #
3 # Copyright 2011 Jose Fonseca
4 # Copyright 2008-2009 VMware, Inc.
5 # All Rights Reserved.
6 #
7 # Permission is hereby granted, free of charge, to any person obtaining a copy
8 # of this software and associated documentation files (the "Software"), to deal
9 # in the Software without restriction, including without limitation the rights
10 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 # copies of the Software, and to permit persons to whom the Software is
12 # furnished to do so, subject to the following conditions:
13 #
14 # The above copyright notice and this permission notice shall be included in
15 # all copies or substantial portions of the Software.
16 #
17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 # THE SOFTWARE.
24 #
25 ##########################################################################/
26
27 """d3d9types.h"""
28
29 from winapi import *
30
31 D3DCOLOR = Alias("D3DCOLOR", DWORD)
32
33 D3DVECTOR = Struct("D3DVECTOR", [
34     (Float, "x"),
35     (Float, "y"),
36     (Float, "z"),
37 ])
38
39 D3DCOLORVALUE = Struct("D3DCOLORVALUE", [
40     (Float, "r"),
41     (Float, "g"),
42     (Float, "b"),
43     (Float, "a"),
44 ])
45
46 D3DRECT = Struct("D3DRECT", [
47     (LONG, "x1"),
48     (LONG, "y1"),
49     (LONG, "x2"),
50     (LONG, "y2"),
51 ])
52
53 D3DMATRIX = Struct("D3DMATRIX", [
54     (Array(Array(Float, 4), "4"), "m"),
55 ])
56
57 D3DVIEWPORT9 = Struct("D3DVIEWPORT9", [
58     (DWORD, "X"),
59     (DWORD, "Y"),
60     (DWORD, "Width"),
61     (DWORD, "Height"),
62     (Float, "MinZ"),
63     (Float, "MaxZ"),
64 ])
65
66 D3DCLIPPLANE = Flags(DWORD, [
67     "D3DCLIPPLANE0",
68     "D3DCLIPPLANE1",
69     "D3DCLIPPLANE2",
70     "D3DCLIPPLANE3",
71     "D3DCLIPPLANE4",
72     "D3DCLIPPLANE5",
73 ])
74
75 D3DCS = Flags(DWORD, [
76     "D3DCS_ALL",
77     "D3DCS_LEFT",
78     "D3DCS_RIGHT",
79     "D3DCS_TOP",
80     "D3DCS_BOTTOM",
81     "D3DCS_FRONT",
82     "D3DCS_BACK",
83     "D3DCS_PLANE0",
84     "D3DCS_PLANE1",
85     "D3DCS_PLANE2",
86     "D3DCS_PLANE3",
87     "D3DCS_PLANE4",
88     "D3DCS_PLANE5",
89 ])
90
91 D3DCLIPSTATUS9 = Struct("D3DCLIPSTATUS9", [
92     (DWORD, "ClipUnion"),
93     (DWORD, "ClipIntersection"),
94 ])
95
96 D3DMATERIAL9 = Struct("D3DMATERIAL9", [
97     (D3DCOLORVALUE, "Diffuse"),
98     (D3DCOLORVALUE, "Ambient"),
99     (D3DCOLORVALUE, "Specular"),
100     (D3DCOLORVALUE, "Emissive"),
101     (Float, "Power"),
102 ])
103
104 D3DLIGHTTYPE = Enum("D3DLIGHTTYPE", [
105     "D3DLIGHT_POINT",
106     "D3DLIGHT_SPOT",
107     "D3DLIGHT_DIRECTIONAL",
108 ])
109
110 D3DLIGHT9 = Struct("D3DLIGHT9", [
111     (D3DLIGHTTYPE, "Type"),
112     (D3DCOLORVALUE, "Diffuse"),
113     (D3DCOLORVALUE, "Specular"),
114     (D3DCOLORVALUE, "Ambient"),
115     (D3DVECTOR, "Position"),
116     (D3DVECTOR, "Direction"),
117     (Float, "Range"),
118     (Float, "Falloff"),
119     (Float, "Attenuation0"),
120     (Float, "Attenuation1"),
121     (Float, "Attenuation2"),
122     (Float, "Theta"),
123     (Float, "Phi"),
124 ])
125
126 D3DCLEAR = Flags(DWORD, [
127     "D3DCLEAR_TARGET",
128     "D3DCLEAR_ZBUFFER",
129     "D3DCLEAR_STENCIL",
130 ])
131
132 D3DSHADEMODE = Enum("D3DSHADEMODE", [
133     "D3DSHADE_FLAT",
134     "D3DSHADE_GOURAUD",
135     "D3DSHADE_PHONG",
136 ])
137
138 D3DFILLMODE = Enum("D3DFILLMODE", [
139     "D3DFILL_POINT",
140     "D3DFILL_WIREFRAME",
141     "D3DFILL_SOLID",
142 ])
143
144 D3DBLEND = Enum("D3DBLEND", [
145     "D3DBLEND_ZERO",
146     "D3DBLEND_ONE",
147     "D3DBLEND_SRCCOLOR",
148     "D3DBLEND_INVSRCCOLOR",
149     "D3DBLEND_SRCALPHA",
150     "D3DBLEND_INVSRCALPHA",
151     "D3DBLEND_DESTALPHA",
152     "D3DBLEND_INVDESTALPHA",
153     "D3DBLEND_DESTCOLOR",
154     "D3DBLEND_INVDESTCOLOR",
155     "D3DBLEND_SRCALPHASAT",
156     "D3DBLEND_BOTHSRCALPHA",
157     "D3DBLEND_BOTHINVSRCALPHA",
158     "D3DBLEND_BLENDFACTOR",
159     "D3DBLEND_INVBLENDFACTOR",
160     "D3DBLEND_SRCCOLOR2",
161     "D3DBLEND_INVSRCCOLOR2",
162 ])
163
164 D3DBLENDOP = Enum("D3DBLENDOP", [
165     "D3DBLENDOP_ADD",
166     "D3DBLENDOP_SUBTRACT",
167     "D3DBLENDOP_REVSUBTRACT",
168     "D3DBLENDOP_MIN",
169     "D3DBLENDOP_MAX",
170 ])
171
172 D3DTEXTUREADDRESS = Enum("D3DTEXTUREADDRESS", [
173     "D3DTADDRESS_WRAP",
174     "D3DTADDRESS_MIRROR",
175     "D3DTADDRESS_CLAMP",
176     "D3DTADDRESS_BORDER",
177     "D3DTADDRESS_MIRRORONCE",
178 ])
179
180 D3DCULL = Enum("D3DCULL", [
181     "D3DCULL_NONE",
182     "D3DCULL_CW",
183     "D3DCULL_CCW",
184 ])
185
186 D3DCMPFUNC = Enum("D3DCMPFUNC", [
187     "D3DCMP_NEVER",
188     "D3DCMP_LESS",
189     "D3DCMP_EQUAL",
190     "D3DCMP_LESSEQUAL",
191     "D3DCMP_GREATER",
192     "D3DCMP_NOTEQUAL",
193     "D3DCMP_GREATEREQUAL",
194     "D3DCMP_ALWAYS",
195 ])
196
197 D3DSTENCILOP = Enum("D3DSTENCILOP", [
198     "D3DSTENCILOP_KEEP",
199     "D3DSTENCILOP_ZERO",
200     "D3DSTENCILOP_REPLACE",
201     "D3DSTENCILOP_INCRSAT",
202     "D3DSTENCILOP_DECRSAT",
203     "D3DSTENCILOP_INVERT",
204     "D3DSTENCILOP_INCR",
205     "D3DSTENCILOP_DECR",
206 ])
207
208 D3DFOGMODE = Enum("D3DFOGMODE", [
209     "D3DFOG_NONE",
210     "D3DFOG_EXP",
211     "D3DFOG_EXP2",
212     "D3DFOG_LINEAR",
213 ])
214
215 D3DZBUFFERTYPE = Enum("D3DZBUFFERTYPE", [
216     "D3DZB_FALSE",
217     "D3DZB_TRUE",
218     "D3DZB_USEW",
219 ])
220
221 D3DPRIMITIVETYPE = Enum("D3DPRIMITIVETYPE", [
222     "D3DPT_POINTLIST",
223     "D3DPT_LINELIST",
224     "D3DPT_LINESTRIP",
225     "D3DPT_TRIANGLELIST",
226     "D3DPT_TRIANGLESTRIP",
227     "D3DPT_TRIANGLEFAN",
228 ])
229
230 D3DTRANSFORMSTATETYPE = Enum("D3DTRANSFORMSTATETYPE", [
231     "D3DTS_VIEW",
232     "D3DTS_PROJECTION",
233     "D3DTS_TEXTURE0",
234     "D3DTS_TEXTURE1",
235     "D3DTS_TEXTURE2",
236     "D3DTS_TEXTURE3",
237     "D3DTS_TEXTURE4",
238     "D3DTS_TEXTURE5",
239     "D3DTS_TEXTURE6",
240     "D3DTS_TEXTURE7",
241     "D3DTS_WORLD",
242     "D3DTS_WORLD1",
243     "D3DTS_WORLD2",
244     "D3DTS_WORLD3",
245 ])
246
247 D3DMATERIALCOLORSOURCE = Enum("D3DMATERIALCOLORSOURCE", [
248     "D3DMCS_MATERIAL",
249     "D3DMCS_COLOR1",
250     "D3DMCS_COLOR2",
251 ])
252
253 D3DWRAPCOORD = Flags(DWORD, [
254     "D3DWRAPCOORD_0",
255     "D3DWRAPCOORD_1",
256     "D3DWRAPCOORD_2",
257     "D3DWRAPCOORD_3",
258 ])
259
260 D3DCOLORWRITEENABLE = Flags(DWORD, [
261     "D3DCOLORWRITEENABLE_RED",
262     "D3DCOLORWRITEENABLE_GREEN",
263     "D3DCOLORWRITEENABLE_BLUE",
264     "D3DCOLORWRITEENABLE_ALPHA",
265 ])
266
267 D3DDEGREETYPE = Enum("D3DDEGREETYPE", [
268     "D3DDEGREE_LINEAR",
269     "D3DDEGREE_QUADRATIC",
270     "D3DDEGREE_CUBIC",
271     "D3DDEGREE_QUINTIC",
272 ])
273
274 D3DPATCHEDGESTYLE = Enum("D3DPATCHEDGESTYLE", [
275     "D3DPATCHEDGE_DISCRETE",
276     "D3DPATCHEDGE_CONTINUOUS",
277 ])
278
279 D3DVERTEXBLENDFLAGS = Enum("D3DVERTEXBLENDFLAGS", [
280     "D3DVBF_DISABLE",
281     "D3DVBF_1WEIGHTS",
282     "D3DVBF_2WEIGHTS",
283     "D3DVBF_3WEIGHTS",
284     "D3DVBF_TWEENING",
285     "D3DVBF_0WEIGHTS",
286 ])
287
288 D3DDEBUGMONITORTOKENS = Enum("D3DDEBUGMONITORTOKENS", [
289     "D3DDMT_ENABLE",
290     "D3DDMT_DISABLE",
291 ])
292
293 # TODO: Convert these to/from actual floats
294 FLOAT_AS_DWORD = DWORD
295
296 D3DRENDERSTATETYPE, D3DRENDERSTATEVALUE = EnumPolymorphic("D3DRENDERSTATETYPE", "State", [
297     ("D3DRS_ZENABLE", D3DZBUFFERTYPE),
298     ("D3DRS_FILLMODE", D3DFILLMODE),
299     ("D3DRS_SHADEMODE", D3DSHADEMODE),
300     ("D3DRS_ZWRITEENABLE", BOOL),
301     ("D3DRS_ALPHATESTENABLE", BOOL),
302     ("D3DRS_LASTPIXEL", BOOL),
303     ("D3DRS_SRCBLEND", D3DBLEND),
304     ("D3DRS_DESTBLEND", D3DBLEND),
305     ("D3DRS_CULLMODE", D3DCULL),
306     ("D3DRS_ZFUNC", D3DCMPFUNC),
307     ("D3DRS_ALPHAREF", DWORD),
308     ("D3DRS_ALPHAFUNC", D3DCMPFUNC),
309     ("D3DRS_DITHERENABLE", BOOL),
310     ("D3DRS_ALPHABLENDENABLE", BOOL),
311     ("D3DRS_FOGENABLE", BOOL),
312     ("D3DRS_SPECULARENABLE", BOOL),
313     ("D3DRS_FOGCOLOR", D3DCOLOR),
314     ("D3DRS_FOGTABLEMODE", D3DFOGMODE),
315     ("D3DRS_FOGSTART", FLOAT_AS_DWORD),
316     ("D3DRS_FOGEND", FLOAT_AS_DWORD),
317     ("D3DRS_FOGDENSITY", FLOAT_AS_DWORD),
318     ("D3DRS_RANGEFOGENABLE", BOOL),
319     ("D3DRS_STENCILENABLE", BOOL),
320     ("D3DRS_STENCILFAIL", D3DSTENCILOP),
321     ("D3DRS_STENCILZFAIL", D3DSTENCILOP),
322     ("D3DRS_STENCILPASS", D3DSTENCILOP),
323     ("D3DRS_STENCILFUNC", D3DCMPFUNC),
324     ("D3DRS_STENCILREF", DWORD),
325     ("D3DRS_STENCILMASK", DWORD),
326     ("D3DRS_STENCILWRITEMASK", DWORD),
327     ("D3DRS_TEXTUREFACTOR", D3DCOLOR),
328     ("D3DRS_WRAP0", D3DWRAPCOORD),
329     ("D3DRS_WRAP1", D3DWRAPCOORD),
330     ("D3DRS_WRAP2", D3DWRAPCOORD),
331     ("D3DRS_WRAP3", D3DWRAPCOORD),
332     ("D3DRS_WRAP4", D3DWRAPCOORD),
333     ("D3DRS_WRAP5", D3DWRAPCOORD),
334     ("D3DRS_WRAP6", D3DWRAPCOORD),
335     ("D3DRS_WRAP7", D3DWRAPCOORD),
336     ("D3DRS_CLIPPING", BOOL),
337     ("D3DRS_LIGHTING", BOOL),
338     ("D3DRS_AMBIENT", D3DCOLOR),
339     ("D3DRS_FOGVERTEXMODE", D3DFOGMODE),
340     ("D3DRS_COLORVERTEX", BOOL),
341     ("D3DRS_LOCALVIEWER", BOOL),
342     ("D3DRS_NORMALIZENORMALS", BOOL),
343     ("D3DRS_DIFFUSEMATERIALSOURCE", D3DMATERIALCOLORSOURCE),
344     ("D3DRS_SPECULARMATERIALSOURCE", D3DMATERIALCOLORSOURCE),
345     ("D3DRS_AMBIENTMATERIALSOURCE", D3DMATERIALCOLORSOURCE),
346     ("D3DRS_EMISSIVEMATERIALSOURCE", D3DMATERIALCOLORSOURCE),
347     ("D3DRS_VERTEXBLEND", D3DVERTEXBLENDFLAGS),
348     ("D3DRS_CLIPPLANEENABLE", D3DCLIPPLANE),
349     ("D3DRS_POINTSIZE", FLOAT_AS_DWORD),
350     ("D3DRS_POINTSIZE_MIN", FLOAT_AS_DWORD),
351     ("D3DRS_POINTSPRITEENABLE", BOOL),
352     ("D3DRS_POINTSCALEENABLE", BOOL),
353     ("D3DRS_POINTSCALE_A", FLOAT_AS_DWORD),
354     ("D3DRS_POINTSCALE_B", FLOAT_AS_DWORD),
355     ("D3DRS_POINTSCALE_C", FLOAT_AS_DWORD),
356     ("D3DRS_MULTISAMPLEANTIALIAS", BOOL),
357     ("D3DRS_MULTISAMPLEMASK", DWORD),
358     ("D3DRS_PATCHEDGESTYLE", D3DPATCHEDGESTYLE),
359     ("D3DRS_DEBUGMONITORTOKEN", D3DDEBUGMONITORTOKENS),
360     ("D3DRS_POINTSIZE_MAX", FLOAT_AS_DWORD),
361     ("D3DRS_INDEXEDVERTEXBLENDENABLE", BOOL),
362     ("D3DRS_COLORWRITEENABLE", DWORD),
363     ("D3DRS_TWEENFACTOR", FLOAT_AS_DWORD),
364     ("D3DRS_BLENDOP", D3DBLENDOP),
365     ("D3DRS_POSITIONDEGREE", D3DDEGREETYPE),
366     ("D3DRS_NORMALDEGREE", D3DDEGREETYPE),
367     ("D3DRS_SCISSORTESTENABLE", BOOL),
368     ("D3DRS_SLOPESCALEDEPTHBIAS", FLOAT_AS_DWORD),
369     ("D3DRS_ANTIALIASEDLINEENABLE", BOOL),
370     ("D3DRS_MINTESSELLATIONLEVEL", FLOAT_AS_DWORD),
371     ("D3DRS_MAXTESSELLATIONLEVEL", FLOAT_AS_DWORD),
372     ("D3DRS_ADAPTIVETESS_X", FLOAT_AS_DWORD),
373     ("D3DRS_ADAPTIVETESS_Y", FLOAT_AS_DWORD),
374     ("D3DRS_ADAPTIVETESS_Z", FLOAT_AS_DWORD),
375     ("D3DRS_ADAPTIVETESS_W", FLOAT_AS_DWORD),
376     ("D3DRS_ENABLEADAPTIVETESSELLATION", BOOL),
377     ("D3DRS_TWOSIDEDSTENCILMODE", BOOL),
378     ("D3DRS_CCW_STENCILFAIL", D3DSTENCILOP),
379     ("D3DRS_CCW_STENCILZFAIL", D3DSTENCILOP),
380     ("D3DRS_CCW_STENCILPASS", D3DSTENCILOP),
381     ("D3DRS_CCW_STENCILFUNC", D3DCMPFUNC),
382     ("D3DRS_COLORWRITEENABLE1", D3DCOLORWRITEENABLE),
383     ("D3DRS_COLORWRITEENABLE2", D3DCOLORWRITEENABLE),
384     ("D3DRS_COLORWRITEENABLE3", D3DCOLORWRITEENABLE),
385     ("D3DRS_BLENDFACTOR", D3DCOLOR),
386     ("D3DRS_SRGBWRITEENABLE", BOOL),
387     ("D3DRS_DEPTHBIAS", FLOAT_AS_DWORD),
388     ("D3DRS_WRAP8", D3DWRAPCOORD),
389     ("D3DRS_WRAP9", D3DWRAPCOORD),
390     ("D3DRS_WRAP10", D3DWRAPCOORD),
391     ("D3DRS_WRAP11", D3DWRAPCOORD),
392     ("D3DRS_WRAP12", D3DWRAPCOORD),
393     ("D3DRS_WRAP13", D3DWRAPCOORD),
394     ("D3DRS_WRAP14", D3DWRAPCOORD),
395     ("D3DRS_WRAP15", D3DWRAPCOORD),
396     ("D3DRS_SEPARATEALPHABLENDENABLE", BOOL),
397     ("D3DRS_SRCBLENDALPHA", D3DBLEND),
398     ("D3DRS_DESTBLENDALPHA", D3DBLEND),
399     ("D3DRS_BLENDOPALPHA", D3DBLENDOP),
400
401     # XXX: D3DRENDERSTATE_WRAPBIAS + n
402 ], DWORD)
403
404 D3DTSS_TCI = Flags(DWORD, [
405     #"D3DTSS_TCI_PASSTHRU", # 0
406     "D3DTSS_TCI_CAMERASPACENORMAL",
407     "D3DTSS_TCI_CAMERASPACEPOSITION",
408     "D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR",
409     "D3DTSS_TCI_SPHEREMAP",
410 ])
411
412 D3DTEXTUREOP = Enum("D3DTEXTUREOP", [
413     "D3DTOP_DISABLE",
414     "D3DTOP_SELECTARG1",
415     "D3DTOP_SELECTARG2",
416     "D3DTOP_MODULATE",
417     "D3DTOP_MODULATE2X",
418     "D3DTOP_MODULATE4X",
419     "D3DTOP_ADD",
420     "D3DTOP_ADDSIGNED",
421     "D3DTOP_ADDSIGNED2X",
422     "D3DTOP_SUBTRACT",
423     "D3DTOP_ADDSMOOTH",
424     "D3DTOP_BLENDDIFFUSEALPHA",
425     "D3DTOP_BLENDTEXTUREALPHA",
426     "D3DTOP_BLENDFACTORALPHA",
427     "D3DTOP_BLENDTEXTUREALPHAPM",
428     "D3DTOP_BLENDCURRENTALPHA",
429     "D3DTOP_PREMODULATE",
430     "D3DTOP_MODULATEALPHA_ADDCOLOR",
431     "D3DTOP_MODULATECOLOR_ADDALPHA",
432     "D3DTOP_MODULATEINVALPHA_ADDCOLOR",
433     "D3DTOP_MODULATEINVCOLOR_ADDALPHA",
434     "D3DTOP_BUMPENVMAP",
435     "D3DTOP_BUMPENVMAPLUMINANCE",
436     "D3DTOP_DOTPRODUCT3",
437     "D3DTOP_MULTIPLYADD",
438     "D3DTOP_LERP",
439 ])
440
441 # XXX: Actually a mixture of enums and flags
442 D3DTA = FakeEnum(DWORD, [
443     "D3DTA_DIFFUSE",
444     "D3DTA_CURRENT",
445     "D3DTA_TEXTURE",
446     "D3DTA_TFACTOR",
447     "D3DTA_SPECULAR",
448     "D3DTA_TEMP",
449     "D3DTA_CONSTANT",
450     #"D3DTA_COMPLEMENT",
451     #"D3DTA_ALPHAREPLICATE",
452 ])
453
454 D3DTEXTURETRANSFORMFLAGS = Enum("D3DTEXTURETRANSFORMFLAGS", [
455     "D3DTTFF_DISABLE",
456     "D3DTTFF_COUNT1",
457     "D3DTTFF_COUNT2",
458     "D3DTTFF_COUNT3",
459     "D3DTTFF_COUNT4",
460     "D3DTTFF_PROJECTED",
461 ])
462
463 D3DTEXTUREFILTERTYPE = Enum("D3DTEXTUREFILTERTYPE", [
464     "D3DTEXF_NONE",
465     "D3DTEXF_POINT",
466     "D3DTEXF_LINEAR",
467     "D3DTEXF_ANISOTROPIC",
468     "D3DTEXF_PYRAMIDALQUAD",
469     "D3DTEXF_GAUSSIANQUAD",
470     "D3DTEXF_CONVOLUTIONMONO",
471 ])
472
473 D3DTEXTURESTAGESTATETYPE, D3DTEXTURESTAGESTATEVALUE = EnumPolymorphic("D3DTEXTURESTAGESTATETYPE", "Type", [
474     ("D3DTSS_COLOROP", D3DTEXTUREOP),
475     ("D3DTSS_COLORARG1", D3DTA),
476     ("D3DTSS_COLORARG2", D3DTA),
477     ("D3DTSS_ALPHAOP", D3DTEXTUREOP),
478     ("D3DTSS_ALPHAARG1", D3DTA),
479     ("D3DTSS_ALPHAARG2", D3DTA),
480     ("D3DTSS_BUMPENVMAT00", FLOAT_AS_DWORD),
481     ("D3DTSS_BUMPENVMAT01", FLOAT_AS_DWORD),
482     ("D3DTSS_BUMPENVMAT10", FLOAT_AS_DWORD),
483     ("D3DTSS_BUMPENVMAT11", FLOAT_AS_DWORD),
484     ("D3DTSS_TEXCOORDINDEX", D3DTSS_TCI),
485     ("D3DTSS_BUMPENVLSCALE", FLOAT_AS_DWORD),
486     ("D3DTSS_BUMPENVLOFFSET", FLOAT_AS_DWORD),
487     ("D3DTSS_TEXTURETRANSFORMFLAGS", D3DTEXTURETRANSFORMFLAGS),
488     ("D3DTSS_COLORARG0", D3DTA,),
489     ("D3DTSS_ALPHAARG0", D3DTA,),
490     ("D3DTSS_RESULTARG", D3DTA,),
491     ("D3DTSS_CONSTANT", D3DCOLOR),
492 ], DWORD)
493
494 D3DSAMPLERSTATETYPE, D3DSAMPLERSTATEVALUE = EnumPolymorphic("D3DSAMPLERSTATETYPE", "Type", [
495     ("D3DSAMP_ADDRESSU", D3DTEXTUREADDRESS),
496     ("D3DSAMP_ADDRESSV", D3DTEXTUREADDRESS),
497     ("D3DSAMP_ADDRESSW", D3DTEXTUREADDRESS),
498     ("D3DSAMP_BORDERCOLOR", D3DCOLOR),
499     ("D3DSAMP_MAGFILTER", D3DTEXTUREFILTERTYPE),
500     ("D3DSAMP_MINFILTER", D3DTEXTUREFILTERTYPE),
501     ("D3DSAMP_MIPFILTER", D3DTEXTUREFILTERTYPE),
502     ("D3DSAMP_MIPMAPLODBIAS", FLOAT_AS_DWORD),
503     ("D3DSAMP_MAXMIPLEVEL", DWORD),
504     ("D3DSAMP_MAXANISOTROPY", DWORD),
505     ("D3DSAMP_SRGBTEXTURE", BOOL),
506     ("D3DSAMP_ELEMENTINDEX", DWORD),
507     ("D3DSAMP_DMAPOFFSET", DWORD),
508 ], DWORD)
509
510 D3DPV = Flags(DWORD, [
511     "D3DPV_DONOTCOPYDATA",
512 ])
513
514 # XXX: Actually a mixture of enums and flags
515 D3DFVF = Flags(DWORD, [
516     "D3DFVF_RESERVED0",
517     "D3DFVF_XYZ",
518     "D3DFVF_XYZRHW",
519     "D3DFVF_XYZB1",
520     "D3DFVF_XYZB2",
521     "D3DFVF_XYZB3",
522     "D3DFVF_XYZB4",
523     "D3DFVF_XYZB5",
524     "D3DFVF_XYZW",
525     "D3DFVF_NORMAL",
526     "D3DFVF_PSIZE",
527     "D3DFVF_DIFFUSE",
528     "D3DFVF_SPECULAR",
529     #"D3DFVF_TEX0",
530     #"D3DFVF_TEX1",
531     #"D3DFVF_TEX2",
532     #"D3DFVF_TEX3",
533     #"D3DFVF_TEX4",
534     #"D3DFVF_TEX5",
535     #"D3DFVF_TEX6",
536     #"D3DFVF_TEX7",
537     #"D3DFVF_TEX8",
538     "D3DFVF_LASTBETA_UBYTE4",
539     "D3DFVF_LASTBETA_D3DCOLOR",
540     "D3DFVF_RESERVED2",
541     #"D3DFVF_TEXCOORDSIZE1(0)",
542     #"D3DFVF_TEXCOORDSIZE2(0)",
543     #"D3DFVF_TEXCOORDSIZE3(0)",
544     #"D3DFVF_TEXCOORDSIZE4(0)",
545     #"D3DFVF_TEXCOORDSIZE1(1)",
546     #"D3DFVF_TEXCOORDSIZE2(1)",
547     #"D3DFVF_TEXCOORDSIZE3(1)",
548     #"D3DFVF_TEXCOORDSIZE4(1)",
549     #"D3DFVF_TEXCOORDSIZE1(2)",
550     #"D3DFVF_TEXCOORDSIZE2(2)",
551     #"D3DFVF_TEXCOORDSIZE3(2)",
552     #"D3DFVF_TEXCOORDSIZE4(2)",
553     #"D3DFVF_TEXCOORDSIZE1(3)",
554     #"D3DFVF_TEXCOORDSIZE2(3)",
555     #"D3DFVF_TEXCOORDSIZE3(3)",
556     #"D3DFVF_TEXCOORDSIZE4(3)",
557 ])
558
559 D3DDECLUSAGE = FakeEnum(BYTE, [
560     "D3DDECLUSAGE_POSITION",
561     "D3DDECLUSAGE_BLENDWEIGHT",
562     "D3DDECLUSAGE_BLENDINDICES",
563     "D3DDECLUSAGE_NORMAL",
564     "D3DDECLUSAGE_PSIZE",
565     "D3DDECLUSAGE_TEXCOORD",
566     "D3DDECLUSAGE_TANGENT",
567     "D3DDECLUSAGE_BINORMAL",
568     "D3DDECLUSAGE_TESSFACTOR",
569     "D3DDECLUSAGE_POSITIONT",
570     "D3DDECLUSAGE_COLOR",
571     "D3DDECLUSAGE_FOG",
572     "D3DDECLUSAGE_DEPTH",
573     "D3DDECLUSAGE_SAMPLE",
574 ])
575
576 D3DDECLMETHOD = FakeEnum(BYTE, [
577     "D3DDECLMETHOD_DEFAULT",
578     "D3DDECLMETHOD_PARTIALU",
579     "D3DDECLMETHOD_PARTIALV",
580     "D3DDECLMETHOD_CROSSUV",
581     "D3DDECLMETHOD_UV",
582     "D3DDECLMETHOD_LOOKUP",
583     "D3DDECLMETHOD_LOOKUPPRESAMPLED",
584 ])
585
586 D3DDECLTYPE = FakeEnum(BYTE, [
587     "D3DDECLTYPE_FLOAT1",
588     "D3DDECLTYPE_FLOAT2",
589     "D3DDECLTYPE_FLOAT3",
590     "D3DDECLTYPE_FLOAT4",
591     "D3DDECLTYPE_D3DCOLOR",
592     "D3DDECLTYPE_UBYTE4",
593     "D3DDECLTYPE_SHORT2",
594     "D3DDECLTYPE_SHORT4",
595     "D3DDECLTYPE_UBYTE4N",
596     "D3DDECLTYPE_SHORT2N",
597     "D3DDECLTYPE_SHORT4N",
598     "D3DDECLTYPE_USHORT2N",
599     "D3DDECLTYPE_USHORT4N",
600     "D3DDECLTYPE_UDEC3",
601     "D3DDECLTYPE_DEC3N",
602     "D3DDECLTYPE_FLOAT16_2",
603     "D3DDECLTYPE_FLOAT16_4",
604     "D3DDECLTYPE_UNUSED",
605 ])
606
607 D3DVERTEXELEMENT9 = Struct("D3DVERTEXELEMENT9", [
608     (WORD, "Stream"),
609     (WORD, "Offset"),
610     (D3DDECLTYPE, "Type"), # BYTE
611     (D3DDECLMETHOD, "Method"), # BYTE
612     (D3DDECLUSAGE, "Usage"), # BYTE
613     (BYTE, "UsageIndex"),
614 ])
615
616 D3DBASISTYPE = Enum("D3DBASISTYPE", [
617     "D3DBASIS_BEZIER",
618     "D3DBASIS_BSPLINE",
619     "D3DBASIS_CATMULL_ROM",
620 ])
621
622 D3DSTATEBLOCKTYPE = Enum("D3DSTATEBLOCKTYPE", [
623     "D3DSBT_ALL",
624     "D3DSBT_PIXELSTATE",
625     "D3DSBT_VERTEXSTATE",
626 ])
627
628 D3DDEVTYPE = Enum("D3DDEVTYPE", [
629     "D3DDEVTYPE_HAL",
630     "D3DDEVTYPE_REF",
631     "D3DDEVTYPE_SW",
632     "D3DDEVTYPE_NULLREF",
633 ])
634
635 D3DMULTISAMPLE_TYPE = Enum("D3DMULTISAMPLE_TYPE", [
636     "D3DMULTISAMPLE_NONE",
637     "D3DMULTISAMPLE_NONMASKABLE",
638     "D3DMULTISAMPLE_2_SAMPLES",
639     "D3DMULTISAMPLE_3_SAMPLES",
640     "D3DMULTISAMPLE_4_SAMPLES",
641     "D3DMULTISAMPLE_5_SAMPLES",
642     "D3DMULTISAMPLE_6_SAMPLES",
643     "D3DMULTISAMPLE_7_SAMPLES",
644     "D3DMULTISAMPLE_8_SAMPLES",
645     "D3DMULTISAMPLE_9_SAMPLES",
646     "D3DMULTISAMPLE_10_SAMPLES",
647     "D3DMULTISAMPLE_11_SAMPLES",
648     "D3DMULTISAMPLE_12_SAMPLES",
649     "D3DMULTISAMPLE_13_SAMPLES",
650     "D3DMULTISAMPLE_14_SAMPLES",
651     "D3DMULTISAMPLE_15_SAMPLES",
652     "D3DMULTISAMPLE_16_SAMPLES",
653 ])
654
655 D3DFORMAT = Enum("D3DFORMAT", [
656     "D3DFMT_UNKNOWN",
657     "D3DFMT_R8G8B8",
658     "D3DFMT_A8R8G8B8",
659     "D3DFMT_X8R8G8B8",
660     "D3DFMT_R5G6B5",
661     "D3DFMT_X1R5G5B5",
662     "D3DFMT_A1R5G5B5",
663     "D3DFMT_A4R4G4B4",
664     "D3DFMT_R3G3B2",
665     "D3DFMT_A8",
666     "D3DFMT_A8R3G3B2",
667     "D3DFMT_X4R4G4B4",
668     "D3DFMT_A2B10G10R10",
669     "D3DFMT_A8B8G8R8",
670     "D3DFMT_X8B8G8R8",
671     "D3DFMT_G16R16",
672     "D3DFMT_A2R10G10B10",
673     "D3DFMT_A16B16G16R16",
674     "D3DFMT_A8P8",
675     "D3DFMT_P8",
676     "D3DFMT_L8",
677     "D3DFMT_A8L8",
678     "D3DFMT_A4L4",
679     "D3DFMT_V8U8",
680     "D3DFMT_L6V5U5",
681     "D3DFMT_X8L8V8U8",
682     "D3DFMT_Q8W8V8U8",
683     "D3DFMT_V16U16",
684     "D3DFMT_A2W10V10U10",
685     "D3DFMT_UYVY",
686     "D3DFMT_R8G8_B8G8",
687     "D3DFMT_YUY2",
688     "D3DFMT_G8R8_G8B8",
689     "D3DFMT_DXT1",
690     "D3DFMT_DXT2",
691     "D3DFMT_DXT3",
692     "D3DFMT_DXT4",
693     "D3DFMT_DXT5",
694     "D3DFMT_D16_LOCKABLE",
695     "D3DFMT_D32",
696     "D3DFMT_D15S1",
697     "D3DFMT_D24S8",
698     "D3DFMT_D24X8",
699     "D3DFMT_D24X4S4",
700     "D3DFMT_D16",
701     "D3DFMT_D32F_LOCKABLE",
702     "D3DFMT_D24FS8",
703     "D3DFMT_D32_LOCKABLE",
704     "D3DFMT_S8_LOCKABLE",
705     "D3DFMT_L16",
706     "D3DFMT_VERTEXDATA",
707     "D3DFMT_INDEX16",
708     "D3DFMT_INDEX32",
709     "D3DFMT_Q16W16V16U16",
710     "D3DFMT_MULTI2_ARGB8",
711     "D3DFMT_R16F",
712     "D3DFMT_G16R16F",
713     "D3DFMT_A16B16G16R16F",
714     "D3DFMT_R32F",
715     "D3DFMT_G32R32F",
716     "D3DFMT_A32B32G32R32F",
717     "D3DFMT_CxV8U8",
718     "D3DFMT_A1",
719     "D3DFMT_A2B10G10R10_XR_BIAS",
720     "D3DFMT_BINARYBUFFER",
721
722     # Unofficial formats
723     "D3DFMT_ATI1N",
724     "D3DFMT_ATI2N",
725     "D3DFMT_AYUV",
726     "D3DFMT_DF16",
727     "D3DFMT_DF24",
728     "D3DFMT_INTZ",
729     "D3DFMT_NULL",
730     "D3DFMT_NV12",
731     "D3DFMT_YV12",
732     "D3DFMT_RAWZ",
733 ])
734
735 D3DDISPLAYMODE = Struct("D3DDISPLAYMODE", [
736     (UINT, "Width"),
737     (UINT, "Height"),
738     (UINT, "RefreshRate"),
739     (D3DFORMAT, "Format"),
740 ])
741
742 D3DCREATE = Flags(DWORD, [
743     "D3DCREATE_FPU_PRESERVE",
744     "D3DCREATE_MULTITHREADED",
745     "D3DCREATE_PUREDEVICE",
746     "D3DCREATE_SOFTWARE_VERTEXPROCESSING",
747     "D3DCREATE_HARDWARE_VERTEXPROCESSING",
748     "D3DCREATE_MIXED_VERTEXPROCESSING",
749     "D3DCREATE_DISABLE_DRIVER_MANAGEMENT",
750     "D3DCREATE_ADAPTERGROUP_DEVICE",
751     "D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX",
752     "D3DCREATE_NOWINDOWCHANGES",
753     "D3DCREATE_DISABLE_PSGP_THREADING",
754     "D3DCREATE_ENABLE_PRESENTSTATS",
755     "D3DCREATE_DISABLE_PRINTSCREEN",
756     "D3DCREATE_SCREENSAVER",
757 ])
758
759 D3DDEVICE_CREATION_PARAMETERS = Struct("D3DDEVICE_CREATION_PARAMETERS", [
760     (UINT, "AdapterOrdinal"),
761     (D3DDEVTYPE, "DeviceType"),
762     (HWND, "hFocusWindow"),
763     (D3DCREATE, "BehaviorFlags"),
764 ])
765
766 D3DSWAPEFFECT = Enum("D3DSWAPEFFECT", [
767     "D3DSWAPEFFECT_DISCARD",
768     "D3DSWAPEFFECT_FLIP",
769     "D3DSWAPEFFECT_COPY",
770 ])
771
772 D3DPOOL = Enum("D3DPOOL", [
773     "D3DPOOL_DEFAULT",
774     "D3DPOOL_MANAGED",
775     "D3DPOOL_SYSTEMMEM",
776     "D3DPOOL_SCRATCH",
777 ])
778
779 D3DPRESENT = FakeEnum(DWORD, [
780     "D3DPRESENT_RATE_DEFAULT",
781 ])
782
783 D3DPRESENTFLAG = Flags(DWORD, [
784     "D3DPRESENTFLAG_LOCKABLE_BACKBUFFER",
785     "D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL",
786     "D3DPRESENTFLAG_DEVICECLIP",
787     "D3DPRESENTFLAG_VIDEO",
788     "D3DPRESENTFLAG_NOAUTOROTATE",
789     "D3DPRESENTFLAG_UNPRUNEDMODE",
790 ])
791
792 D3DPRESENT_INTERVAL = Flags(DWORD, [
793     "D3DPRESENT_INTERVAL_DEFAULT", # 0
794     "D3DPRESENT_INTERVAL_ONE",
795     "D3DPRESENT_INTERVAL_TWO",
796     "D3DPRESENT_INTERVAL_THREE",
797     "D3DPRESENT_INTERVAL_FOUR",
798     "D3DPRESENT_INTERVAL_IMMEDIATE",
799 ])
800
801 D3DPRESENT_PARAMETERS = Struct("D3DPRESENT_PARAMETERS", [
802     (UINT, "BackBufferWidth"),
803     (UINT, "BackBufferHeight"),
804     (D3DFORMAT, "BackBufferFormat"),
805     (UINT, "BackBufferCount"),
806     (D3DMULTISAMPLE_TYPE, "MultiSampleType"),
807     (DWORD, "MultiSampleQuality"),
808     (D3DSWAPEFFECT, "SwapEffect"),
809     (HWND, "hDeviceWindow"),
810     (BOOL, "Windowed"),
811     (BOOL, "EnableAutoDepthStencil"),
812     (D3DFORMAT, "AutoDepthStencilFormat"),
813     (D3DPRESENTFLAG, "Flags"),
814     (UINT, "FullScreen_RefreshRateInHz"),
815     (D3DPRESENT_INTERVAL, "PresentationInterval"),
816 ])
817
818 D3DGAMMARAMP = Struct("D3DGAMMARAMP", [
819     (Array(WORD, 256), "red"),
820     (Array(WORD, 256), "green"),
821     (Array(WORD, 256), "blue"),
822 ])
823
824 D3DBACKBUFFER_TYPE = Enum("D3DBACKBUFFER_TYPE", [
825     "D3DBACKBUFFER_TYPE_MONO",
826     "D3DBACKBUFFER_TYPE_LEFT",
827     "D3DBACKBUFFER_TYPE_RIGHT",
828 ])
829
830 D3DRESOURCETYPE = Enum("D3DRESOURCETYPE", [
831     "D3DRTYPE_SURFACE",
832     "D3DRTYPE_VOLUME",
833     "D3DRTYPE_TEXTURE",
834     "D3DRTYPE_VOLUMETEXTURE",
835     "D3DRTYPE_CUBETEXTURE",
836     "D3DRTYPE_VERTEXBUFFER",
837     "D3DRTYPE_INDEXBUFFER",
838 ])
839
840 D3DUSAGE = Flags(DWORD, [
841     "D3DUSAGE_RENDERTARGET",
842     "D3DUSAGE_DEPTHSTENCIL",
843     "D3DUSAGE_WRITEONLY",
844     "D3DUSAGE_SOFTWAREPROCESSING",
845     "D3DUSAGE_DONOTCLIP",
846     "D3DUSAGE_POINTS",
847     "D3DUSAGE_RTPATCHES",
848     "D3DUSAGE_NPATCHES",
849     "D3DUSAGE_DYNAMIC",
850     "D3DUSAGE_AUTOGENMIPMAP",
851     "D3DUSAGE_RESTRICTED_CONTENT",
852     "D3DUSAGE_RESTRICT_SHARED_RESOURCE",
853     "D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER",
854     "D3DUSAGE_DMAP",
855     "D3DUSAGE_QUERY_LEGACYBUMPMAP",
856     "D3DUSAGE_QUERY_SRGBREAD",
857     "D3DUSAGE_QUERY_FILTER",
858     "D3DUSAGE_QUERY_SRGBWRITE",
859     "D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING",
860     "D3DUSAGE_QUERY_VERTEXTEXTURE",
861     "D3DUSAGE_QUERY_WRAPANDMIP",
862     "D3DUSAGE_NONSECURE",
863     "D3DUSAGE_TEXTAPI",
864 ])
865
866 D3DCUBEMAP_FACES = Enum("D3DCUBEMAP_FACES", [
867     "D3DCUBEMAP_FACE_POSITIVE_X",
868     "D3DCUBEMAP_FACE_NEGATIVE_X",
869     "D3DCUBEMAP_FACE_POSITIVE_Y",
870     "D3DCUBEMAP_FACE_NEGATIVE_Y",
871     "D3DCUBEMAP_FACE_POSITIVE_Z",
872     "D3DCUBEMAP_FACE_NEGATIVE_Z",
873 ])
874
875 D3DLOCK = Flags(DWORD, [
876     "D3DLOCK_READONLY",
877     "D3DLOCK_DISCARD",
878     "D3DLOCK_NOOVERWRITE",
879     "D3DLOCK_NOSYSLOCK",
880     "D3DLOCK_DONOTWAIT",
881     "D3DLOCK_NO_DIRTY_UPDATE",
882 ])
883
884 D3DVERTEXBUFFER_DESC = Struct("D3DVERTEXBUFFER_DESC", [
885     (D3DFORMAT, "Format"),
886     (D3DRESOURCETYPE, "Type"),
887     (D3DUSAGE, "Usage"),
888     (D3DPOOL, "Pool"),
889     (UINT, "Size"),
890     (DWORD, "FVF"),
891 ])
892
893 D3DINDEXBUFFER_DESC = Struct("D3DINDEXBUFFER_DESC", [
894     (D3DFORMAT, "Format"),
895     (D3DRESOURCETYPE, "Type"),
896     (D3DUSAGE, "Usage"),
897     (D3DPOOL, "Pool"),
898     (UINT, "Size"),
899 ])
900
901 D3DSURFACE_DESC = Struct("D3DSURFACE_DESC", [
902     (D3DFORMAT, "Format"),
903     (D3DRESOURCETYPE, "Type"),
904     (D3DUSAGE, "Usage"),
905     (D3DPOOL, "Pool"),
906     (D3DMULTISAMPLE_TYPE, "MultiSampleType"),
907     (DWORD, "MultiSampleQuality"),
908     (UINT, "Width"),
909     (UINT, "Height"),
910 ])
911
912 D3DVOLUME_DESC = Struct("D3DVOLUME_DESC", [
913     (D3DFORMAT, "Format"),
914     (D3DRESOURCETYPE, "Type"),
915     (D3DUSAGE, "Usage"),
916     (D3DPOOL, "Pool"),
917     (UINT, "Width"),
918     (UINT, "Height"),
919     (UINT, "Depth"),
920 ])
921
922 D3DLOCKED_RECT = Struct("D3DLOCKED_RECT", [
923     (INT, "Pitch"),
924     (LinearPointer(Void, "_MappedSize"), "pBits"),
925 ])
926
927 D3DBOX = Struct("D3DBOX", [
928     (UINT, "Left"),
929     (UINT, "Top"),
930     (UINT, "Right"),
931     (UINT, "Bottom"),
932     (UINT, "Front"),
933     (UINT, "Back"),
934 ])
935
936 D3DLOCKED_BOX = Struct("D3DLOCKED_BOX", [
937     (INT, "RowPitch"),
938     (INT, "SlicePitch"),
939     (LinearPointer(Void, "_MappedSize"), "pBits"),
940 ])
941
942 D3DRANGE = Struct("D3DRANGE", [
943     (UINT, "Offset"),
944     (UINT, "Size"),
945 ])
946
947 D3DRECTPATCH_INFO = Struct("D3DRECTPATCH_INFO", [
948     (UINT, "StartVertexOffsetWidth"),
949     (UINT, "StartVertexOffsetHeight"),
950     (UINT, "Width"),
951     (UINT, "Height"),
952     (UINT, "Stride"),
953     (D3DBASISTYPE, "Basis"),
954     (D3DDEGREETYPE, "Degree"),
955 ])
956
957 D3DTRIPATCH_INFO = Struct("D3DTRIPATCH_INFO", [
958     (UINT, "StartVertexOffset"),
959     (UINT, "NumVertices"),
960     (D3DBASISTYPE, "Basis"),
961     (D3DDEGREETYPE, "Degree"),
962 ])
963
964 D3DADAPTER_IDENTIFIER9 = Struct("D3DADAPTER_IDENTIFIER9", [
965     (CString, "Driver"),
966     (CString, "Description"),
967     (CString, "DeviceName"),
968     (LARGE_INTEGER, "DriverVersion"),
969     (DWORD, "VendorId"),
970     (DWORD, "DeviceId"),
971     (DWORD, "SubSysId"),
972     (DWORD, "Revision"),
973     (GUID, "DeviceIdentifier"),
974     (DWORD, "WHQLLevel"),
975 ])
976
977 D3DRASTER_STATUS = Struct("D3DRASTER_STATUS", [
978     (BOOL, "InVBlank"),
979     (UINT, "ScanLine"),
980 ])
981
982 D3DQUERYTYPE = Enum("D3DQUERYTYPE", [
983     "D3DQUERYTYPE_VCACHE",
984     "D3DQUERYTYPE_RESOURCEMANAGER",
985     "D3DQUERYTYPE_VERTEXSTATS",
986     "D3DQUERYTYPE_EVENT",
987     "D3DQUERYTYPE_OCCLUSION",
988     "D3DQUERYTYPE_TIMESTAMP",
989     "D3DQUERYTYPE_TIMESTAMPDISJOINT",
990     "D3DQUERYTYPE_TIMESTAMPFREQ",
991     "D3DQUERYTYPE_PIPELINETIMINGS",
992     "D3DQUERYTYPE_INTERFACETIMINGS",
993     "D3DQUERYTYPE_VERTEXTIMINGS",
994     "D3DQUERYTYPE_PIXELTIMINGS",
995     "D3DQUERYTYPE_BANDWIDTHTIMINGS",
996     "D3DQUERYTYPE_CACHEUTILIZATION",
997 ])
998
999 D3DISSUE = Flags(DWORD, [
1000     "D3DISSUE_END",
1001     "D3DISSUE_BEGIN",
1002 ])
1003
1004 D3DGETDATA = Flags(DWORD, [
1005     "D3DGETDATA_FLUSH",
1006 ])
1007
1008 D3DRESOURCESTATS = Struct("D3DRESOURCESTATS", [
1009     (BOOL, "bThrashing"),
1010     (DWORD, "ApproxBytesDownloaded"),
1011     (DWORD, "NumEvicts"),
1012     (DWORD, "NumVidCreates"),
1013     (DWORD, "LastPri"),
1014     (DWORD, "NumUsed"),
1015     (DWORD, "NumUsedInVidMem"),
1016     (DWORD, "WorkingSet"),
1017     (DWORD, "WorkingSetBytes"),
1018     (DWORD, "TotalManaged"),
1019     (DWORD, "TotalBytes"),
1020 ])
1021
1022 D3DDEVINFO_RESOURCEMANAGER = Struct("D3DDEVINFO_RESOURCEMANAGER", [
1023     (Array(D3DRESOURCESTATS, "D3DRTYPECOUNT"), "stats"),
1024 ])
1025
1026 D3DDEVINFO_D3DVERTEXSTATS = Struct("D3DDEVINFO_D3DVERTEXSTATS", [
1027     (DWORD, "NumRenderedTriangles"),
1028     (DWORD, "NumExtraClippingTriangles"),
1029 ])
1030
1031 D3DDEVINFO_VCACHE = Struct("D3DDEVINFO_VCACHE", [
1032     (DWORD, "Pattern"),
1033     (DWORD, "OptMethod"),
1034     (DWORD, "CacheSize"),
1035     (DWORD, "MagicNumber"),
1036 ])
1037
1038 D3DDEVINFO_D3D9PIPELINETIMINGS = Struct("D3DDEVINFO_D3D9PIPELINETIMINGS", [
1039     (FLOAT, "VertexProcessingTimePercent"),
1040     (FLOAT, "PixelProcessingTimePercent"),
1041     (FLOAT, "OtherGPUProcessingTimePercent"),
1042     (FLOAT, "GPUIdleTimePercent"),
1043 ])
1044
1045 D3DDEVINFO_D3D9INTERFACETIMINGS = Struct("D3DDEVINFO_D3D9INTERFACETIMINGS", [
1046     (FLOAT, "WaitingForGPUToUseApplicationResourceTimePercent"),
1047     (FLOAT, "WaitingForGPUToAcceptMoreCommandsTimePercent"),
1048     (FLOAT, "WaitingForGPUToStayWithinLatencyTimePercent"),
1049     (FLOAT, "WaitingForGPUExclusiveResourceTimePercent"),
1050     (FLOAT, "WaitingForGPUOtherTimePercent"),
1051 ])
1052
1053 D3DDEVINFO_D3D9STAGETIMINGS = Struct("D3DDEVINFO_D3D9STAGETIMINGS", [
1054     (FLOAT, "MemoryProcessingPercent"),
1055     (FLOAT, "ComputationProcessingPercent"),
1056 ])
1057
1058 D3DDEVINFO_D3D9BANDWIDTHTIMINGS = Struct("D3DDEVINFO_D3D9BANDWIDTHTIMINGS", [
1059     (FLOAT, "MaxBandwidthUtilized"),
1060     (FLOAT, "FrontEndUploadMemoryUtilizedPercent"),
1061     (FLOAT, "VertexRateUtilizedPercent"),
1062     (FLOAT, "TriangleSetupRateUtilizedPercent"),
1063     (FLOAT, "FillRateUtilizedPercent"),
1064 ])
1065
1066 D3DDEVINFO_D3D9CACHEUTILIZATION = Struct("D3DDEVINFO_D3D9CACHEUTILIZATION", [
1067     (FLOAT, "TextureCacheHitRate"),
1068     (FLOAT, "PostTransformVertexCacheHitRate"),
1069 ])
1070
1071 D3DCOMPOSERECTSOP = Enum("D3DCOMPOSERECTSOP", [
1072     "D3DCOMPOSERECTS_COPY",
1073     "D3DCOMPOSERECTS_OR",
1074     "D3DCOMPOSERECTS_AND",
1075     "D3DCOMPOSERECTS_NEG",
1076 ])
1077
1078 D3DCOMPOSERECTDESC = Struct("D3DCOMPOSERECTDESC", [
1079     (USHORT, "X"),
1080     (USHORT, "Y"),
1081     (USHORT, "Width"),
1082     (USHORT, "Height"),
1083 ])
1084
1085 D3DCOMPOSERECTDESTINATION = Struct("D3DCOMPOSERECTDESTINATION", [
1086     (USHORT, "SrcRectIndex"),
1087     (USHORT, "Reserved"),
1088     (Short, "X"),
1089     (Short, "Y"),
1090 ])
1091
1092 D3DPRESENTSTATS = Struct("D3DPRESENTSTATS", [
1093     (UINT, "PresentCount"),
1094     (UINT, "PresentRefreshCount"),
1095     (UINT, "SyncRefreshCount"),
1096     (LARGE_INTEGER, "SyncQPCTime"),
1097     (LARGE_INTEGER, "SyncGPUTime"),
1098 ])
1099
1100 D3DSCANLINEORDERING = Enum("D3DSCANLINEORDERING", [
1101     "D3DSCANLINEORDERING_UNKNOWN",
1102     "D3DSCANLINEORDERING_PROGRESSIVE",
1103     "D3DSCANLINEORDERING_INTERLACED",
1104 ])
1105
1106 D3DDISPLAYMODEEX = Struct("D3DDISPLAYMODEEX", [
1107     (UINT, "Size"),
1108     (UINT, "Width"),
1109     (UINT, "Height"),
1110     (UINT, "RefreshRate"),
1111     (D3DFORMAT, "Format"),
1112     (D3DSCANLINEORDERING, "ScanLineOrdering"),
1113 ])
1114
1115 D3DDISPLAYMODEFILTER = Struct("D3DDISPLAYMODEFILTER", [
1116     (UINT, "Size"),
1117     (D3DFORMAT, "Format"),
1118     (D3DSCANLINEORDERING, "ScanLineOrdering"),
1119 ])
1120
1121 D3DDISPLAYROTATION = Enum("D3DDISPLAYROTATION", [
1122     "D3DDISPLAYROTATION_IDENTITY",
1123     "D3DDISPLAYROTATION_90",
1124     "D3DDISPLAYROTATION_180",
1125     "D3DDISPLAYROTATION_270",
1126 ])
1127
1128 D3D9_RESOURCE_PRIORITY = FakeEnum(DWORD, [
1129     "D3D9_RESOURCE_PRIORITY_MINIMUM",
1130     "D3D9_RESOURCE_PRIORITY_LOW",
1131     "D3D9_RESOURCE_PRIORITY_NORMAL",
1132     "D3D9_RESOURCE_PRIORITY_HIGH",
1133     "D3D9_RESOURCE_PRIORITY_MAXIMUM",
1134 ])
1135