diff --git a/rpcs3/Emu/RSX/NV47/FW/draw_call.cpp b/rpcs3/Emu/RSX/NV47/FW/draw_call.cpp index 8f06f413aa..d7533b245d 100644 --- a/rpcs3/Emu/RSX/NV47/FW/draw_call.cpp +++ b/rpcs3/Emu/RSX/NV47/FW/draw_call.cpp @@ -183,11 +183,11 @@ namespace rsx u32 draw_clause::execute_pipeline_dependencies(context* ctx, instanced_draw_config_t* instance_config) const { u32 result = 0u; - for (; - current_barrier_it != draw_command_barriers.end() && current_barrier_it->draw_id == current_range_index; - current_barrier_it++) + for (auto it = current_barrier_it; + it != draw_command_barriers.end() && it->draw_id == current_range_index; + it++) { - const auto& barrier = *current_barrier_it; + const auto& barrier = *it; switch (barrier.type) { case primitive_restart_barrier: diff --git a/rpcs3/Emu/RSX/NV47/FW/draw_call.hpp b/rpcs3/Emu/RSX/NV47/FW/draw_call.hpp index b9e808e5c1..7753f7b280 100644 --- a/rpcs3/Emu/RSX/NV47/FW/draw_call.hpp +++ b/rpcs3/Emu/RSX/NV47/FW/draw_call.hpp @@ -252,6 +252,12 @@ namespace rsx return false; } + // Advance barrier iterator so it always points to the current draw + for (; + current_barrier_it != draw_command_barriers.end() && + current_barrier_it->draw_id < current_range_index; + ++current_barrier_it); + if (draw_command_ranges[current_range_index].count == 0) { // Dangling execution barrier