Add support for a bunch of DXGI 1.2 interfaces

Jeff Muizelaar jmuizelaar at mozilla.com
Tue Nov 19 12:18:31 PST 2013


diff --git a/specs/d3d11.py b/specs/d3d11.py
index 7d1e1d7..3da1559 100644
--- a/specs/d3d11.py
+++ b/specs/d3d11.py
@@ -1219,13 +1219,14 @@ d3d11.addFunctions([
     StdFunction(HRESULT, "D3D11CreateDevice", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D11_CREATE_DEVICE_FLAG, "Flags"), (Array(Const(D3D_FEATURE_LEVEL), "FeatureLevels"), "pFeatureLevels"), (UINT, "FeatureLevels"), (UINT, "SDKVersion"), Out(Pointer(ObjPointer(ID3D11Device)), "ppDevice"), Out(Pointer(D3D_FEATURE_LEVEL), "pFeatureLevel"), Out(Pointer(ObjPointer(ID3D11DeviceContext)), "ppImmediateContext")]),
     StdFunction(HRESULT, "D3D11CreateDeviceAndSwapChain", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D11_CREATE_DEVICE_FLAG, "Flags"), (Array(Const(D3D_FEATURE_LEVEL), "FeatureLevels"), "pFeatureLevels"), (UINT, "FeatureLevels"), (UINT, "SDKVersion"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC)), "pSwapChainDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain"), Out(Pointer(ObjPointer(ID3D11Device)), "ppDevice"), Out(Pointer(D3D_FEATURE_LEVEL), "pFeatureLevel"), Out(Pointer(ObjPointer(ID3D11DeviceContext)), "ppImmediateContext")]),
 ])
 
 d3d11.addInterfaces([
     IDXGIFactory1,
     IDXGIAdapter1,
     IDXGIDevice1,
+    IDXGIDevice2,
     IDXGIResource,
     ID3D11Debug,
     ID3D11InfoQueue,
     ID3D11SwitchToRef,
 ])
diff --git a/specs/dxgi.py b/specs/dxgi.py
index 7092b16..1c179d7 100644
--- a/specs/dxgi.py
+++ b/specs/dxgi.py
@@ -36,16 +36,20 @@ IDXGISurface1 = Interface("IDXGISurface1", IDXGISurface)
 IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject)
 IDXGIOutput = Interface("IDXGIOutput", IDXGIObject)
 IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject)
 IDXGIFactory = Interface("IDXGIFactory", IDXGIObject)
 IDXGIDevice = Interface("IDXGIDevice", IDXGIObject)
 IDXGIFactory1 = Interface("IDXGIFactory1", IDXGIFactory)
 IDXGIAdapter1 = Interface("IDXGIAdapter1", IDXGIAdapter)
 IDXGIDevice1 = Interface("IDXGIDevice1", IDXGIDevice)
