From 75a52219e03936b6bb23b8d631fa504f553c8496 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 11 Jun 2015 21:08:00 +0200 Subject: [PATCH] d3d12: Rewind constant buffers get value --- rpcs3/Emu/RSX/D3D12/D3D12.h | 3 +++ rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp | 6 +++--- rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp | 16 ++++++++-------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12.h b/rpcs3/Emu/RSX/D3D12/D3D12.h index 25be93edc4..0bfe9a901b 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12.h +++ b/rpcs3/Emu/RSX/D3D12/D3D12.h @@ -7,6 +7,9 @@ #include "Emu/Memory/vm.h" #include "Emu/RSX/GCM.h" + +#define SAFE_RELEASE(x) if (x) x->Release(); + inline void check(HRESULT hr) { diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp index 8dc28f8a86..c683aca841 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp @@ -439,7 +439,7 @@ void D3D12GSRender::setScaleOffset() D3D12_CPU_DESCRIPTOR_HANDLE Handle = getCurrentResourceStorage().m_scaleOffsetDescriptorHeap->GetCPUDescriptorHandleForHeapStart(); Handle.ptr += getCurrentResourceStorage().m_currentScaleOffsetBufferIndex * m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); m_device->CreateConstantBufferView(&constantBufferViewDesc, Handle); -// m_constantsData.m_resourceStoredSinceLastSync.push_back(std::make_tuple(heapOffset, 256, scaleOffsetBuffer)); + m_constantsData.m_resourceStoredSinceLastSync.push_back(std::make_tuple(heapOffset, 256, nullptr)); } void D3D12GSRender::FillVertexShaderConstantsBuffer() @@ -469,7 +469,7 @@ void D3D12GSRender::FillVertexShaderConstantsBuffer() D3D12_CPU_DESCRIPTOR_HANDLE Handle = getCurrentResourceStorage().m_constantsBufferDescriptorsHeap->GetCPUDescriptorHandleForHeapStart(); Handle.ptr += getCurrentResourceStorage().m_constantsBufferIndex * m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); m_device->CreateConstantBufferView(&constantBufferViewDesc, Handle); -// m_constantsData.m_resourceStoredSinceLastSync.push_back(std::make_tuple(heapOffset, bufferSize, constantsBuffer)); + m_constantsData.m_resourceStoredSinceLastSync.push_back(std::make_tuple(heapOffset, bufferSize, nullptr)); } void D3D12GSRender::FillPixelShaderConstantsBuffer() @@ -533,7 +533,7 @@ void D3D12GSRender::FillPixelShaderConstantsBuffer() D3D12_CPU_DESCRIPTOR_HANDLE Handle = getCurrentResourceStorage().m_constantsBufferDescriptorsHeap->GetCPUDescriptorHandleForHeapStart(); Handle.ptr += getCurrentResourceStorage().m_constantsBufferIndex * m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); m_device->CreateConstantBufferView(&constantBufferViewDesc, Handle); -// m_constantsData.m_resourceStoredSinceLastSync.push_back(std::make_tuple(heapOffset, bufferSize, constantsBuffer)); + m_constantsData.m_resourceStoredSinceLastSync.push_back(std::make_tuple(heapOffset, bufferSize, nullptr)); } diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp index 488586d3c5..fdad3fecae 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp @@ -61,13 +61,13 @@ void D3D12GSRender::ResourceStorage::Reset() m_frameFinishedHandle = 0; for (auto tmp : m_inUseConstantsBuffers) - std::get<2>(tmp)->Release(); + SAFE_RELEASE(std::get<2>(tmp)); for (auto tmp : m_inUseVertexIndexBuffers) - std::get<2>(tmp)->Release(); + SAFE_RELEASE(std::get<2>(tmp)); for (auto tmp : m_inUseTextureUploadBuffers) - std::get<2>(tmp)->Release(); + SAFE_RELEASE(std::get<2>(tmp)); for (auto tmp : m_inUseTexture2D) - std::get<2>(tmp)->Release(); + SAFE_RELEASE(std::get<2>(tmp)); m_inUseConstantsBuffers.clear(); m_inUseVertexIndexBuffers.clear(); m_inUseTextureUploadBuffers.clear(); @@ -120,13 +120,13 @@ void D3D12GSRender::ResourceStorage::Release() { // NOTE: Should be released only if no command are in flight ! for (auto tmp : m_inUseConstantsBuffers) - std::get<2>(tmp)->Release(); + SAFE_RELEASE(std::get<2>(tmp)); for (auto tmp : m_inUseVertexIndexBuffers) - std::get<2>(tmp)->Release(); + SAFE_RELEASE(std::get<2>(tmp)); for (auto tmp : m_inUseTextureUploadBuffers) - std::get<2>(tmp)->Release(); + SAFE_RELEASE(std::get<2>(tmp)); for (auto tmp : m_inUseTexture2D) - std::get<2>(tmp)->Release(); + SAFE_RELEASE(std::get<2>(tmp)); m_constantsBufferDescriptorsHeap->Release(); m_scaleOffsetDescriptorHeap->Release();