From 182b20c33dd5aae53bb946044a6b80f6bcd7e91e Mon Sep 17 00:00:00 2001 From: kd-11 Date: Tue, 14 Jul 2020 00:25:55 +0300 Subject: [PATCH] rsx: Fix draw count append when draw ranges are out of order - It is common for draw counts to truncate at 256 even when it makes no sense to do so. - e.g 256 is not a multiple of 3 so triangles will glitch out --- rpcs3/Emu/RSX/rsx_methods.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/rsx_methods.h b/rpcs3/Emu/RSX/rsx_methods.h index 8750567c7f..e73b7cd933 100644 --- a/rpcs3/Emu/RSX/rsx_methods.h +++ b/rpcs3/Emu/RSX/rsx_methods.h @@ -88,6 +88,7 @@ namespace rsx // Add a new draw command void append_draw_command(const draw_range_t& range) { + current_range_index = draw_command_ranges.size(); draw_command_ranges.push_back(range); } @@ -97,6 +98,7 @@ namespace rsx auto range_It = draw_command_ranges.begin(); std::advance(range_It, index); + current_range_index = index; draw_command_ranges.insert(range_It, range); // Update all barrier draw ids after this one @@ -168,6 +170,9 @@ namespace rsx */ void compile() { + // End draw call append mode + current_range_index = ~0u; + // TODO } @@ -182,7 +187,7 @@ namespace rsx if (!draw_command_ranges.empty()) { - auto& last = draw_command_ranges.back(); + auto& last = draw_command_ranges[current_range_index]; if (last.count == 0) {