+IDXGIFactory2 = Interface("IDXGIFactory2", IDXGIFactory1)
+IDXGISwapChain1 = Interface("IDXGISwapChain1", IDXGISwapChain)
+IDXGIDevice2 = Interface("IDXGIDevice2", IDXGIDevice1)
+IDXGIAdapter2 = Interface("IDXGIAdapter2", IDXGIAdapter1)
 
 
 DXGI_USAGE = Flags(UINT, [
     "DXGI_CPU_ACCESS_NONE", # 0
     "DXGI_CPU_ACCESS_SCRATCH", # 3
     "DXGI_CPU_ACCESS_DYNAMIC", # 1
     "DXGI_CPU_ACCESS_READ_WRITE", # 2
     "DXGI_USAGE_SHADER_INPUT",
@@ -132,16 +136,57 @@ DXGI_SWAP_CHAIN_DESC = Struct("DXGI_SWAP_CHAIN_DESC", [
     (DXGI_USAGE, "BufferUsage"),
     (UINT, "BufferCount"),
     (HWND, "OutputWindow"),
     (BOOL, "Windowed"),
     (DXGI_SWAP_EFFECT, "SwapEffect"),
     (DXGI_SWAP_CHAIN_FLAG, "Flags"),
 ])
 
+DXGI_SCALING = Enum("DXGI_SCALING", [
+    "DXGI_SCALING_STRETCH",
+    "DXGI_SCALING_NONE",
+])
+
+DXGI_ALPHA_MODE = Enum("DXGI_ALPHA_MODE", [
+    "DXGI_ALPHA_MODE_UNSPECIFIED",
+    "DXGI_ALPHA_MODE_PREMULTIPLIED",
+    "DXGI_ALPHA_MODE_STRAIGHT",
+    "DXGI_ALPHA_MODE_IGNORE",
+])
+
+DXGI_SWAP_CHAIN_DESC1 = Struct("DXGI_SWAP_CHAIN_DESC1", [
+    (UINT, "Width"),
+    (UINT, "Height"),
+    (DXGI_FORMAT, "Format"),
+    (BOOL, "Stereo"),
+    (DXGI_SAMPLE_DESC, "SampleDesc"),
+    (DXGI_USAGE, "BufferUsage"),
+    (UINT, "BufferCount"),
+    (DXGI_SCALING, "Scaling"),
+    (DXGI_SWAP_EFFECT, "SwapEffect"),
+    (DXGI_ALPHA_MODE, "AlphaMode"),
+    (UINT, "Flags"),
+])
+
+DXGI_SWAP_CHAIN_FULLSCREEN_DESC = Struct("DXGI_SWAP_CHAIN_FULLSCREEN_DESC", [
+    (DXGI_RATIONAL, "RefreshRate"),
+    (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
+    (DXGI_MODE_SCALING, "Scaling"),
+    (BOOL, "Windowed"),
+])
+
+DXGI_PRESENT_PARAMETERS = Struct("DXGI_PRESENT_PARAMETERS", [
+    (UINT, "DirtyRectsCount"),
+    (Pointer(RECT), "pDirtyRects"),
+    (Pointer(RECT), "pScrollRect"),
+    (Pointer(POINT), "pScrollOffset"),
+])
+
+
 IDXGIObject.methods += [
     StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "Name"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False),
     StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "Name"), (OpaquePointer(Const(IUnknown)), "pUnknown")], sideeffects=False),
     StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "Name"), Out(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False),
     StdMethod(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParent")]),
 ]
 
 IDXGIDeviceSubObject.methods += [
@@ -304,18 +349,93 @@ IDXGISwapChainDWM.methods += [
     StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
     StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
     StdMethod(HRESULT, "GetFrameStatistics", [(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
     StdMethod(HRESULT, "GetLastPresentCount", [(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
     StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
     StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
 ]
 
+IDXGIFactory2.methods += [
+    StdMethod(BOOL, "IsWindowedStereoEnabled", []),
+    StdMethod(HRESULT, "CreateSwapChainForHwnd", [(ObjPointer(IUnknown), "pDevice"), (HWND, "WindowHandle"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (Pointer(Const(DXGI_SWAP_CHAIN_FULLSCREEN_DESC)), "pFullscreenDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
+    StdMethod(HRESULT, "CreateSwapChainForCoreWindow", [(ObjPointer(IUnknown), "pDevice"), (ObjPointer(IUnknown), "pWindow"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
+    StdMethod(HRESULT, "CreateSwapChainForComposition", [(ObjPointer(IUnknown), "pDevice"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
+    StdMethod(HRESULT, "GetSharedResourceAdapterLuid", [(HANDLE, "hResource"), Out(Pointer(LUID), "pLuid")]),
+    StdMethod(HRESULT, "RegisterStereoStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")]),
+    StdMethod(HRESULT, "RegisterStereoStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")]),
+    StdMethod(Void, "UnregisterStereoStatus", [(DWORD, "dwCookie")]),
+    StdMethod(HRESULT, "RegisterOcclusionStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")]),
+    StdMethod(HRESULT, "RegisterOcclusionStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")]),
+    StdMethod(Void, "UnregisterOcclusionStatus", [(DWORD, "dwCookie")]),
+]
+
+IDXGISwapChain1.methods += [
+    StdMethod(HRESULT, "GetBackgroundColor", [(Out(Pointer(DXGI_RGBA), "pColor"))]),
+    StdMethod(HRESULT, "GetCoreWindow", [(REFIID, "riid"), (Out(Pointer(ObjPointer(Void)), "ppUnk"))]),
+    StdMethod(HRESULT, "GetDesc1", [(Out(Pointer(DXGI_SWAP_CHAIN_DESC1), "pDesc"))]),
+    StdMethod(HRESULT, "GetFullscreenDesc", [(Out(Pointer(DXGI_SWAP_CHAIN_FULLSCREEN_DESC), "pDesc"))]),
+    StdMethod(HRESULT, "GetHwnd", [(Out(Pointer(HWND), "pHwnd"))]),
+    StdMethod(HRESULT, "GetRestrictToOutput", [(Out(Pointer(ObjPointer(IDXGIOutput)), "ppRestrictToOutput"))]),
+    StdMethod(HRESULT, "GetRotation", [(Out(Pointer(DXGI_MODE_ROTATION), "ppRestrictToOutput"))]),
+    StdMethod(BOOL, "IsTemporaryMonoSupported", []),
+    StdMethod(HRESULT, "Present1", [(UINT, "SyncInterval"), (UINT, "Flags"), (Pointer(Const(DXGI_PRESENT_PARAMETERS)), "pPresentParameters")]),
+    StdMethod(HRESULT, "SetBackgroundColor", [(Pointer(Const(DXGI_RGBA)), "pColor")]),
+    StdMethod(HRESULT, "SetRotation", [(DXGI_MODE_ROTATION, "Rotation")]),
+]
+
+DXGI_OFFER_RESOURCE_PRIORITY = Enum("DXGI_OFFER_RESOURCE_PRIORITY", [
+    "DXGI_OFFER_RESOURCE_PRIORITY_LOW",
+    "DXGI_OFFER_RESOURCE_PRIORITY_NORMAL",
+    "DXGI_OFFER_RESOURCE_PRIORITY_HIGH",
+])
+
+IDXGIDevice2.methods += [
+    StdMethod(HRESULT, "OfferResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), (DXGI_OFFER_RESOURCE_PRIORITY, "Priority")]),
+    StdMethod(HRESULT, "ReclaimResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), Out(Pointer(BOOL), "pDiscarded")]),
+    StdMethod(HRESULT, "EnqueueSetEvent", [(HANDLE, "hEvent")]),
+]
+
+DXGI_GRAPHICS_PREEMPTION_GRANULARITY = Enum("DXGI_GRAPHICS_PREEMPTION_GRANULARITY", [
+    "DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY",
+    "DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY",
+    "DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY",
+    "DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY",
+    "DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY",
+])
+
+DXGI_COMPUTE_PREEMPTION_GRANULARITY = Enum("DXGI_COMPUTE_PREEMPTION_GRANULARITY", [
+    "DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY",
+    "DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY",
+    "DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY",
+    "DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY",
+    "DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY",
+])
+
+DXGI_ADAPTER_DESC2 = Struct("DXGI_ADAPTER_DESC2", [
+    (WString, "Description"),
+    (UINT, "VendorId"),
+    (UINT, "DeviceId"),
+    (UINT, "SubSysId"),
+    (UINT, "Revision"),
+    (SIZE_T, "DedicatedVideoMemory"),
+    (SIZE_T, "DedicatedSystemMemory"),
+    (SIZE_T, "SharedSystemMemory"),
+    (LUID, "AdapterLuid"),
+    (UINT, "Flags"),
+    (DXGI_GRAPHICS_PREEMPTION_GRANULARITY, "GraphicsPreemptionGranularity"),
+    (DXGI_COMPUTE_PREEMPTION_GRANULARITY, "ComputePreemptionGranularity"),
+])
+
+IDXGIAdapter2.methods += [
+    StdMethod(HRESULT, "GetDesc2", [Out(Pointer(DXGI_ADAPTER_DESC2), "pDesc")], sideeffects=False),
+]
 
 dxgi = Module('dxgi')
 dxgi.addInterfaces([
-    IDXGIFactory1,
+    IDXGIFactory2,
     IDXGIFactoryDWM,
+    IDXGIAdapter2,
 ])
 dxgi.addFunctions([
     StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
     StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
 ])
diff --git a/specs/dxgitype.py b/specs/dxgitype.py
index c6202b5..0419840 100644
--- a/specs/dxgitype.py
+++ b/specs/dxgitype.py
@@ -108,8 +108,15 @@ DXGI_MODE_DESC = Struct("DXGI_MODE_DESC", [
     (DXGI_MODE_SCALING, "Scaling"),
 ])
 
 DXGI_SAMPLE_DESC = Struct("DXGI_SAMPLE_DESC", [
     (UINT, "Count"),
     (UINT, "Quality"),
 ])
 
+DXGI_RGBA = Struct("DXGI_RGBA", [
+    (Float, "r"),
+    (Float, "g"),
+    (Float, "b"),
+    (Float, "a"),
+])
+



More information about the apitrace mailing list