From 7ae680d9d103aec94195133efb862e4c6cad0bc6 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sun, 21 Feb 2016 22:15:18 +0100 Subject: [PATCH] d3d12: Avoid uploading constant buffer every draw call --- rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp | 16 +++++++++++----- rpcs3/Emu/RSX/D3D12/D3D12GSRender.h | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp index 25bf88da16..49fcbc9dc4 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp @@ -319,11 +319,17 @@ void D3D12GSRender::end() .Offset((INT)currentDescriptorIndex + vertex_buffer_count, m_descriptor_stride_srv_cbv_uav) ); - upload_and_bind_vertex_shader_constants(currentDescriptorIndex + 1 + vertex_buffer_count); - get_current_resource_storage().command_list->SetGraphicsRootDescriptorTable(VERTEX_CONSTANT_BUFFERS_SLOT, - CD3DX12_GPU_DESCRIPTOR_HANDLE(get_current_resource_storage().descriptors_heap->GetGPUDescriptorHandleForHeapStart()) - .Offset((INT)currentDescriptorIndex + 1 + vertex_buffer_count, m_descriptor_stride_srv_cbv_uav) - ); + if (m_transform_constants_dirty) + { + m_current_transform_constants_buffer_descriptor_id = (u32)currentDescriptorIndex + 1 + vertex_buffer_count; + upload_and_bind_vertex_shader_constants(currentDescriptorIndex + 1 + vertex_buffer_count); + m_transform_constants_dirty = false; + get_current_resource_storage().command_list->SetGraphicsRootDescriptorTable(VERTEX_CONSTANT_BUFFERS_SLOT, + CD3DX12_GPU_DESCRIPTOR_HANDLE(get_current_resource_storage().descriptors_heap->GetGPUDescriptorHandleForHeapStart()) + .Offset(m_current_transform_constants_buffer_descriptor_id, m_descriptor_stride_srv_cbv_uav) + ); + } + std::chrono::time_point constants_duration_end = std::chrono::system_clock::now(); m_timers.constants_duration += std::chrono::duration_cast(constants_duration_end - constants_duration_start).count(); diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h index bd7d94740e..de5e06bb4c 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h @@ -128,6 +128,7 @@ private: ID3D12Resource *m_dummy_texture; // Currently used shader resources / samplers descriptor + u32 m_current_transform_constants_buffer_descriptor_id; std::array, 16> m_current_shader_resources = {}; std::array m_current_samplers = {}; public: