Module: Mesa Branch: main Commit: 085828ea4dc029a4850fa64c47335f393b5c1c60 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=085828ea4dc029a4850fa64c47335f393b5c1c60
Author: Rhys Perry <[email protected]> Date: Wed Nov 9 16:22:27 2022 +0000 vtn: add mesh output and task_payload to vtn_mode_is_cross_invocation This fixes a potential race condition, and removes output loads (which should not exist in the EXT_mesh_shader). Signed-off-by: Rhys Perry <[email protected]> Reviewed-by: Timur Kristóf <[email protected]> Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7391 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19597> --- src/compiler/spirv/vtn_variables.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index b536ae29ab7..9665d44fecd 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -179,12 +179,16 @@ static bool vtn_mode_is_cross_invocation(struct vtn_builder *b, enum vtn_variable_mode mode) { + /* TODO: add TCS here once nir_remove_unused_io_vars() can handle vector indexing. */ + bool cross_invocation_outputs = b->shader->info.stage == MESA_SHADER_MESH; return mode == vtn_variable_mode_ssbo || mode == vtn_variable_mode_ubo || mode == vtn_variable_mode_phys_ssbo || mode == vtn_variable_mode_push_constant || mode == vtn_variable_mode_workgroup || - mode == vtn_variable_mode_cross_workgroup; + mode == vtn_variable_mode_cross_workgroup || + (cross_invocation_outputs && mode == vtn_variable_mode_output) || + (b->shader->info.stage == MESA_SHADER_TASK && mode == vtn_variable_mode_task_payload); } static bool
