]> git.cworth.org Git - apitrace/commitdiff
Improve tracing of ID3D11DeviceContext::CheckFeatureSupport.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Mon, 16 Apr 2012 13:01:15 +0000 (14:01 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Mon, 16 Apr 2012 13:01:15 +0000 (14:01 +0100)
specs/d3d11.py
specs/d3d9types.py
specs/stdapi.py
wrappers/trace.py

index 2381610d518e5af024daedb9b4c22f27183edf16..bbbf7fa024075089ce1c49264dfa9aac7c13212c 100644 (file)
@@ -1020,14 +1020,6 @@ ID3D11CommandList.methods += [
     StdMethod(UINT, "GetContextFlags", []),
 ]
 
-D3D11_FEATURE = Enum("D3D11_FEATURE", [
-    "D3D11_FEATURE_THREADING",
-    "D3D11_FEATURE_DOUBLES",
-    "D3D11_FEATURE_FORMAT_SUPPORT",
-    "D3D11_FEATURE_FORMAT_SUPPORT2",
-    "D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS",
-])
-
 D3D11_FEATURE_DATA_THREADING = Struct("D3D11_FEATURE_DATA_THREADING", [
     (BOOL, "DriverConcurrentCreates"),
     (BOOL, "DriverCommandLists"),
@@ -1051,6 +1043,14 @@ D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS = Struct("D3D11_FEATURE_DATA_D3D10_X
     (BOOL, "ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x"),
 ])
 
+D3D11_FEATURE, D3D11_FEATURE_DATA = EnumPolymorphic("D3D11_FEATURE", "Feature", [
+    ("D3D11_FEATURE_THREADING", Pointer(D3D11_FEATURE_DATA_THREADING)),
+    ("D3D11_FEATURE_DOUBLES", Pointer(D3D11_FEATURE_DATA_DOUBLES)),
+    ("D3D11_FEATURE_FORMAT_SUPPORT", Pointer(D3D11_FEATURE_DATA_FORMAT_SUPPORT)),
+    ("D3D11_FEATURE_FORMAT_SUPPORT2", Pointer(D3D11_FEATURE_DATA_FORMAT_SUPPORT2)),
+    ("D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS", Pointer(D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS)),
+], Blob(Void, "FeatureSupportDataSize"), False)
+
 ID3D11DeviceContext.methods += [
     StdMethod(Void, "VSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers")]),
     StdMethod(Void, "PSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D11ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]),
@@ -1201,7 +1201,7 @@ ID3D11Device.methods += [
     StdMethod(HRESULT, "CheckMultisampleQualityLevels", [(DXGI_FORMAT, "Format"), (UINT, "SampleCount"), Out(Pointer(UINT), "pNumQualityLevels")]),
     StdMethod(Void, "CheckCounterInfo", [Out(Pointer(D3D11_COUNTER_INFO), "pCounterInfo")]),
     StdMethod(HRESULT, "CheckCounter", [(Pointer(Const(D3D11_COUNTER_DESC)), "pDesc"), Out(Pointer(D3D11_COUNTER_TYPE), "pType"), Out(Pointer(UINT), "pActiveCounters"), Out(LPSTR, "szName"), Out(Pointer(UINT), "pNameLength"), Out(LPSTR, "szUnits"), Out(Pointer(UINT), "pUnitsLength"), Out(LPSTR, "szDescription"), Out(Pointer(UINT), "pDescriptionLength")]),
-    StdMethod(HRESULT, "CheckFeatureSupport", [(D3D11_FEATURE, "Feature"), Out(OpaqueBlob(Void, "FeatureSupportDataSize"), "pFeatureSupportData"), (UINT, "FeatureSupportDataSize")]),
+    StdMethod(HRESULT, "CheckFeatureSupport", [(D3D11_FEATURE, "Feature"), Out(D3D11_FEATURE_DATA, "pFeatureSupportData"), (UINT, "FeatureSupportDataSize")]),
     StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "guid"), Out(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")]),
     StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "guid"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")]),
     StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "guid"), (OpaquePointer(Const(IUnknown)), "pData")]),
