From 153f1cc50a0c511f9ce5634d897d16f065db1324 Mon Sep 17 00:00:00 2001 From: vlj Date: Sun, 11 Sep 2016 23:35:26 +0200 Subject: [PATCH 1/3] d3d12: Always set transform constant when debug output is enabled. --- rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp index 359666c4b3..b35b98adc0 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp @@ -356,7 +356,7 @@ void D3D12GSRender::end() .Offset((INT)currentDescriptorIndex + vertex_buffer_count, m_descriptor_stride_srv_cbv_uav) ); - if (m_transform_constants_dirty) + if (m_transform_constants_dirty && !g_cfg_rsx_debug_output) { m_current_transform_constants_buffer_descriptor_id = (u32)currentDescriptorIndex + 1 + vertex_buffer_count; upload_and_bind_vertex_shader_constants(currentDescriptorIndex + 1 + vertex_buffer_count); From 30b804e0bc7ca2609e91be6f9640f6edcf892334 Mon Sep 17 00:00:00 2001 From: vlj Date: Sun, 11 Sep 2016 23:36:58 +0200 Subject: [PATCH 2/3] d3d12: Fix a potential race condition. --- rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp b/rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp index 38de09d3c6..681fbf769b 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp @@ -23,6 +23,8 @@ void data_cache::protect_data(u64 key, u32 start, size_t size) bool data_cache::invalidate_address(u32 addr) { + // In case 2 threads write to texture memory + std::lock_guard lock(m_mut); bool handled = false; auto It = m_protected_ranges.begin(), E = m_protected_ranges.end(); for (; It != E;) @@ -33,7 +35,6 @@ bool data_cache::invalidate_address(u32 addr) u32 protectedRangeStart = std::get<1>(protectedTexture), protectedRangeSize = std::get<2>(protectedTexture); if (addr >= protectedRangeStart && addr <= protectedRangeSize + protectedRangeStart) { - std::lock_guard lock(m_mut); u64 texadrr = std::get<0>(protectedTexture); m_address_to_data[texadrr].first.m_is_dirty = true; From 14205d3d1cf3822ebbd86de1f2151f3b8f305e26 Mon Sep 17 00:00:00 2001 From: vlj Date: Mon, 12 Sep 2016 00:05:14 +0200 Subject: [PATCH 3/3] d3d12: CMP vertex format has 4 members. Fix 1878 --- rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp | 6 +++--- rpcs3/Emu/RSX/rsx_vertex_data.h | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp index 519b7643e5..ff4891ecf2 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp @@ -455,10 +455,10 @@ DXGI_FORMAT get_vertex_attribute_format(rsx::vertex_base_type type, u8 size) { switch (size) { - case 1: return DXGI_FORMAT_R16G16B16A16_SNORM; + case 1: case 2: - case 3: - case 4: fmt::throw_exception("Unsupported CMP vertex format with size > 1" HERE); + case 3: fmt::throw_exception("Unsupported CMP vertex format with size > 1" HERE); + case 4: return DXGI_FORMAT_R16G16B16A16_SNORM; } break; } diff --git a/rpcs3/Emu/RSX/rsx_vertex_data.h b/rpcs3/Emu/RSX/rsx_vertex_data.h index 7f6a89345d..988fe38051 100644 --- a/rpcs3/Emu/RSX/rsx_vertex_data.h +++ b/rpcs3/Emu/RSX/rsx_vertex_data.h @@ -38,6 +38,8 @@ public: u8 size() const { + if (decode_reg().type() == rsx::vertex_base_type::cmp) + return 4; return decode_reg().size(); }