From 753769aee48e96f199a2f5911c6351308e31a832 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sat, 11 Aug 2018 20:20:16 +0200 Subject: [PATCH] [d3d10] Implement SOSetTargets and SOGetTargets --- src/d3d10/d3d10_device.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/d3d10/d3d10_device.cpp b/src/d3d10/d3d10_device.cpp index 2975a39fb..b241be49f 100644 --- a/src/d3d10/d3d10_device.cpp +++ b/src/d3d10/d3d10_device.cpp @@ -939,7 +939,15 @@ namespace dxvk { UINT NumBuffers, ID3D10Buffer* const* ppSOTargets, const UINT* pOffsets) { - Logger::err("D3D10Device::SOSetTargets: Not implemented"); + ID3D11Buffer* d3d11Buffers[D3D10_SO_BUFFER_SLOT_COUNT]; + + for (uint32_t i = 0; i < NumBuffers; i++) { + d3d11Buffers[i] = ppSOTargets && ppSOTargets[i] + ? static_cast(ppSOTargets[i])->GetD3D11Iface() + : nullptr; + } + + m_context->SOSetTargets(NumBuffers, d3d11Buffers, pOffsets); } @@ -947,7 +955,19 @@ namespace dxvk { UINT NumBuffers, ID3D10Buffer** ppSOTargets, UINT* pOffsets) { - Logger::err("D3D10Device::SOGetTargets: Not implemented"); + ID3D11Buffer* d3d11Buffers[D3D10_SO_BUFFER_SLOT_COUNT]; + m_context->SOGetTargets(NumBuffers, ppSOTargets ? d3d11Buffers : nullptr); + + if (ppSOTargets != nullptr) { + for (uint32_t i = 0; i < NumBuffers; i++) { + ppSOTargets[i] = d3d11Buffers[i] + ? static_cast(d3d11Buffers[i])->GetD3D10Iface() + : nullptr; + } + } + + if (pOffsets != nullptr) + Logger::warn("D3D10: SOGetTargets: Reporting buffer offsets not supported"); }