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
This commit is contained in:
kd-11 2020-07-14 00:25:55 +03:00 committed by kd-11
parent 58e2465369
commit 182b20c33d

View File

@ -88,6 +88,7 @@ namespace rsx
// Add a new draw command // Add a new draw command
void append_draw_command(const draw_range_t& range) void append_draw_command(const draw_range_t& range)
{ {
current_range_index = draw_command_ranges.size();
draw_command_ranges.push_back(range); draw_command_ranges.push_back(range);
} }
@ -97,6 +98,7 @@ namespace rsx
auto range_It = draw_command_ranges.begin(); auto range_It = draw_command_ranges.begin();
std::advance(range_It, index); std::advance(range_It, index);
current_range_index = index;
draw_command_ranges.insert(range_It, range); draw_command_ranges.insert(range_It, range);
// Update all barrier draw ids after this one // Update all barrier draw ids after this one
@ -168,6 +170,9 @@ namespace rsx
*/ */
void compile() void compile()
{ {
// End draw call append mode
current_range_index = ~0u;
// TODO // TODO
} }
@ -182,7 +187,7 @@ namespace rsx
if (!draw_command_ranges.empty()) if (!draw_command_ranges.empty())
{ {
auto& last = draw_command_ranges.back(); auto& last = draw_command_ranges[current_range_index];
if (last.count == 0) if (last.count == 0)
{ {