diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index ae2441a64a6..1dab0208b13 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -4904,6 +4904,15 @@ tu6_draw_common(struct tu_cmd_buffer *cmd, dynamic_draw_state_dirty = tu_emit_draw_state(cmd); } + /* Primitive restart value works in non-indexed draws, we have to disable + * prim restart for such draws since we may read stale restart index. + */ + if (cmd->state.last_draw_indexed != indexed) { + cmd->state.last_draw_indexed = indexed; + BITSET_SET(cmd->vk.dynamic_graphics_state.dirty, + MESA_VK_DYNAMIC_IA_PRIMITIVE_RESTART_ENABLE); + } + /* Fill draw stats for autotuner */ rp->drawcall_count++; diff --git a/src/freedreno/vulkan/tu_cmd_buffer.h b/src/freedreno/vulkan/tu_cmd_buffer.h index 274239db7be..0b2f412ccbd 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.h +++ b/src/freedreno/vulkan/tu_cmd_buffer.h @@ -513,6 +513,7 @@ struct tu_cmd_state struct tu_draw_state lrz_and_depth_plane_state; struct tu_vs_params last_vs_params; + bool last_draw_indexed; struct tu_tess_params tess_params;