diff --git a/src/intel/vulkan_hasvk/genX_cmd_buffer.c b/src/intel/vulkan_hasvk/genX_cmd_buffer.c index 204931b..61e1b97 100644 --- a/src/intel/vulkan_hasvk/genX_cmd_buffer.c +++ b/src/intel/vulkan_hasvk/genX_cmd_buffer.c @@ -4811,6 +4811,18 @@ void genX(CmdDispatchBase)( if (cmd_buffer->state.conditional_render_enabled) genX(cmd_emit_conditional_render_predicate)(cmd_buffer); + /* A dispatch with a zero group count is legal and defined to do nothing. + * GPGPU_WALKER has no encoding for "no groups at all" though, so passing + * zero through walks the full dimension and the command never retires: + * dEQP-VK.compute.pipeline.basic.empty_workgroup_* hangs rcs0 every time + * (GPU HANG ecode 7:1:8ff8ffff). Gen9+ uses COMPUTE_WALKER and handles + * this in hardware, which is why upstream anv carries no such guard. + */ + if (groupCountX == 0 || groupCountY == 0 || groupCountZ == 0) { + trace_intel_end_compute(&cmd_buffer->trace, 0, 0, 0, 0); + return; + } + emit_cs_walker(cmd_buffer, pipeline, false, prog_data, groupCountX, groupCountY, groupCountZ);