]> git.cworth.org Git - apitrace/blob - specs/d3d9types.py
d3d8: Update specs to match d3d9.
[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