From 6b7ce373746fbbd2e0b86839c7f05ca012cd2b9e Mon Sep 17 00:00:00 2001 From: vlj Date: Sun, 18 Sep 2016 00:43:20 +0200 Subject: [PATCH] rsx: vertex attribute size is 1 again for CMP, let backend handles this formats properties. --- rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp | 15 ++++++--------- rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp | 9 +-------- rpcs3/Emu/RSX/rsx_vertex_data.h | 2 -- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp index 09043b5b62..27aa74e184 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp @@ -11,8 +11,9 @@ namespace { - UINT get_component_mapping_from_vector_size(u8 size) + UINT get_component_mapping_from_vector_size(rsx::vertex_base_type type, u8 size) { + if (type == rsx::vertex_base_type::cmp) return D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; switch (size) { case 1: @@ -51,9 +52,8 @@ namespace { u32 element_size = rsx::get_vertex_type_size_on_host(info.type(), info.size()); D3D12_SHADER_RESOURCE_VIEW_DESC vertex_buffer_view = { - get_vertex_attribute_format(info.type(), info.size()), - D3D12_SRV_DIMENSION_BUFFER, - get_component_mapping_from_vector_size(info.size())}; + get_vertex_attribute_format(info.type(), info.size()), D3D12_SRV_DIMENSION_BUFFER, + get_component_mapping_from_vector_size(info.type(), info.size())}; vertex_buffer_view.Buffer.FirstElement = offset_in_vertex_buffers_buffer / element_size; vertex_buffer_view.Buffer.NumElements = buffer_size / element_size; return vertex_buffer_view; @@ -62,11 +62,8 @@ namespace D3D12_SHADER_RESOURCE_VIEW_DESC get_vertex_attribute_srv(const rsx::vertex_base_type type, u8 size, UINT64 offset_in_vertex_buffers_buffer, UINT buffer_size) { u32 element_size = rsx::get_vertex_type_size_on_host(type, size); - D3D12_SHADER_RESOURCE_VIEW_DESC vertex_buffer_view = { - get_vertex_attribute_format(type, size), - D3D12_SRV_DIMENSION_BUFFER, - get_component_mapping_from_vector_size(size) - }; + D3D12_SHADER_RESOURCE_VIEW_DESC vertex_buffer_view = {get_vertex_attribute_format(type, size), + D3D12_SRV_DIMENSION_BUFFER, get_component_mapping_from_vector_size(type, size)}; vertex_buffer_view.Buffer.FirstElement = offset_in_vertex_buffers_buffer / element_size; vertex_buffer_view.Buffer.NumElements = buffer_size / element_size; return vertex_buffer_view; diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp index ff4891ecf2..b2effbe3d5 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp @@ -453,14 +453,7 @@ DXGI_FORMAT get_vertex_attribute_format(rsx::vertex_base_type type, u8 size) } case rsx::vertex_base_type::cmp: { - switch (size) - { - case 1: - case 2: - case 3: fmt::throw_exception("Unsupported CMP vertex format with size > 1" HERE); - case 4: return DXGI_FORMAT_R16G16B16A16_SNORM; - } - break; + return DXGI_FORMAT_R16G16B16A16_SNORM; } case rsx::vertex_base_type::ub256: { diff --git a/rpcs3/Emu/RSX/rsx_vertex_data.h b/rpcs3/Emu/RSX/rsx_vertex_data.h index 988fe38051..7f6a89345d 100644 --- a/rpcs3/Emu/RSX/rsx_vertex_data.h +++ b/rpcs3/Emu/RSX/rsx_vertex_data.h @@ -38,8 +38,6 @@ public: u8 size() const { - if (decode_reg().type() == rsx::vertex_base_type::cmp) - return 4; return decode_reg().size(); }