index 312eb2aaac63fa84160ddc8f10dfc05ebaea5d3f..e836886027bc0d66b0f54ef483bf4105213af689 100644 (file)
@@ -296,7 +296,7 @@ D3DDEBUGMONITORTOKENS = Enum("D3DDEBUGMONITORTOKENS", [
 # TODO: Convert these to/from actual floats
 FLOAT_AS_DWORD = DWORD
 
-D3DRENDERSTATEVALUE = Polymorphic(DWORD, "State", [
+D3DRENDERSTATETYPE, D3DRENDERSTATEVALUE = EnumPolymorphic("D3DRENDERSTATETYPE", "State", [
     ("D3DRS_ZENABLE", D3DZBUFFERTYPE),
     ("D3DRS_FILLMODE", D3DFILLMODE),
     ("D3DRS_SHADEMODE", D3DSHADEMODE),
@@ -402,11 +402,7 @@ D3DRENDERSTATEVALUE = Polymorphic(DWORD, "State", [
     ("D3DRS_BLENDOPALPHA", D3DBLENDOP),
 
     # XXX: D3DRENDERSTATE_WRAPBIAS + n
-])
-
-D3DRENDERSTATETYPE = Enum("D3DRENDERSTATETYPE", [
-    expr for expr, types in D3DRENDERSTATEVALUE.switchTypes
-])
+], DWORD)
 
 D3DTSS_TCI = Flags(DWORD, [
     #"D3DTSS_TCI_PASSTHRU", # 0
@@ -468,7 +464,7 @@ D3DTEXTURETRANSFORMFLAGS = Enum("D3DTEXTURETRANSFORMFLAGS", [
 ])
 
 
-D3DTEXTURESTAGESTATEVALUE = Polymorphic(DWORD, "Type", [
+D3DTEXTURESTAGESTATETYPE, D3DTEXTURESTAGESTATEVALUE = EnumPolymorphic("D3DTEXTURESTAGESTATETYPE", "Type", [
     ("D3DTSS_COLOROP", D3DTEXTUREOP),
     ("D3DTSS_COLORARG1", D3DTA),
     ("D3DTSS_COLORARG2", D3DTA),
@@ -487,11 +483,7 @@ D3DTEXTURESTAGESTATEVALUE = Polymorphic(DWORD, "Type", [
     ("D3DTSS_ALPHAARG0", D3DTA,),
     ("D3DTSS_RESULTARG", D3DTA,),
     ("D3DTSS_CONSTANT", D3DCOLOR),
-])
-
-D3DTEXTURESTAGESTATETYPE = Enum("D3DTEXTURESTAGESTATETYPE", [
-    expr for expr, types in D3DTEXTURESTAGESTATEVALUE.switchTypes
-])
+], DWORD)
 
 D3DTEXTUREFILTERTYPE = Enum("D3DTEXTUREFILTERTYPE", [
     "D3DTEXF_NONE",
@@ -503,7 +495,7 @@ D3DTEXTUREFILTERTYPE = Enum("D3DTEXTUREFILTERTYPE", [
     "D3DTEXF_CONVOLUTIONMONO",
 ])
 
-D3DSAMPLERSTATEVALUE = Polymorphic(DWORD, "Type", [
+D3DSAMPLERSTATETYPE, D3DSAMPLERSTATEVALUE = EnumPolymorphic("D3DSAMPLERSTATETYPE", "Type", [
     ("D3DSAMP_ADDRESSU", D3DTEXTUREADDRESS),
     ("D3DSAMP_ADDRESSV", D3DTEXTUREADDRESS),
     ("D3DSAMP_ADDRESSW", D3DTEXTUREADDRESS),
@@ -517,11 +509,7 @@ D3DSAMPLERSTATEVALUE = Polymorphic(DWORD, "Type", [
     ("D3DSAMP_SRGBTEXTURE", BOOL),
     ("D3DSAMP_ELEMENTINDEX", DWORD),
     ("D3DSAMP_DMAPOFFSET", DWORD),
-])
-
-D3DSAMPLERSTATETYPE = Enum("D3DSAMPLERSTATETYPE", [
-    expr for expr, types in D3DSAMPLERSTATEVALUE.switchTypes
-])
+], DWORD)
 
 D3DPV = Flags(DWORD, [
     "D3DPV_DONOTCOPYDATA",
index 745ea259586c88641ca2c93f468608c3c0c0f16b..b0995783f8f9aea4c210fc3b96dcf5b676d3ce92 100644 (file)
@@ -478,11 +478,12 @@ def OpaqueBlob(type, size):
 
 class Polymorphic(Type):
 
-    def __init__(self, defaultType, switchExpr, switchTypes):
+    def __init__(self, switchExpr, switchTypes, defaultType, contextLess=True):
         Type.__init__(self, defaultType.expr)
-        self.defaultType = defaultType
         self.switchExpr = switchExpr
         self.switchTypes = switchTypes
+        self.defaultType = defaultType
+        self.contextLess = contextLess
 
     def visit(self, visitor, *args, **kwargs):
         return visitor.visitPolymorphic(self, *args, **kwargs)
@@ -504,6 +505,13 @@ class Polymorphic(Type):
         return zip(cases, types)
 
 
+def EnumPolymorphic(enumName, switchExpr, switchTypes, defaultType, contextLess=True):
+    enumValues = [expr for expr, type in switchTypes]
+    enum = Enum(enumName, enumValues)
+    polymorphic = Polymorphic(switchExpr, switchTypes, defaultType, contextLess)
+    return enum, polymorphic
+
+
 class Visitor:
     '''Abstract visitor for the type hierarchy.'''
 
@@ -675,10 +683,10 @@ class Rebuilder(Visitor):
         return interface
 
     def visitPolymorphic(self, polymorphic):
-        defaultType = self.visit(polymorphic.defaultType)
         switchExpr = polymorphic.switchExpr
         switchTypes = [(expr, self.visit(type)) for expr, type in polymorphic.switchTypes]
-        return Polymorphic(defaultType, switchExpr, switchTypes)
+        defaultType = self.visit(polymorphic.defaultType)
+        return Polymorphic(switchExpr, switchTypes, defaultType, polymorphic.contextLess)
 
 
 class MutableRebuilder(Rebuilder):
index dd9fdd7e0d4959994bd2c64f0bce78500048582d..0064d86667afe5d48337b1fa23a56c6c022e1c80 100644 (file)
@@ -136,6 +136,8 @@ class ComplexValueSerializer(stdapi.OnceVisitor):
         pass
 
     def visitPolymorphic(self, polymorphic):
+        if not polymorphic.contextLess:
+            return
         print 'static void _write__%s(int selector, const %s & value) {' % (polymorphic.tag, polymorphic.expr)
         print '    switch (selector) {'
         for cases, type in polymorphic.iterSwitch():
@@ -242,7 +244,16 @@ class ValueSerializer(stdapi.Visitor):
         assert False
 
     def visitPolymorphic(self, polymorphic, instance):
-        print '    _write__%s(%s, %s);' % (polymorphic.tag, polymorphic.switchExpr, instance)
+        if polymorphic.contextLess:
+            print '    _write__%s(%s, %s);' % (polymorphic.tag, polymorphic.switchExpr, instance)
+        else:
+            print '    switch (%s) {' % polymorphic.switchExpr
+            for cases, type in polymorphic.iterSwitch():
+                for case in cases:
+                    print '    %s:' % case
+                self.visit(type, 'static_cast<%s>(%s)' % (type, instance))
+                print '        break;'
+            print '    }'
 
 
 class WrapDecider(stdapi.Traverser):