From 406816d17c9ec9062a8d24c9dbe23c653fc4822d Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 31 Aug 2018 12:29:33 +0200 Subject: [PATCH] [d3d10] Support pOffsets parameter in SOGetTargets --- src/d3d10/d3d10_device.cpp | 8 ++++---- src/d3d11/d3d11_context.cpp | 14 ++++++++++++++ src/d3d11/d3d11_context.h | 5 +++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/d3d10/d3d10_device.cpp b/src/d3d10/d3d10_device.cpp index 0a14fc809..cba6d0087 100644 --- a/src/d3d10/d3d10_device.cpp +++ b/src/d3d10/d3d10_device.cpp @@ -1550,7 +1550,10 @@ namespace dxvk { ID3D10Buffer** ppSOTargets, UINT* pOffsets) { ID3D11Buffer* d3d11Buffers[D3D10_SO_BUFFER_SLOT_COUNT]; - m_context->SOGetTargets(NumBuffers, ppSOTargets ? d3d11Buffers : nullptr); + + m_context->SOGetTargetsWithOffsets(NumBuffers, + ppSOTargets ? d3d11Buffers : nullptr, + pOffsets); if (ppSOTargets != nullptr) { for (uint32_t i = 0; i < NumBuffers; i++) { @@ -1559,9 +1562,6 @@ namespace dxvk { : nullptr; } } - - if (pOffsets != nullptr) - Logger::warn("D3D10: SOGetTargets: Reporting buffer offsets not supported"); } diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index 7159386be..32a1b0241 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -2561,6 +2561,20 @@ namespace dxvk { } + void STDMETHODCALLTYPE D3D11DeviceContext::SOGetTargetsWithOffsets( + UINT NumBuffers, + ID3D11Buffer** ppSOTargets, + UINT* pOffsets) { + for (uint32_t i = 0; i < NumBuffers; i++) { + if (ppSOTargets != nullptr) + ppSOTargets[i] = m_state.so.targets[i].buffer.ref(); + + if (pOffsets != nullptr) + pOffsets[i] = m_state.so.targets[i].offset; + } + } + + void STDMETHODCALLTYPE D3D11DeviceContext::TransitionSurfaceLayout( IDXGIVkInteropSurface* pSurface, const VkImageSubresourceRange* pSubresources, diff --git a/src/d3d11/d3d11_context.h b/src/d3d11/d3d11_context.h index 9fd7e56ce..47efa7a37 100644 --- a/src/d3d11/d3d11_context.h +++ b/src/d3d11/d3d11_context.h @@ -631,6 +631,11 @@ namespace dxvk { UINT NumBuffers, ID3D11Buffer** ppSOTargets) final; + void STDMETHODCALLTYPE SOGetTargetsWithOffsets( + UINT NumBuffers, + ID3D11Buffer** ppSOTargets, + UINT* pOffsets); + void STDMETHODCALLTYPE TransitionSurfaceLayout( IDXGIVkInteropSurface* pSurface, const VkImageSubresourceRange* pSubresources,