]> git.cworth.org Git - apitrace/blob - specs/d3d9types.py
retrace: Move JSON write implementation to a .cpp file.
[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 ])
242
243 D3DTS = Flags(DWORD, [
244     "D3DTS_WORLD",
245     "D3DTS_WORLD1",
246     "D3DTS_WORLD2",
247     "D3DTS_WORLD3",
248 ])
249
250 D3DMATERIALCOLORSOURCE = Enum("D3DMATERIALCOLORSOURCE", [
251     "D3DMCS_MATERIAL",
252     "D3DMCS_COLOR1",
253     "D3DMCS_COLOR2",
254 ])
255
256 D3DWRAPCOORD = Flags(DWORD, [
257     "D3DWRAPCOORD_0",
258     "D3DWRAPCOORD_1",
259     "D3DWRAPCOORD_2",
260     "D3DWRAPCOORD_3",
261 ])
262
263 D3DCOLORWRITEENABLE = Flags(DWORD, [
264     "D3DCOLORWRITEENABLE_RED",
265     "D3DCOLORWRITEENABLE_GREEN",
266     "D3DCOLORWRITEENABLE_BLUE",
267     "D3DCOLORWRITEENABLE_ALPHA",
268 ])
269
270 D3DDEGREETYPE = Enum("D3DDEGREETYPE", [
271     "D3DDEGREE_LINEAR",
272     "D3DDEGREE_QUADRATIC",
273     "D3DDEGREE_CUBIC",
274     "D3DDEGREE_QUINTIC",
275 ])
276
277 D3DPATCHEDGESTYLE = Enum("D3DPATCHEDGESTYLE", [
278     "D3DPATCHEDGE_DISCRETE",
279     "D3DPATCHEDGE_CONTINUOUS",
280 ])
281
282 D3DVERTEXBLENDFLAGS = Enum("D3DVERTEXBLENDFLAGS", [
283     "D3DVBF_DISABLE",
284     "D3DVBF_1WEIGHTS",
285     "D3DVBF_2WEIGHTS",
286     "D3DVBF_3WEIGHTS",
287     "D3DVBF_TWEENING",
288     "D3DVBF_0WEIGHTS",
289 ])
290
291 D3DDEBUGMONITORTOKENS = Enum("D3DDEBUGMONITORTOKENS", [
292     "D3DDMT_ENABLE",
293     "D3DDMT_DISABLE",
294 ])
295
296 # TODO: Convert these to/from actual floats
297 FLOAT_AS_DWORD = DWORD
298
299 D3DRENDERSTATETYPE, D3DRENDERSTATEVALUE = EnumPolymorphic("D3DRENDERSTATETYPE", "State", [
300     ("D3DRS_ZENABLE", D3DZBUFFERTYPE),
301     ("D3DRS_FILLMODE", D3DFILLMODE),
302     ("D3DRS_SHADEMODE", D3DSHADEMODE),
303     ("D3DRS_ZWRITEENABLE", BOOL),
304     ("D3DRS_ALPHATESTENABLE", BOOL),
305     ("D3DRS_LASTPIXEL", BOOL),
306     ("D3DRS_SRCBLEND", D3DBLEND),
307     ("D3DRS_DESTBLEND", D3DBLEND),
308     ("D3DRS_CULLMODE", D3DCULL),
309     ("D3DRS_ZFUNC", D3DCMPFUNC),
310     ("D3DRS_ALPHAREF", DWORD),
311     ("D3DRS_ALPHAFUNC", D3DCMPFUNC),
312     ("D3DRS_DITHERENABLE", BOOL),
313     ("D3DRS_ALPHABLENDENABLE", BOOL),
314     ("D3DRS_FOGENABLE", BOOL),
315     ("D3DRS_SPECULARENABLE", BOOL),
316     ("D3DRS_FOGCOLOR", D3DCOLOR),
317     ("D3DRS_FOGTABLEMODE", D3DFOGMODE),
318     ("D3DRS_FOGSTART", FLOAT_AS_DWORD),
319     ("D3DRS_FOGEND", FLOAT_AS_DWORD),
320     ("D3DRS_FOGDENSITY", FLOAT_AS_DWORD),
321     ("D3DRS_RANGEFOGENABLE", BOOL),
322     ("D3DRS_STENCILENABLE", BOOL),
323     ("D3DRS_STENCILFAIL", D3DSTENCILOP),
324     ("D3DRS_STENCILZFAIL", D3DSTENCILOP),
325     ("D3DRS_STENCILPASS", D3DSTENCILOP),
326     ("D3DRS_STENCILFUNC", D3DCMPFUNC),
327     ("D3DRS_STENCILREF", DWORD),
328     ("D3DRS_STENCILMASK", DWORD),
329     ("D3DRS_STENCILWRITEMASK", DWORD),
330     ("D3DRS_TEXTUREFACTOR", D3DCOLOR),
331     ("D3DRS_WRAP0", D3DWRAPCOORD),
332     ("D3DRS_WRAP1", D3DWRAPCOORD),
333     ("D3DRS_WRAP2", D3DWRAPCOORD),
334     ("D3DRS_WRAP3", D3DWRAPCOORD),
335     ("D3DRS_WRAP4", D3DWRAPCOORD),
336     ("D3DRS_WRAP5", D3DWRAPCOORD),
337     ("D3DRS_WRAP6", D3DWRAPCOORD),
338     ("D3DRS_WRAP7", D3DWRAPCOORD),
339     ("D3DRS_CLIPPING", BOOL),
340     ("D3DRS_LIGHTING", BOOL),
341     ("D3DRS_AMBIENT", D3DCOLOR),
342     ("D3DRS_FOGVERTEXMODE", D3DFOGMODE),
343     ("D3DRS_COLORVERTEX", BOOL),
344     ("D3DRS_LOCALVIEWER", BOOL),
345     ("D3DRS_NORMALIZENORMALS", BOOL),
346     ("D3DRS_DIFFUSEMATERIALSOURCE", D3DMATERIALCOLORSOURCE),
347     ("D3DRS_SPECULARMATERIALSOURCE", D3DMATERIALCOLORSOURCE),
348     ("D3DRS_AMBIENTMATERIALSOURCE", D3DMATERIALCOLORSOURCE),
349     ("D3DRS_EMISSIVEMATERIALSOURCE", D3DMATERIALCOLORSOURCE),
350     ("D3DRS_VERTEXBLEND", D3DVERTEXBLENDFLAGS),
351     ("D3DRS_CLIPPLANEENABLE", D3DCLIPPLANE),
352     ("D3DRS_POINTSIZE", FLOAT_AS_DWORD),
353     ("D3DRS_POINTSIZE_MIN", FLOAT_AS_DWORD),
354     ("D3DRS_POINTSPRITEENABLE", BOOL),
355     ("D3DRS_POINTSCALEENABLE", BOOL),
356     ("D3DRS_POINTSCALE_A", FLOAT_AS_DWORD),
357     ("D3DRS_POINTSCALE_B", FLOAT_AS_DWORD),
358     ("D3DRS_POINTSCALE_C", FLOAT_AS_DWORD),
359     ("D3DRS_MULTISAMPLEANTIALIAS", BOOL),
360     ("D3DRS_MULTISAMPLEMASK", DWORD),
361     ("D3DRS_PATCHEDGESTYLE", D3DPATCHEDGESTYLE),
362     ("D3DRS_DEBUGMONITORTOKEN", D3DDEBUGMONITORTOKENS),
363     ("D3DRS_POINTSIZE_MAX", FLOAT_AS_DWORD),
364     ("D3DRS_INDEXEDVERTEXBLENDENABLE", BOOL),
365     ("D3DRS_COLORWRITEENABLE", DWORD),
366     ("D3DRS_TWEENFACTOR", FLOAT_AS_DWORD),
367     ("D3DRS_BLENDOP", D3DBLENDOP),
368     ("D3DRS_POSITIONDEGREE", D3DDEGREETYPE),
369     ("D3DRS_NORMALDEGREE", D3DDEGREETYPE),
370     ("D3DRS_SCISSORTESTENABLE", BOOL),
371     ("D3DRS_SLOPESCALEDEPTHBIAS", FLOAT_AS_DWORD),
372     ("D3DRS_ANTIALIASEDLINEENABLE", BOOL),
373     ("D3DRS_MINTESSELLATIONLEVEL", FLOAT_AS_DWORD),
374     ("D3DRS_MAXTESSELLATIONLEVEL", FLOAT_AS_DWORD),
375     ("D3DRS_ADAPTIVETESS_X", FLOAT_AS_DWORD),
376     ("D3DRS_ADAPTIVETESS_Y", FLOAT_AS_DWORD),
377     ("D3DRS_ADAPTIVETESS_Z", FLOAT_AS_DWORD),
378     ("D3DRS_ADAPTIVETESS_W", FLOAT_AS_DWORD),
379     ("D3DRS_ENABLEADAPTIVETESSELLATION", BOOL),
380     ("D3DRS_TWOSIDEDSTENCILMODE", BOOL),
381     ("D3DRS_CCW_STENCILFAIL", D3DSTENCILOP),
382     ("D3DRS_CCW_STENCILZFAIL", D3DSTENCILOP),
383     ("D3DRS_CCW_STENCILPASS", D3DSTENCILOP),
384     ("D3DRS_CCW_STENCILFUNC", D3DCMPFUNC),
385     ("D3DRS_COLORWRITEENABLE1", D3DCOLORWRITEENABLE),
386     ("D3DRS_COLORWRITEENABLE2", D3DCOLORWRITEENABLE),
387     ("D3DRS_COLORWRITEENABLE3", D3DCOLORWRITEENABLE),
388     ("D3DRS_BLENDFACTOR", D3DCOLOR),
389     ("D3DRS_SRGBWRITEENABLE", BOOL),
390     ("D3DRS_DEPTHBIAS", FLOAT_AS_DWORD),
391     ("D3DRS_WRAP8", D3DWRAPCOORD),
392     ("D3DRS_WRAP9", D3DWRAPCOORD),
393     ("D3DRS_WRAP10", D3DWRAPCOORD),
394     ("D3DRS_WRAP11", D3DWRAPCOORD),
395     ("D3DRS_WRAP12", D3DWRAPCOORD),
396     ("D3DRS_WRAP13", D3DWRAPCOORD),
397     ("D3DRS_WRAP14", D3DWRAPCOORD),
398     ("D3DRS_WRAP15", D3DWRAPCOORD),
399     ("D3DRS_SEPARATEALPHABLENDENABLE", BOOL),
400     ("D3DRS_SRCBLENDALPHA", D3DBLEND),
401     ("D3DRS_DESTBLENDALPHA", D3DBLEND),
402     ("D3DRS_BLENDOPALPHA", D3DBLENDOP),
403
404     # XXX: D3DRENDERSTATE_WRAPBIAS + n
405 ], DWORD)
406
407 D3DTSS_TCI = Flags(DWORD, [
408     #"D3DTSS_TCI_PASSTHRU", # 0
409     "D3DTSS_TCI_CAMERASPACENORMAL",
410     "D3DTSS_TCI_CAMERASPACEPOSITION",
411     "D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR",
412     "D3DTSS_TCI_SPHEREMAP",
413 ])
414
415 D3DTEXTUREOP = Enum("D3DTEXTUREOP", [
416     "D3DTOP_DISABLE",
417     "D3DTOP_SELECTARG1",
418     "D3DTOP_SELECTARG2",
419     "D3DTOP_MODULATE",
420     "D3DTOP_MODULATE2X",
421     "D3DTOP_MODULATE4X",
422     "D3DTOP_ADD",
423     "D3DTOP_ADDSIGNED",
424     "D3DTOP_ADDSIGNED2X",
425     "D3DTOP_SUBTRACT",
426     "D3DTOP_ADDSMOOTH",
427     "D3DTOP_BLENDDIFFUSEALPHA",
428     "D3DTOP_BLENDTEXTUREALPHA",
429     "D3DTOP_BLENDFACTORALPHA",
430     "D3DTOP_BLENDTEXTUREALPHAPM",
431     "D3DTOP_BLENDCURRENTALPHA",
432     "D3DTOP_PREMODULATE",
433     "D3DTOP_MODULATEALPHA_ADDCOLOR",
434     "D3DTOP_MODULATECOLOR_ADDALPHA",
435     "D3DTOP_MODULATEINVALPHA_ADDCOLOR",
436     "D3DTOP_MODULATEINVCOLOR_ADDALPHA",
437     "D3DTOP_BUMPENVMAP",
438     "D3DTOP_BUMPENVMAPLUMINANCE",
439     "D3DTOP_DOTPRODUCT3",
440     "D3DTOP_MULTIPLYADD",
441     "D3DTOP_LERP",
442 ])
443
444 # XXX: Actually a mixture of enums and flags
445 D3DTA = FakeEnum(DWORD, [
446     "D3DTA_DIFFUSE",
447     "D3DTA_CURRENT",
448     "D3DTA_TEXTURE",
449     "D3DTA_TFACTOR",
450     "D3DTA_SPECULAR",
451     "D3DTA_TEMP",
452     "D3DTA_CONSTANT",
453     #"D3DTA_COMPLEMENT",
454     #"D3DTA_ALPHAREPLICATE",
455 ])
456
457 D3DTEXTURETRANSFORMFLAGS = Enum("D3DTEXTURETRANSFORMFLAGS", [
458     "D3DTTFF_DISABLE",
459     "D3DTTFF_COUNT1",
460     "D3DTTFF_COUNT2",
461     "D3DTTFF_COUNT3",
462     "D3DTTFF_COUNT4",
463     "D3DTTFF_PROJECTED",
464 ])
465
466 D3DTEXTUREFILTERTYPE = Enum("D3DTEXTUREFILTERTYPE", [
467     "D3DTEXF_NONE",
468     "D3DTEXF_POINT",
469     "D3DTEXF_LINEAR",
470     "D3DTEXF_ANISOTROPIC",
471     "D3DTEXF_PYRAMIDALQUAD",
472     "D3DTEXF_GAUSSIANQUAD",
473     "D3DTEXF_CONVOLUTIONMONO",
474 ])
475
476 D3DTEXTURESTAGESTATETYPE, D3DTEXTURESTAGESTATEVALUE = EnumPolymorphic("D3DTEXTURESTAGESTATETYPE", "Type", [
477     ("D3DTSS_COLOROP", D3DTEXTUREOP),
478     ("D3DTSS_COLORARG1", D3DTA),
479     ("D3DTSS_COLORARG2", D3DTA),
480     ("D3DTSS_ALPHAOP", D3DTEXTUREOP),
481     ("D3DTSS_ALPHAARG1", D3DTA),
482     ("D3DTSS_ALPHAARG2", D3DTA),
483     ("D3DTSS_BUMPENVMAT00", FLOAT_AS_DWORD),
484     ("D3DTSS_BUMPENVMAT01", FLOAT_AS_DWORD),
485     ("D3DTSS_BUMPENVMAT10", FLOAT_AS_DWORD),
486     ("D3DTSS_BUMPENVMAT11", FLOAT_AS_DWORD),
487     ("D3DTSS_TEXCOORDINDEX", D3DTSS_TCI),
488     ("D3DTSS_BUMPENVLSCALE", FLOAT_AS_DWORD),
489     ("D3DTSS_BUMPENVLOFFSET", FLOAT_AS_DWORD),
490     ("D3DTSS_TEXTURETRANSFORMFLAGS", D3DTEXTURETRANSFORMFLAGS),
491     ("D3DTSS_COLORARG0", D3DTA,),
492     ("D3DTSS_ALPHAARG0", D3DTA,),
493     ("D3DTSS_RESULTARG", D3DTA,),
494     ("D3DTSS_CONSTANT", D3DCOLOR),
495 ], DWORD)
496
497 D3DSAMPLERSTATETYPE, D3DSAMPLERSTATEVALUE = EnumPolymorphic("D3DSAMPLERSTATETYPE", "Type", [
498     ("D3DSAMP_ADDRESSU", D3DTEXTUREADDRESS),
499     ("D3DSAMP_ADDRESSV", D3DTEXTUREADDRESS),
500     ("D3DSAMP_ADDRESSW", D3DTEXTUREADDRESS),
501     ("D3DSAMP_BORDERCOLOR", D3DCOLOR),
502     ("D3DSAMP_MAGFILTER", D3DTEXTUREFILTERTYPE),
503     ("D3DSAMP_MINFILTER", D3DTEXTUREFILTERTYPE),
504     ("D3DSAMP_MIPFILTER", D3DTEXTUREFILTERTYPE),
505     ("D3DSAMP_MIPMAPLODBIAS", FLOAT_AS_DWORD),
506     ("D3DSAMP_MAXMIPLEVEL", DWORD),
507     ("D3DSAMP_MAXANISOTROPY", DWORD),
508     ("D3DSAMP_SRGBTEXTURE", BOOL),
509     ("D3DSAMP_ELEMENTINDEX", DWORD),
510     ("D3DSAMP_DMAPOFFSET", DWORD),
511 ], DWORD)
512
513 D3DPV = Flags(DWORD, [
514     "D3DPV_DONOTCOPYDATA",
515 ])
516
517 # XXX: Actually a mixture of enums and flags
518 D3DFVF = Flags(DWORD, [
519     "D3DFVF_RESERVED0",
520     "D3DFVF_XYZ",
521     "D3DFVF_XYZRHW",
522     "D3DFVF_XYZB1",
523     "D3DFVF_XYZB2",
524     "D3DFVF_XYZB3",
525     "D3DFVF_XYZB4",
526     "D3DFVF_XYZB5",
527     "D3DFVF_XYZW",
528     "D3DFVF_NORMAL",
529     "D3DFVF_PSIZE",
530     "D3DFVF_DIFFUSE",
531     "D3DFVF_SPECULAR",
532     #"D3DFVF_TEX0",
533     #"D3DFVF_TEX1",
534     #"D3DFVF_TEX2",
535     #"D3DFVF_TEX3",
536     #"D3DFVF_TEX4",
537     #"D3DFVF_TEX5",
538     #"D3DFVF_TEX6",
539     #"D3DFVF_TEX7",
540     #"D3DFVF_TEX8",
541     "D3DFVF_LASTBETA_UBYTE4",
542     "D3DFVF_LASTBETA_D3DCOLOR",
543     "D3DFVF_RESERVED2",
544     #"D3DFVF_TEXCOORDSIZE1(0)",
545     #"D3DFVF_TEXCOORDSIZE2(0)",
546     #"D3DFVF_TEXCOORDSIZE3(0)",
547     #"D3DFVF_TEXCOORDSIZE4(0)",
548     #"D3DFVF_TEXCOORDSIZE1(1)",
549     #"D3DFVF_TEXCOORDSIZE2(1)",
550     #"D3DFVF_TEXCOORDSIZE3(1)",
551     #"D3DFVF_TEXCOORDSIZE4(1)",
552     #"D3DFVF_TEXCOORDSIZE1(2)",
553     #"D3DFVF_TEXCOORDSIZE2(2)",
554     #"D3DFVF_TEXCOORDSIZE3(2)",
555     #"D3DFVF_TEXCOORDSIZE4(2)",
556     #"D3DFVF_TEXCOORDSIZE1(3)",
557     #"D3DFVF_TEXCOORDSIZE2(3)",
558     #"D3DFVF_TEXCOORDSIZE3(3)",
559     #"D3DFVF_TEXCOORDSIZE4(3)",
560 ])
561
562 D3DDECLUSAGE = FakeEnum(BYTE, [
563     "D3DDECLUSAGE_POSITION",
564     "D3DDECLUSAGE_BLENDWEIGHT",
565     "D3DDECLUSAGE_BLENDINDICES",
566     "D3DDECLUSAGE_NORMAL",
567     "D3DDECLUSAGE_PSIZE",
568     "D3DDECLUSAGE_TEXCOORD",
569     "D3DDECLUSAGE_TANGENT",
570     "D3DDECLUSAGE_BINORMAL",
571     "D3DDECLUSAGE_TESSFACTOR",
572     "D3DDECLUSAGE_POSITIONT",
573     "D3DDECLUSAGE_COLOR",
574     "D3DDECLUSAGE_FOG",
575     "D3DDECLUSAGE_DEPTH",
576     "D3DDECLUSAGE_SAMPLE",
577 ])
578
579 D3DDECLMETHOD = FakeEnum(BYTE, [
580     "D3DDECLMETHOD_DEFAULT",
581     "D3DDECLMETHOD_PARTIALU",
582     "D3DDECLMETHOD_PARTIALV",
583     "D3DDECLMETHOD_CROSSUV",
584     "D3DDECLMETHOD_UV",
585     "D3DDECLMETHOD_LOOKUP",
586     "D3DDECLMETHOD_LOOKUPPRESAMPLED",
587 ])
588
589 D3DDECLTYPE = FakeEnum(BYTE, [
590     "D3DDECLTYPE_FLOAT1",
591     "D3DDECLTYPE_FLOAT2",
592     "D3DDECLTYPE_FLOAT3",
593     "D3DDECLTYPE_FLOAT4",
594     "D3DDECLTYPE_D3DCOLOR",
595     "D3DDECLTYPE_UBYTE4",
596     "D3DDECLTYPE_SHORT2",
597     "D3DDECLTYPE_SHORT4",
598     "D3DDECLTYPE_UBYTE4N",
599     "D3DDECLTYPE_SHORT2N",
600     "D3DDECLTYPE_SHORT4N",
601     "D3DDECLTYPE_USHORT2N",
602     "D3DDECLTYPE_USHORT4N",
603     "D3DDECLTYPE_UDEC3",
604     "D3DDECLTYPE_DEC3N",
605     "D3DDECLTYPE_FLOAT16_2",
606     "D3DDECLTYPE_FLOAT16_4",
607     "D3DDECLTYPE_UNUSED",
608 ])
609
610 D3DVERTEXELEMENT9 = Struct("D3DVERTEXELEMENT9", [
611     (WORD, "Stream"),
612     (WORD, "Offset"),
613     (D3DDECLTYPE, "Type"), # BYTE
614     (D3DDECLMETHOD, "Method"), # BYTE
615     (D3DDECLUSAGE, "Usage"), # BYTE
616     (BYTE, "UsageIndex"),
617 ])
618
619 D3DBASISTYPE = Enum("D3DBASISTYPE", [
620     "D3DBASIS_BEZIER",
621     "D3DBASIS_BSPLINE",
622     "D3DBASIS_CATMULL_ROM",
623 ])
624
625 D3DSTATEBLOCKTYPE = Enum("D3DSTATEBLOCKTYPE", [
626     "D3DSBT_ALL",
627     "D3DSBT_PIXELSTATE",
628     "D3DSBT_VERTEXSTATE",
629 ])
630
631 D3DDEVTYPE = Enum("D3DDEVTYPE", [
632     "D3DDEVTYPE_HAL",
633     "D3DDEVTYPE_REF",
634     "D3DDEVTYPE_SW",
635     "D3DDEVTYPE_NULLREF",
636 ])
637
638 D3DMULTISAMPLE_TYPE = Enum("D3DMULTISAMPLE_TYPE", [
639     "D3DMULTISAMPLE_NONE",
640     "D3DMULTISAMPLE_NONMASKABLE",
641     "D3DMULTISAMPLE_2_SAMPLES",
642     "D3DMULTISAMPLE_3_SAMPLES",
643     "D3DMULTISAMPLE_4_SAMPLES",
644     "D3DMULTISAMPLE_5_SAMPLES",
645     "D3DMULTISAMPLE_6_SAMPLES",
646     "D3DMULTISAMPLE_7_SAMPLES",
647     "D3DMULTISAMPLE_8_SAMPLES",
648     "D3DMULTISAMPLE_9_SAMPLES",
649     "D3DMULTISAMPLE_10_SAMPLES",
650     "D3DMULTISAMPLE_11_SAMPLES",
651     "D3DMULTISAMPLE_12_SAMPLES",
652     "D3DMULTISAMPLE_13_SAMPLES",
653     "D3DMULTISAMPLE_14_SAMPLES",
654     "D3DMULTISAMPLE_15_SAMPLES",
655     "D3DMULTISAMPLE_16_SAMPLES",
656 ])
657
658 D3DFORMAT = Enum("D3DFORMAT", [
659     "D3DFMT_UNKNOWN",
660     "D3DFMT_R8G8B8",
661     "D3DFMT_A8R8G8B8",
662     "D3DFMT_X8R8G8B8",
663     "D3DFMT_R5G6B5",
664     "D3DFMT_X1R5G5B5",
665     "D3DFMT_A1R5G5B5",
666     "D3DFMT_A4R4G4B4",
667     "D3DFMT_R3G3B2",
668     "D3DFMT_A8",
669     "D3DFMT_A8R3G3B2",
670     "D3DFMT_X4R4G4B4",
671     "D3DFMT_A2B10G10R10",
672     "D3DFMT_A8B8G8R8",
673     "D3DFMT_X8B8G8R8",
674     "D3DFMT_G16R16",
675     "D3DFMT_A2R10G10B10",
676     "D3DFMT_A16B16G16R16",
677     "D3DFMT_A8P8",
678     "D3DFMT_P8",
679     "D3DFMT_L8",
680     "D3DFMT_A8L8",
681     "D3DFMT_A4L4",
682     "D3DFMT_V8U8",
683     "D3DFMT_L6V5U5",
684     "D3DFMT_X8L8V8U8",
685     "D3DFMT_Q8W8V8U8",
686     "D3DFMT_V16U16",
687     "D3DFMT_A2W10V10U10",
688     "D3DFMT_UYVY",
689     "D3DFMT_R8G8_B8G8",
690     "D3DFMT_YUY2",
691     "D3DFMT_G8R8_G8B8",
692     "D3DFMT_DXT1",
693     "D3DFMT_DXT2",
694     "D3DFMT_DXT3",
695     "D3DFMT_DXT4",
696     "D3DFMT_DXT5",
697     "D3DFMT_D16_LOCKABLE",
698     "D3DFMT_D32",
699     "D3DFMT_D15S1",
700     "D3DFMT_D24S8",
701     "D3DFMT_D24X8",
702     "D3DFMT_D24X4S4",
703     "D3DFMT_D16",
704     "D3DFMT_D32F_LOCKABLE",
705     "D3DFMT_D24FS8",
706     "D3DFMT_D32_LOCKABLE",
707     "D3DFMT_S8_LOCKABLE",
708     "D3DFMT_L16",
709     "D3DFMT_VERTEXDATA",
710     "D3DFMT_INDEX16",
711     "D3DFMT_INDEX32",
712     "D3DFMT_Q16W16V16U16",
713     "D3DFMT_MULTI2_ARGB8",
714     "D3DFMT_R16F",
715     "D3DFMT_G16R16F",
716     "D3DFMT_A16B16G16R16F",
717     "D3DFMT_R32F",
718     "D3DFMT_G32R32F",
719     "D3DFMT_A32B32G32R32F",
720     "D3DFMT_CxV8U8",
721     "D3DFMT_A1",
722     "D3DFMT_A2B10G10R10_XR_BIAS",
723     "D3DFMT_BINARYBUFFER",
724
725     # Unofficial formats
726     "D3DFMT_ATI1N",
727     "D3DFMT_ATI2N",
728     "D3DFMT_AYUV",
729     "D3DFMT_DF16",
730     "D3DFMT_DF24",
731     "D3DFMT_INTZ",
732     "D3DFMT_NULL",
733     "D3DFMT_NV12",
734     "D3DFMT_RAWZ",
735 ])
736
737 D3DDISPLAYMODE = Struct("D3DDISPLAYMODE", [
738     (UINT, "Width"),
739     (UINT, "Height"),
740     (UINT, "RefreshRate"),
741     (D3DFORMAT, "Format"),
742 ])
743
744 D3DCREATE = Flags(DWORD, [
745     "D3DCREATE_FPU_PRESERVE",
746     "D3DCREATE_MULTITHREADED",
747     "D3DCREATE_PUREDEVICE",
748     "D3DCREATE_SOFTWARE_VERTEXPROCESSING",
749     "D3DCREATE_HARDWARE_VERTEXPROCESSING",
750     "D3DCREATE_MIXED_VERTEXPROCESSING",
751     "D3DCREATE_DISABLE_DRIVER_MANAGEMENT",
752     "D3DCREATE_ADAPTERGROUP_DEVICE",
753     "D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX",
754     "D3DCREATE_NOWINDOWCHANGES",
755     "D3DCREATE_DISABLE_PSGP_THREADING",
756     "D3DCREATE_ENABLE_PRESENTSTATS",
757     "D3DCREATE_DISABLE_PRINTSCREEN",
758     "D3DCREATE_SCREENSAVER",
759 ])
760
761 D3DDEVICE_CREATION_PARAMETERS = Struct("D3DDEVICE_CREATION_PARAMETERS", [
762     (UINT, "AdapterOrdinal"),
763     (D3DDEVTYPE, "DeviceType"),
764     (HWND, "hFocusWindow"),
765     (D3DCREATE, "BehaviorFlags"),
766 ])
767
768 D3DSWAPEFFECT = Enum("D3DSWAPEFFECT", [
769     "D3DSWAPEFFECT_DISCARD",
770     "D3DSWAPEFFECT_FLIP",
771     "D3DSWAPEFFECT_COPY",
772 ])
773
774 D3DPOOL = Enum("D3DPOOL", [
775     "D3DPOOL_DEFAULT",
776     "D3DPOOL_MANAGED",
777     "D3DPOOL_SYSTEMMEM",
778     "D3DPOOL_SCRATCH",
779 ])
780
781 D3DPRESENT = FakeEnum(DWORD, [
782     "D3DPRESENT_RATE_DEFAULT",
783 ])
784
785 D3DPRESENTFLAG = Flags(DWORD, [
786     "D3DPRESENTFLAG_LOCKABLE_BACKBUFFER",
787     "D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL",
788     "D3DPRESENTFLAG_DEVICECLIP",
789     "D3DPRESENTFLAG_VIDEO",
790     "D3DPRESENTFLAG_NOAUTOROTATE",
791     "D3DPRESENTFLAG_UNPRUNEDMODE",
792 ])
793
794 D3DPRESENT_INTERVAL = Flags(DWORD, [
795     "D3DPRESENT_INTERVAL_DEFAULT", # 0
796     "D3DPRESENT_INTERVAL_ONE",
797     "D3DPRESENT_INTERVAL_TWO",
798     "D3DPRESENT_INTERVAL_THREE",
799     "D3DPRESENT_INTERVAL_FOUR",
800     "D3DPRESENT_INTERVAL_IMMEDIATE",
801 ])
802
803 D3DPRESENT_PARAMETERS = Struct("D3DPRESENT_PARAMETERS", [
804     (UINT, "BackBufferWidth"),
805     (UINT, "BackBufferHeight"),
806     (D3DFORMAT, "BackBufferFormat"),
807     (UINT, "BackBufferCount"),
808     (D3DMULTISAMPLE_TYPE, "MultiSampleType"),
809     (DWORD, "MultiSampleQuality"),
810     (D3DSWAPEFFECT, "SwapEffect"),
811     (HWND, "hDeviceWindow"),
812     (BOOL, "Windowed"),
813     (BOOL, "EnableAutoDepthStencil"),
814     (D3DFORMAT, "AutoDepthStencilFormat"),
815     (D3DPRESENTFLAG, "Flags"),
816     (UINT, "FullScreen_RefreshRateInHz"),
817     (D3DPRESENT_INTERVAL, "PresentationInterval"),
818 ])
819
820 D3DGAMMARAMP = Struct("D3DGAMMARAMP", [
821     (Array(WORD, 256), "red"),
822     (Array(WORD, 256), "green"),
823     (Array(WORD, 256), "blue"),
824 ])
825
826 D3DBACKBUFFER_TYPE = Enum("D3DBACKBUFFER_TYPE", [
827     "D3DBACKBUFFER_TYPE_MONO",
828     "D3DBACKBUFFER_TYPE_LEFT",
829     "D3DBACKBUFFER_TYPE_RIGHT",
830 ])
831
832 D3DRESOURCETYPE = Enum("D3DRESOURCETYPE", [
833     "D3DRTYPE_SURFACE",
834     "D3DRTYPE_VOLUME",
835     "D3DRTYPE_TEXTURE",
836     "D3DRTYPE_VOLUMETEXTURE",
837     "D3DRTYPE_CUBETEXTURE",
838     "D3DRTYPE_VERTEXBUFFER",
839     "D3DRTYPE_INDEXBUFFER",
840 ])
841
842 D3DUSAGE = Flags(DWORD, [
843     "D3DUSAGE_RENDERTARGET",
844     "D3DUSAGE_DEPTHSTENCIL",
845     "D3DUSAGE_WRITEONLY",
846     "D3DUSAGE_SOFTWAREPROCESSING",
847     "D3DUSAGE_DONOTCLIP",
848     "D3DUSAGE_POINTS",
849     "D3DUSAGE_RTPATCHES",
850     "D3DUSAGE_NPATCHES",
851     "D3DUSAGE_DYNAMIC",
852     "D3DUSAGE_AUTOGENMIPMAP",
853     "D3DUSAGE_RESTRICTED_CONTENT",
854     "D3DUSAGE_RESTRICT_SHARED_RESOURCE",
855     "D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER",
856     "D3DUSAGE_DMAP",
857     "D3DUSAGE_QUERY_LEGACYBUMPMAP",
858     "D3DUSAGE_QUERY_SRGBREAD",
859     "D3DUSAGE_QUERY_FILTER",
860     "D3DUSAGE_QUERY_SRGBWRITE",
861     "D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING",
862     "D3DUSAGE_QUERY_VERTEXTEXTURE",
863     "D3DUSAGE_QUERY_WRAPANDMIP",
864     "D3DUSAGE_NONSECURE",
865     "D3DUSAGE_TEXTAPI",
866 ])
867
868 D3DCUBEMAP_FACES = Enum("D3DCUBEMAP_FACES", [
869     "D3DCUBEMAP_FACE_POSITIVE_X",
870     "D3DCUBEMAP_FACE_NEGATIVE_X",
871     "D3DCUBEMAP_FACE_POSITIVE_Y",
872     "D3DCUBEMAP_FACE_NEGATIVE_Y",
873     "D3DCUBEMAP_FACE_POSITIVE_Z",
874     "D3DCUBEMAP_FACE_NEGATIVE_Z",
875 ])
876
877 D3DLOCK = Flags(DWORD, [
878     "D3DLOCK_READONLY",
879     "D3DLOCK_DISCARD",
880     "D3DLOCK_NOOVERWRITE",
881     "D3DLOCK_NOSYSLOCK",
882     "D3DLOCK_DONOTWAIT",
883     "D3DLOCK_NO_DIRTY_UPDATE",
884 ])
885
886 D3DVERTEXBUFFER_DESC = Struct("D3DVERTEXBUFFER_DESC", [
887     (D3DFORMAT, "Format"),
888     (D3DRESOURCETYPE, "Type"),
889     (D3DUSAGE, "Usage"),
890     (D3DPOOL, "Pool"),
891     (UINT, "Size"),
892     (DWORD, "FVF"),
893 ])
894
895 D3DINDEXBUFFER_DESC = Struct("D3DINDEXBUFFER_DESC", [
896     (D3DFORMAT, "Format"),
897     (D3DRESOURCETYPE, "Type"),
898     (D3DUSAGE, "Usage"),
899     (D3DPOOL, "Pool"),
900     (UINT, "Size"),
901 ])
902
903 D3DSURFACE_DESC = Struct("D3DSURFACE_DESC", [
904     (D3DFORMAT, "Format"),
905     (D3DRESOURCETYPE, "Type"),
906     (D3DUSAGE, "Usage"),
907     (D3DPOOL, "Pool"),
908     (D3DMULTISAMPLE_TYPE, "MultiSampleType"),
909     (DWORD, "MultiSampleQuality"),
910     (UINT, "Width"),
911     (UINT, "Height"),
912 ])
913
914 D3DVOLUME_DESC = Struct("D3DVOLUME_DESC", [
915     (D3DFORMAT, "Format"),
916     (D3DRESOURCETYPE, "Type"),
917     (D3DUSAGE, "Usage"),
918     (D3DPOOL, "Pool"),
919     (UINT, "Width"),
920     (UINT, "Height"),
921     (UINT, "Depth"),
922 ])
923
924 D3DLOCKED_RECT = Struct("D3DLOCKED_RECT", [
925     (INT, "Pitch"),
926     (LinearPointer(Void, "_MappedSize"), "pBits"),
927 ])
928
929 D3DBOX = Struct("D3DBOX", [
930     (UINT, "Left"),
931     (UINT, "Top"),
932     (UINT, "Right"),
933     (UINT, "Bottom"),
934     (UINT, "Front"),
935     (UINT, "Back"),
936 ])
937
938 D3DLOCKED_BOX = Struct("D3DLOCKED_BOX", [
939     (INT, "RowPitch"),
940     (INT, "SlicePitch"),
941     (LinearPointer(Void, "_MappedSize"), "pBits"),
942 ])
943
944 D3DRANGE = Struct("D3DRANGE", [
945     (UINT, "Offset"),
946     (UINT, "Size"),
947 ])
948
949 D3DRECTPATCH_INFO = Struct("D3DRECTPATCH_INFO", [
950     (UINT, "StartVertexOffsetWidth"),
951     (UINT, "StartVertexOffsetHeight"),
952     (UINT, "Width"),
953     (UINT, "Height"),
954     (UINT, "Stride"),
955     (D3DBASISTYPE, "Basis"),
956     (D3DDEGREETYPE, "Degree"),
957 ])
958
959 D3DTRIPATCH_INFO = Struct("D3DTRIPATCH_INFO", [
960     (UINT, "StartVertexOffset"),
961     (UINT, "NumVertices"),
962     (D3DBASISTYPE, "Basis"),
963     (D3DDEGREETYPE, "Degree"),
964 ])
965
966 D3DADAPTER_IDENTIFIER9 = Struct("D3DADAPTER_IDENTIFIER9", [
967     (CString, "Driver"),
968     (CString, "Description"),
969     (CString, "DeviceName"),
970     (LARGE_INTEGER, "DriverVersion"),
971     (DWORD, "VendorId"),
972     (DWORD, "DeviceId"),
973     (DWORD, "SubSysId"),
974     (DWORD, "Revision"),
975     (GUID, "DeviceIdentifier"),
976     (DWORD, "WHQLLevel"),
977 ])
978
979 D3DRASTER_STATUS = Struct("D3DRASTER_STATUS", [
980     (BOOL, "InVBlank"),
981     (UINT, "ScanLine"),
982 ])
983
984 D3DQUERYTYPE = Enum("D3DQUERYTYPE", [
985     "D3DQUERYTYPE_VCACHE",
986     "D3DQUERYTYPE_RESOURCEMANAGER",
987     "D3DQUERYTYPE_VERTEXSTATS",
988     "D3DQUERYTYPE_EVENT",
989     "D3DQUERYTYPE_OCCLUSION",
990     "D3DQUERYTYPE_TIMESTAMP",
991     "D3DQUERYTYPE_TIMESTAMPDISJOINT",
992     "D3DQUERYTYPE_TIMESTAMPFREQ",
993     "D3DQUERYTYPE_PIPELINETIMINGS",
994     "D3DQUERYTYPE_INTERFACETIMINGS",
995     "D3DQUERYTYPE_VERTEXTIMINGS",
996     "D3DQUERYTYPE_PIXELTIMINGS",
997     "D3DQUERYTYPE_BANDWIDTHTIMINGS",
998     "D3DQUERYTYPE_CACHEUTILIZATION",
999 ])
1000
1001 D3DISSUE = Flags(DWORD, [
1002     "D3DISSUE_END",
1003     "D3DISSUE_BEGIN",
1004 ])
1005
1006 D3DGETDATA = Flags(DWORD, [
1007     "D3DGETDATA_FLUSH",
1008 ])
1009
1010 D3DRESOURCESTATS = Struct("D3DRESOURCESTATS", [
1011     (BOOL, "bThrashing"),
1012     (DWORD, "ApproxBytesDownloaded"),
1013     (DWORD, "NumEvicts"),
1014     (DWORD, "NumVidCreates"),
1015     (DWORD, "LastPri"),
1016     (DWORD, "NumUsed"),
1017     (DWORD, "NumUsedInVidMem"),
1018     (DWORD, "WorkingSet"),
1019     (DWORD, "WorkingSetBytes"),
1020     (DWORD, "TotalManaged"),
1021     (DWORD, "TotalBytes"),
1022 ])
1023
1024 D3DDEVINFO_RESOURCEMANAGER = Struct("D3DDEVINFO_RESOURCEMANAGER", [
1025     (Array(D3DRESOURCESTATS, "D3DRTYPECOUNT"), "stats"),
1026 ])
1027
1028 D3DDEVINFO_D3DVERTEXSTATS = Struct("D3DDEVINFO_D3DVERTEXSTATS", [
1029     (DWORD, "NumRenderedTriangles"),
1030     (DWORD, "NumExtraClippingTriangles"),
1031 ])
1032
1033 D3DDEVINFO_VCACHE = Struct("D3DDEVINFO_VCACHE", [
1034     (DWORD, "Pattern"),
1035     (DWORD, "OptMethod"),
1036     (DWORD, "CacheSize"),
1037     (DWORD, "MagicNumber"),
1038 ])
1039
1040 D3DDEVINFO_D3D9PIPELINETIMINGS = Struct("D3DDEVINFO_D3D9PIPELINETIMINGS", [
1041     (FLOAT, "VertexProcessingTimePercent"),
1042     (FLOAT, "PixelProcessingTimePercent"),
1043     (FLOAT, "OtherGPUProcessingTimePercent"),
1044     (FLOAT, "GPUIdleTimePercent"),
1045 ])
1046
1047 D3DDEVINFO_D3D9INTERFACETIMINGS = Struct("D3DDEVINFO_D3D9INTERFACETIMINGS", [
1048     (FLOAT, "WaitingForGPUToUseApplicationResourceTimePercent"),
1049     (FLOAT, "WaitingForGPUToAcceptMoreCommandsTimePercent"),
1050     (FLOAT, "WaitingForGPUToStayWithinLatencyTimePercent"),
1051     (FLOAT, "WaitingForGPUExclusiveResourceTimePercent"),
1052     (FLOAT, "WaitingForGPUOtherTimePercent"),
1053 ])
1054
1055 D3DDEVINFO_D3D9STAGETIMINGS = Struct("D3DDEVINFO_D3D9STAGETIMINGS", [
1056     (FLOAT, "MemoryProcessingPercent"),
1057     (FLOAT, "ComputationProcessingPercent"),
1058 ])
1059
1060 D3DDEVINFO_D3D9BANDWIDTHTIMINGS = Struct("D3DDEVINFO_D3D9BANDWIDTHTIMINGS", [
1061     (FLOAT, "MaxBandwidthUtilized"),
1062     (FLOAT, "FrontEndUploadMemoryUtilizedPercent"),
1063     (FLOAT, "VertexRateUtilizedPercent"),
1064     (FLOAT, "TriangleSetupRateUtilizedPercent"),
1065     (FLOAT, "FillRateUtilizedPercent"),
1066 ])
1067
1068 D3DDEVINFO_D3D9CACHEUTILIZATION = Struct("D3DDEVINFO_D3D9CACHEUTILIZATION", [
1069     (FLOAT, "TextureCacheHitRate"),
1070     (FLOAT, "PostTransformVertexCacheHitRate"),
1071 ])
1072
1073 D3DCOMPOSERECTSOP = Enum("D3DCOMPOSERECTSOP", [
1074     "D3DCOMPOSERECTS_COPY",
1075     "D3DCOMPOSERECTS_OR",
1076     "D3DCOMPOSERECTS_AND",
1077     "D3DCOMPOSERECTS_NEG",
1078 ])
1079
1080 D3DCOMPOSERECTDESC = Struct("D3DCOMPOSERECTDESC", [
1081     (USHORT, "X"),
1082     (USHORT, "Y"),
1083     (USHORT, "Width"),
1084     (USHORT, "Height"),
1085 ])
1086
1087 D3DCOMPOSERECTDESTINATION = Struct("D3DCOMPOSERECTDESTINATION", [
1088     (USHORT, "SrcRectIndex"),
1089     (USHORT, "Reserved"),
1090     (Short, "X"),
1091     (Short, "Y"),
1092 ])
1093
1094 D3DPRESENTSTATS = Struct("D3DPRESENTSTATS", [
1095     (UINT, "PresentCount"),
1096     (UINT, "PresentRefreshCount"),
1097     (UINT, "SyncRefreshCount"),
1098     (LARGE_INTEGER, "SyncQPCTime"),
1099     (LARGE_INTEGER, "SyncGPUTime"),
1100 ])
1101
1102 D3DSCANLINEORDERING = Enum("D3DSCANLINEORDERING", [
1103     "D3DSCANLINEORDERING_UNKNOWN",
1104     "D3DSCANLINEORDERING_PROGRESSIVE",
1105     "D3DSCANLINEORDERING_INTERLACED",
1106 ])
1107
1108 D3DDISPLAYMODEEX = Struct("D3DDISPLAYMODEEX", [
1109     (UINT, "Size"),
1110     (UINT, "Width"),
1111     (UINT, "Height"),
1112     (UINT, "RefreshRate"),
1113     (D3DFORMAT, "Format"),
1114     (D3DSCANLINEORDERING, "ScanLineOrdering"),
1115 ])
1116
1117 D3DDISPLAYMODEFILTER = Struct("D3DDISPLAYMODEFILTER", [
1118     (UINT, "Size"),
1119     (D3DFORMAT, "Format"),
1120     (D3DSCANLINEORDERING, "ScanLineOrdering"),
1121 ])
1122
1123 D3DDISPLAYROTATION = Enum("D3DDISPLAYROTATION", [
1124     "D3DDISPLAYROTATION_IDENTITY",
1125     "D3DDISPLAYROTATION_90",
1126     "D3DDISPLAYROTATION_180",
1127     "D3DDISPLAYROTATION_270",
1128 ])
1129
1130 D3D9_RESOURCE_PRIORITY = FakeEnum(DWORD, [
1131     "D3D9_RESOURCE_PRIORITY_MINIMUM",
1132     "D3D9_RESOURCE_PRIORITY_LOW",
1133     "D3D9_RESOURCE_PRIORITY_NORMAL",
1134     "D3D9_RESOURCE_PRIORITY_HIGH",
1135     "D3D9_RESOURCE_PRIORITY_MAXIMUM",
1136 ])
1137