From ef95fa9f5ff6594aafde4310f82ba0c340352789 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sun, 20 Apr 2025 17:58:28 +0300 Subject: [PATCH] rsx: de-uglify buffer upload restructure --- rpcs3/Emu/RSX/Common/BufferUtils.cpp | 38 ++++++++++++---------------- rpcs3/util/types.hpp | 8 ++++++ 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/rpcs3/Emu/RSX/Common/BufferUtils.cpp b/rpcs3/Emu/RSX/Common/BufferUtils.cpp index ed86efcc7a..7141ebeb0a 100644 --- a/rpcs3/Emu/RSX/Common/BufferUtils.cpp +++ b/rpcs3/Emu/RSX/Common/BufferUtils.cpp @@ -432,36 +432,30 @@ namespace return std::make_tuple(min_index, max_index, written); } - template + template> + requires std::is_same_v || std::is_same_v std::tuple upload_untouched(std::span> src, std::span dst, rsx::primitive_type draw_mode, bool is_primitive_restart_enabled, u32 primitive_restart_index) { + if constexpr (std::is_same_v) + { + if (primitive_restart_index > 0xffff) + { + // Will never trip index restart, unpload untouched + is_primitive_restart_enabled = false; + } + } + if (!is_primitive_restart_enabled) { return untouched_impl::upload_untouched(src, dst); } - else if constexpr (std::is_same_v) + + if (is_primitive_disjointed(draw_mode)) { - if (primitive_restart_index > 0xffff) - { - return untouched_impl::upload_untouched(src, dst); - } - else if (is_primitive_disjointed(draw_mode)) - { - return upload_untouched_skip_restart(src, dst, static_cast(primitive_restart_index)); - } - else - { - return primitive_restart_impl::upload_untouched(src, dst, static_cast(primitive_restart_index)); - } - } - else if (is_primitive_disjointed(draw_mode)) - { - return upload_untouched_skip_restart(src, dst, primitive_restart_index); - } - else - { - return primitive_restart_impl::upload_untouched(src, dst, primitive_restart_index); + return upload_untouched_skip_restart(src, dst, static_cast(primitive_restart_index)); } + + return primitive_restart_impl::upload_untouched(src, dst, static_cast(primitive_restart_index)); } void iota16(u16* dst, u32 count) diff --git a/rpcs3/util/types.hpp b/rpcs3/util/types.hpp index 6979d9a887..2604215c37 100644 --- a/rpcs3/util/types.hpp +++ b/rpcs3/util/types.hpp @@ -214,6 +214,14 @@ using atomic_be_t = atomic_t, Align>; template using atomic_le_t = atomic_t, Align>; +// Primary template (handles non-be_t types) +template +struct remove_be { using type = T; }; +template +struct remove_be> { using type = T; }; +template +using remove_be_t = typename remove_be::type; + // Bool type equivalent class b8 {