From b5f23d86f4dcfc50a805f8ead0c97cb6390e4338 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 2 Mar 2025 18:36:47 +0100 Subject: [PATCH] [d3d11] Implement ID3D11On12Device1 --- src/d3d11/d3d11_device.cpp | 3 ++- src/d3d11/d3d11_on_12.cpp | 7 +++++++ src/d3d11/d3d11_on_12.h | 25 ++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 2ffc50e26..3ba2b99e2 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -3430,7 +3430,8 @@ namespace dxvk { } if (m_d3d11on12.Is11on12Device()) { - if (riid == __uuidof(ID3D11On12Device)) { + if (riid == __uuidof(ID3D11On12Device) + || riid == __uuidof(ID3D11On12Device1_DXVK)) { *ppvObject = ref(&m_d3d11on12); return S_OK; } diff --git a/src/d3d11/d3d11_on_12.cpp b/src/d3d11/d3d11_on_12.cpp index 7393021c7..268bd7599 100644 --- a/src/d3d11/d3d11_on_12.cpp +++ b/src/d3d11/d3d11_on_12.cpp @@ -147,4 +147,11 @@ namespace dxvk { } } + + HRESULT STDMETHODCALLTYPE D3D11on12Device::GetD3D12Device( + REFIID riid, + void** ppvDevice) { + return m_d3d12Queue->GetDevice(riid, ppvDevice); + } + } diff --git a/src/d3d11/d3d11_on_12.h b/src/d3d11/d3d11_on_12.h index 9620662b6..787c77425 100644 --- a/src/d3d11/d3d11_on_12.h +++ b/src/d3d11/d3d11_on_12.h @@ -4,6 +4,21 @@ #include "../util/log/log.h" +/** + * \brief Declaration of the ID3D11On12Device1 interface + * + * Various different headers that we need to be compatible with + * can't seem to agree on the signature of GetD3D12Device, and + * older wine/mingw headers don't support this interface at all. + */ +MIDL_INTERFACE("bdb64df4-ea2f-4c70-b861-aaab1258bb5d") +ID3D11On12Device1_DXVK : public ID3D11On12Device { + virtual HRESULT STDMETHODCALLTYPE GetD3D12Device( + REFIID riid, + void** ppvDevice) = 0; +}; + + namespace dxvk { class D3D11Device; @@ -22,7 +37,7 @@ namespace dxvk { }; - class D3D11on12Device : public ID3D11On12Device { + class D3D11on12Device : public ID3D11On12Device1_DXVK { public: @@ -58,6 +73,10 @@ namespace dxvk { ID3D11Resource* const* ppResources, UINT ResourceCount); + HRESULT STDMETHODCALLTYPE GetD3D12Device( + REFIID riid, + void** ppvDevice); + bool Is11on12Device() const { return m_d3d12Device != nullptr; } @@ -73,3 +92,7 @@ namespace dxvk { }; } + +#ifndef _MSC_VER +__CRT_UUID_DECL(ID3D11On12Device1_DXVK, 0xbdb64df4,0xea2f,0x4c70,0xb8,0x61,0xaa,0xab,0x12,0x58,0xbb,0x5d); +#endif