Add support for a bunch of DXGI 1.2 interfaces

José Fonseca jose.r.fonseca at gmail.com
Fri Nov 29 11:45:45 PST 2013


Thanks. The patch is alright, but I'll need to update my developemnt
systems with the necessary headers from Windows 8 SDK.  This might take
sometime, specially for MinGW crosscompilation, which very important for me
(as that's what I used for day-to-day development of apitrace for windows).

Jose


On Tue, Nov 19, 2013 at 8:18 PM, Jeff Muizelaar <jmuizelaar at mozilla.com>wrote:

> 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"),
> +])
> +
>
> _______________________________________________
> apitrace mailing list
> apitrace at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/apitrace
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/apitrace/attachments/20131129/a49ee643/attachment-0001.html>


More information about the apitrace mailing list