From b8f50b6317fc2e6306fde2df77c3af7a9ebfd2a0 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 31 Jul 2025 14:38:37 -0400 Subject: [PATCH] nir: gather info in opt_varyings_bulk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the info is all messed up so we need to do this right after. merge this code. Signed-off-by: Alyssa Rosenzweig Reviewed-by: Marek Olšák Part-of: --- src/asahi/vulkan/hk_shader.c | 3 --- src/compiler/glsl/gl_nir_link_varyings.c | 1 - src/compiler/nir/nir_opt_varyings.c | 8 ++++++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/asahi/vulkan/hk_shader.c b/src/asahi/vulkan/hk_shader.c index 30537f30940..2f4c71774e7 100644 --- a/src/asahi/vulkan/hk_shader.c +++ b/src/asahi/vulkan/hk_shader.c @@ -1563,9 +1563,6 @@ hk_compile_shaders(struct vk_device *vk_dev, uint32_t shader_count, nir_opts); for (uint32_t i = 0; i < shader_count; i++) { - nir_shader_gather_info(infos[i].nir, - nir_shader_get_entrypoint(infos[i].nir)); - VkResult result = hk_compile_shader(dev, &infos[i], state, features, pAllocator, (struct hk_api_shader **)&shaders_out[i]); diff --git a/src/compiler/glsl/gl_nir_link_varyings.c b/src/compiler/glsl/gl_nir_link_varyings.c index 3ff618d43ab..163cc9d0ac2 100644 --- a/src/compiler/glsl/gl_nir_link_varyings.c +++ b/src/compiler/glsl/gl_nir_link_varyings.c @@ -4197,7 +4197,6 @@ link_varyings(struct gl_shader_program *prog, unsigned first, continue; nir_shader *nir = prog->_LinkedShaders[i]->Program->nir; - nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir)); if (i != first) { uint64_t inputs_read = nir->info.inputs_read; diff --git a/src/compiler/nir/nir_opt_varyings.c b/src/compiler/nir/nir_opt_varyings.c index 113863e1b30..3b9ef2e749f 100644 --- a/src/compiler/nir/nir_opt_varyings.c +++ b/src/compiler/nir/nir_opt_varyings.c @@ -5477,6 +5477,11 @@ nir_opt_varyings_bulk(nir_shader **shaders, uint32_t num_shaders, bool spirv, NIR_PASS(_, nir, nir_lower_io_to_scalar, nir_varying_var_mask(nir), NULL, NULL); NIR_PASS(_, nir, nir_opt_vectorize_io, nir_varying_var_mask(nir), false); + + /* Regather shader info so we have consistent behaviour for + * linked/unlinked code paths. Honeykrisp depends on this. + */ + nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir)); return; } @@ -5551,6 +5556,9 @@ nir_opt_varyings_bulk(nir_shader **shaders, uint32_t num_shaders, bool spirv, NIR_PASS(_, nir, nir_recompute_io_bases, nir_var_shader_in | nir_var_shader_out); + /* Regather shader info because the slots info is messed up now. */ + nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir)); + /* Regenerate transform feedback info because compaction in * nir_opt_varyings always moves them to other slots. */