diff --git a/src/d3d11/d3d11_buffer.cpp b/src/d3d11/d3d11_buffer.cpp index 7f3ef0b3..a104f37c 100644 --- a/src/d3d11/d3d11_buffer.cpp +++ b/src/d3d11/d3d11_buffer.cpp @@ -11,6 +11,7 @@ namespace dxvk { const D3D11_BUFFER_DESC* pDesc) : m_device (pDevice), m_desc (*pDesc), + m_resource (this), m_d3d10 (this, pDevice->GetD3D10Interface()) { DxvkBufferCreateInfo info; info.size = pDesc->ByteWidth; @@ -132,6 +133,12 @@ namespace dxvk { *ppvObject = ref(&m_d3d10); return S_OK; } + + if (riid == __uuidof(IDXGIResource) + || riid == __uuidof(IDXGIResource1)) { + *ppvObject = ref(&m_resource); + return S_OK; + } Logger::warn("D3D11Buffer::QueryInterface: Unknown interface query"); Logger::warn(str::format(riid)); diff --git a/src/d3d11/d3d11_buffer.h b/src/d3d11/d3d11_buffer.h index 45b1a9a7..cfaaa01d 100644 --- a/src/d3d11/d3d11_buffer.h +++ b/src/d3d11/d3d11_buffer.h @@ -6,6 +6,7 @@ #include "d3d11_device_child.h" #include "d3d11_interfaces.h" +#include "d3d11_resource.h" namespace dxvk { @@ -120,6 +121,7 @@ namespace dxvk { DxvkBufferSlice m_soCounter; DxvkBufferSliceHandle m_mapped; + D3D11DXGIResource m_resource; D3D10Buffer m_d3d10; BOOL CheckFormatFeatureSupport( diff --git a/src/d3d11/d3d11_texture.cpp b/src/d3d11/d3d11_texture.cpp index 23fb59ce..de0a384f 100644 --- a/src/d3d11/d3d11_texture.cpp +++ b/src/d3d11/d3d11_texture.cpp @@ -744,6 +744,7 @@ namespace dxvk { const D3D11_COMMON_TEXTURE_DESC* pDesc) : m_texture (pDevice, pDesc, D3D11_RESOURCE_DIMENSION_TEXTURE1D), m_interop (this, &m_texture), + m_resource(this), m_d3d10 (this, pDevice->GetD3D10Interface()) { } @@ -775,6 +776,12 @@ namespace dxvk { return S_OK; } + if (riid == __uuidof(IDXGIResource) + || riid == __uuidof(IDXGIResource1)) { + *ppvObject = ref(&m_resource); + return S_OK; + } + if (riid == __uuidof(IDXGIVkInteropSurface)) { *ppvObject = ref(&m_interop); return S_OK; @@ -829,6 +836,7 @@ namespace dxvk { : m_texture (pDevice, pDesc, D3D11_RESOURCE_DIMENSION_TEXTURE2D), m_interop (this, &m_texture), m_surface (this, &m_texture), + m_resource(this), m_d3d10 (this, pDevice->GetD3D10Interface()) { } @@ -868,6 +876,12 @@ namespace dxvk { return S_OK; } + if (riid == __uuidof(IDXGIResource) + || riid == __uuidof(IDXGIResource1)) { + *ppvObject = ref(&m_resource); + return S_OK; + } + if (riid == __uuidof(IDXGIVkInteropSurface)) { *ppvObject = ref(&m_interop); return S_OK; @@ -923,6 +937,7 @@ namespace dxvk { const D3D11_COMMON_TEXTURE_DESC* pDesc) : m_texture (pDevice, pDesc, D3D11_RESOURCE_DIMENSION_TEXTURE3D), m_interop (this, &m_texture), + m_resource(this), m_d3d10 (this, pDevice->GetD3D10Interface()) { } @@ -954,6 +969,12 @@ namespace dxvk { return S_OK; } + if (riid == __uuidof(IDXGIResource) + || riid == __uuidof(IDXGIResource1)) { + *ppvObject = ref(&m_resource); + return S_OK; + } + if (riid == __uuidof(IDXGIVkInteropSurface)) { *ppvObject = ref(&m_interop); return S_OK; diff --git a/src/d3d11/d3d11_texture.h b/src/d3d11/d3d11_texture.h index 62bb5a2d..4479e0a1 100644 --- a/src/d3d11/d3d11_texture.h +++ b/src/d3d11/d3d11_texture.h @@ -6,6 +6,7 @@ #include "d3d11_device_child.h" #include "d3d11_interfaces.h" +#include "d3d11_resource.h" namespace dxvk { @@ -386,6 +387,7 @@ namespace dxvk { D3D11CommonTexture m_texture; D3D11VkInteropSurface m_interop; + D3D11DXGIResource m_resource; D3D10Texture1D m_d3d10; }; @@ -433,6 +435,7 @@ namespace dxvk { D3D11CommonTexture m_texture; D3D11VkInteropSurface m_interop; D3D11DXGISurface m_surface; + D3D11DXGIResource m_resource; D3D10Texture2D m_d3d10; }; @@ -479,6 +482,7 @@ namespace dxvk { D3D11CommonTexture m_texture; D3D11VkInteropSurface m_interop; + D3D11DXGIResource m_resource; D3D10Texture3D m_d3d10; };