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