From bd93d6f69373cbc9dc5d32fbde1dd4a119a307c9 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 20 Jul 2022 13:45:45 -0500 Subject: [PATCH] vulkan/nir: Don't remove dead XFB outputs Fixes: 21b405fbbc53 ("vulkan: Add a vk_shader_module_to_nir() helper") Reviewed-By: Mike Blumenkrantz Reviewed-by: Lionel Landwerlin Part-of: --- src/vulkan/runtime/vk_nir.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/vulkan/runtime/vk_nir.c b/src/vulkan/runtime/vk_nir.c index 2d8a691f2b7..1474630e793 100644 --- a/src/vulkan/runtime/vk_nir.c +++ b/src/vulkan/runtime/vk_nir.c @@ -64,6 +64,16 @@ spirv_nir_debug(void *private_data, } } +static bool +is_not_xfb_output(nir_variable *var, void *data) +{ + if (var->data.mode != nir_var_shader_out) + return true; + + return !var->data.explicit_xfb_buffer && + !var->data.explicit_xfb_stride; +} + nir_shader * vk_spirv_to_nir(struct vk_device *device, const uint32_t *spirv_data, size_t spirv_size_B, @@ -127,10 +137,13 @@ vk_spirv_to_nir(struct vk_device *device, NIR_PASS_V(nir, nir_split_var_copies); NIR_PASS_V(nir, nir_split_per_member_structs); + nir_remove_dead_variables_options dead_vars_opts = { + .can_remove_var = is_not_xfb_output, + }; NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_shader_call_data | nir_var_ray_hit_attrib, - NULL); + &dead_vars_opts); /* This needs to happen after remove_dead_vars because GLSLang likes to * insert dead clip/cull vars and we don't want to clip/cull based on