From fe5828cb478c180ae21b435fb851a9ee8aa13bee Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sat, 26 Aug 2017 18:54:02 +0300 Subject: [PATCH] rsx: Implement QUAD_STRIP - QUAD_STRIP evaluates to TRIANGLE_STRIP in memory. The memory layout is identical. - The only difference between the two modes would be the primitive_ID but that doesnt matter on RSX - Its worth noting that results will be different between the two modes if input vertices are non-coplanar for every set of N verts --- rpcs3/Emu/RSX/Common/BufferUtils.cpp | 2 +- rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp | 2 +- rpcs3/Emu/RSX/GL/GLHelpers.cpp | 4 ++-- rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/RSX/Common/BufferUtils.cpp b/rpcs3/Emu/RSX/Common/BufferUtils.cpp index dda7f724a8..44a3ab7f62 100644 --- a/rpcs3/Emu/RSX/Common/BufferUtils.cpp +++ b/rpcs3/Emu/RSX/Common/BufferUtils.cpp @@ -610,12 +610,12 @@ bool is_primitive_native(rsx::primitive_type draw_mode) case rsx::primitive_type::line_strip: case rsx::primitive_type::triangles: case rsx::primitive_type::triangle_strip: + case rsx::primitive_type::quad_strip: return true; case rsx::primitive_type::line_loop: case rsx::primitive_type::polygon: case rsx::primitive_type::triangle_fan: case rsx::primitive_type::quads: - case rsx::primitive_type::quad_strip: return false; } fmt::throw_exception("Wrong primitive type" HERE); diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp index ce72f284ec..81568faed8 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp @@ -304,7 +304,7 @@ D3D12_PRIMITIVE_TOPOLOGY get_primitive_topology(rsx::primitive_type draw_mode) case rsx::primitive_type::triangle_strip: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; case rsx::primitive_type::triangle_fan: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; case rsx::primitive_type::quads: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; - case rsx::primitive_type::quad_strip: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + case rsx::primitive_type::quad_strip: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; case rsx::primitive_type::polygon: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; } fmt::throw_exception("Invalid draw mode (0x%x)" HERE, (u32)draw_mode); diff --git a/rpcs3/Emu/RSX/GL/GLHelpers.cpp b/rpcs3/Emu/RSX/GL/GLHelpers.cpp index 55d8e4309d..9996099a3a 100644 --- a/rpcs3/Emu/RSX/GL/GLHelpers.cpp +++ b/rpcs3/Emu/RSX/GL/GLHelpers.cpp @@ -19,7 +19,7 @@ namespace gl case rsx::primitive_type::triangle_strip: return GL_TRIANGLE_STRIP; case rsx::primitive_type::triangle_fan: return GL_TRIANGLE_FAN; case rsx::primitive_type::quads: return GL_TRIANGLES; - case rsx::primitive_type::quad_strip: return GL_TRIANGLES; + case rsx::primitive_type::quad_strip: return GL_TRIANGLE_STRIP; case rsx::primitive_type::polygon: return GL_TRIANGLES; } fmt::throw_exception("unknow primitive type" HERE); @@ -543,9 +543,9 @@ namespace gl case rsx::primitive_type::triangles: case rsx::primitive_type::triangle_strip: case rsx::primitive_type::triangle_fan: + case rsx::primitive_type::quad_strip: return true; case rsx::primitive_type::quads: - case rsx::primitive_type::quad_strip: case rsx::primitive_type::polygon: return false; } diff --git a/rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp b/rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp index c91f3656a5..5a340112fd 100644 --- a/rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp +++ b/rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp @@ -25,11 +25,11 @@ namespace vk case rsx::primitive_type::triangles: return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; case rsx::primitive_type::triangle_strip: + case rsx::primitive_type::quad_strip: return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; case rsx::primitive_type::triangle_fan: return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN; case rsx::primitive_type::quads: - case rsx::primitive_type::quad_strip: case rsx::primitive_type::polygon: requires_modification = true; return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;