From fed4afc5bba9455e857407e10a4dce79ca8dfe2d Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 11 Jan 2017 15:10:48 -0800 Subject: [PATCH] anv: Move nir_lower_wpos_center after dead variable elimination. When multiple shader stages exist in the same SPIR-V module, we compile all entry points and their inputs/outputs, then dead code eliminate the ones not related to the specific entry point later. nir_lower_wpos_center was being run prior to eliminating those random other variables, which made it trip up, thinking it found gl_FragCoord when it actually found something else like gl_PerVertex[3]. Fixes dEQP-VK.spirv_assembly.instruction.graphics.module.same_module. Signed-off-by: Kenneth Graunke Reviewed-by: Timothy Arceri Reviewed-by: Jason Ekstrand --- src/intel/vulkan/anv_pipeline.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 6c939b0..7d939eb 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -139,9 +139,6 @@ anv_shader_compile_to_nir(struct anv_device *device, free(spec_entries); - if (stage == MESA_SHADER_FRAGMENT) - NIR_PASS_V(nir, nir_lower_wpos_center); - /* We have to lower away local constant initializers right before we * inline functions. That way they get properly initialized at the top * of the function and not at the top of its caller. @@ -161,6 +158,9 @@ anv_shader_compile_to_nir(struct anv_device *device, NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_shader_in | nir_var_shader_out | nir_var_system_value); + if (stage == MESA_SHADER_FRAGMENT) + NIR_PASS_V(nir, nir_lower_wpos_center); + /* Now that we've deleted all but the main function, we can go ahead and * lower the rest of the constant initializers. */ -- 2.7.4