From 04dbf709edf069bc720d941fab27c53269336bcf Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Thu, 28 May 2020 10:59:28 +1000 Subject: [PATCH] nir: add callback to nir_remove_dead_variables() This allows us to do API specific checks before removing variable without filling nir_remove_dead_variables() with API specific code. In the following patches we will use this to support the removal of dead uniforms in GLSL. Reviewed-by: Kenneth Graunke Reviewed-by: Eric Anholt Part-of: --- src/amd/vulkan/radv_pipeline.c | 4 +- src/amd/vulkan/radv_shader.c | 8 ++-- src/broadcom/compiler/vir.c | 4 +- src/compiler/nir/nir.h | 3 +- src/compiler/nir/nir_remove_dead_variables.c | 48 +++++++++++++------ src/compiler/spirv/spirv_to_nir.c | 2 +- src/freedreno/ir3/ir3_nir.c | 2 +- src/freedreno/vulkan/tu_shader.c | 3 +- src/gallium/auxiliary/gallivm/lp_bld_nir.c | 2 +- .../drivers/etnaviv/etnaviv_compiler_nir.c | 2 +- src/gallium/drivers/freedreno/a2xx/ir2_nir.c | 2 +- src/gallium/drivers/lima/lima_program.c | 4 +- .../nouveau/codegen/nv50_ir_from_nir.cpp | 2 +- src/gallium/drivers/r600/sfn/sfn_nir.cpp | 4 +- src/gallium/drivers/radeonsi/si_shader_nir.c | 2 +- src/gallium/drivers/v3d/v3d_program.c | 2 +- src/gallium/drivers/vc4/vc4_program.c | 2 +- src/gallium/drivers/zink/zink_compiler.c | 2 +- src/intel/blorp/blorp.c | 2 +- src/intel/compiler/brw_nir.c | 6 +-- src/intel/vulkan/anv_pipeline.c | 3 +- src/mesa/drivers/dri/i965/brw_program.c | 3 +- src/mesa/state_tracker/st_glsl_to_nir.cpp | 17 ++++--- 23 files changed, 78 insertions(+), 51 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 738a9b1372d..c51726f2bed 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2230,9 +2230,9 @@ radv_link_shaders(struct radv_pipeline *pipeline, nir_shader **shaders) radv_optimize_nir(ordered_shaders[i - 1], false, false); nir_remove_dead_variables(ordered_shaders[i], - nir_var_shader_out); + nir_var_shader_out, NULL); nir_remove_dead_variables(ordered_shaders[i - 1], - nir_var_shader_in); + nir_var_shader_in, NULL); bool progress = nir_remove_unused_varyings(ordered_shaders[i], ordered_shaders[i - 1]); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index b12b9f10d90..a23af0f7f9f 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -226,7 +226,8 @@ radv_optimize_nir(struct nir_shader *shader, bool optimize_conservatively, NIR_PASS(progress, shader, nir_opt_copy_prop_vars); NIR_PASS(progress, shader, nir_opt_dead_write_vars); NIR_PASS(progress, shader, nir_remove_dead_variables, - nir_var_function_temp | nir_var_shader_in | nir_var_shader_out); + nir_var_function_temp | nir_var_shader_in | nir_var_shader_out, + NULL); NIR_PASS_V(shader, nir_lower_alu_to_scalar, NULL, NULL); NIR_PASS_V(shader, nir_lower_phis_to_scalar); @@ -458,7 +459,8 @@ radv_shader_compile_to_nir(struct radv_device *device, NIR_PASS_V(nir, nir_lower_input_attachments, true); NIR_PASS_V(nir, nir_remove_dead_variables, - nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_mem_shared); + nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_mem_shared, + NULL); NIR_PASS_V(nir, nir_propagate_invariant); @@ -499,7 +501,7 @@ radv_shader_compile_to_nir(struct radv_device *device, nir_split_var_copies(nir); nir_lower_global_vars_to_local(nir); - nir_remove_dead_variables(nir, nir_var_function_temp); + nir_remove_dead_variables(nir, nir_var_function_temp, NULL); bool gfx7minus = device->physical_device->rad_info.chip_class <= GFX7; nir_lower_subgroups(nir, &(struct nir_lower_subgroups_options) { .subgroup_size = subgroup_size, diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 34f7773f066..adfd587d534 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -808,7 +808,7 @@ v3d_nir_lower_vs_early(struct v3d_compile *c) &c->s->outputs, used_outputs, NULL); /* demotes to globals */ NIR_PASS_V(c->s, nir_lower_global_vars_to_local); v3d_optimize_nir(c->s); - NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in); + NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in, NULL); /* This must go before nir_lower_io */ if (c->vs_key->per_vertex_point_size) @@ -839,7 +839,7 @@ v3d_nir_lower_gs_early(struct v3d_compile *c) &c->s->outputs, used_outputs, NULL); /* demotes to globals */ NIR_PASS_V(c->s, nir_lower_global_vars_to_local); v3d_optimize_nir(c->s); - NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in); + NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in, NULL); /* This must go before nir_lower_io */ if (c->gs_key->per_vertex_point_size) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 9bf39969895..79973655f26 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -4083,7 +4083,8 @@ bool nir_lower_vars_to_ssa(nir_shader *shader); bool nir_remove_dead_derefs(nir_shader *shader); bool nir_remove_dead_derefs_impl(nir_function_impl *impl); -bool nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes); +bool nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes, + bool (*can_remove_var)(nir_variable *var)); bool nir_lower_variable_initializers(nir_shader *shader, nir_variable_mode modes); diff --git a/src/compiler/nir/nir_remove_dead_variables.c b/src/compiler/nir/nir_remove_dead_variables.c index cfdd1796299..4fbe035c024 100644 --- a/src/compiler/nir/nir_remove_dead_variables.c +++ b/src/compiler/nir/nir_remove_dead_variables.c @@ -143,11 +143,15 @@ remove_dead_var_writes(nir_shader *shader, struct set *live) } static bool -remove_dead_vars(struct exec_list *var_list, struct set *live) +remove_dead_vars(struct exec_list *var_list, struct set *live, + bool (*can_remove_var)(nir_variable *var)) { bool progress = false; foreach_list_typed_safe(nir_variable, var, node, var_list) { + if (can_remove_var && !can_remove_var(var)) + continue; + struct set_entry *entry = _mesa_set_search(live, var); if (entry == NULL) { /* Mark this variable as used by setting the mode to 0 */ @@ -161,35 +165,49 @@ remove_dead_vars(struct exec_list *var_list, struct set *live) } bool -nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes) +nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes, + bool (*can_remove_var)(nir_variable *var)) { bool progress = false; struct set *live = _mesa_pointer_set_create(NULL); add_var_use_shader(shader, live, modes); - if (modes & nir_var_uniform) - progress = remove_dead_vars(&shader->uniforms, live) || progress; + if (modes & nir_var_uniform) { + progress = remove_dead_vars(&shader->uniforms, live, can_remove_var) || + progress; + } - if (modes & nir_var_shader_in) - progress = remove_dead_vars(&shader->inputs, live) || progress; + if (modes & nir_var_shader_in) { + progress = remove_dead_vars(&shader->inputs, live, can_remove_var) || + progress; + } - if (modes & nir_var_shader_out) - progress = remove_dead_vars(&shader->outputs, live) || progress; + if (modes & nir_var_shader_out) { + progress = remove_dead_vars(&shader->outputs, live, can_remove_var) || + progress; + } - if (modes & nir_var_shader_temp) - progress = remove_dead_vars(&shader->globals, live) || progress; + if (modes & nir_var_shader_temp) { + progress = remove_dead_vars(&shader->globals, live, can_remove_var) || + progress; + } - if (modes & nir_var_system_value) - progress = remove_dead_vars(&shader->system_values, live) || progress; + if (modes & nir_var_system_value) { + progress = remove_dead_vars(&shader->system_values, live, + can_remove_var) || progress; + } - if (modes & nir_var_mem_shared) - progress = remove_dead_vars(&shader->shared, live) || progress; + if (modes & nir_var_mem_shared) { + progress = remove_dead_vars(&shader->shared, live, can_remove_var) || + progress; + } if (modes & nir_var_function_temp) { nir_foreach_function(function, shader) { if (function->impl) { - if (remove_dead_vars(&function->impl->locals, live)) + if (remove_dead_vars(&function->impl->locals, live, + can_remove_var)) progress = true; } } diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 425fbcbbe72..7bb9489aaeb 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -5324,7 +5324,7 @@ spirv_to_nir(const uint32_t *words, size_t word_count, */ nir_lower_variable_initializers(b->shader, nir_var_shader_out); nir_remove_dead_variables(b->shader, - nir_var_shader_in | nir_var_shader_out); + nir_var_shader_in | nir_var_shader_out, NULL); /* We sometimes generate bogus derefs that, while never used, give the * validator a bit of heartburn. Run dead code to get rid of them. diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c index 48dc9a340ab..148186050bf 100644 --- a/src/freedreno/ir3/ir3_nir.c +++ b/src/freedreno/ir3/ir3_nir.c @@ -352,7 +352,7 @@ ir3_optimize_nir(struct ir3_shader *shader, nir_shader *s, OPT_V(s, nir_opt_cse); } - OPT_V(s, nir_remove_dead_variables, nir_var_function_temp); + OPT_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL); OPT_V(s, nir_opt_sink, nir_move_const_undef); diff --git a/src/freedreno/vulkan/tu_shader.c b/src/freedreno/vulkan/tu_shader.c index af0415e0efd..29ac80bc48d 100644 --- a/src/freedreno/vulkan/tu_shader.c +++ b/src/freedreno/vulkan/tu_shader.c @@ -590,7 +590,8 @@ tu_shader_create(struct tu_device *dev, NIR_PASS_V(nir, nir_split_per_member_structs); NIR_PASS_V(nir, nir_remove_dead_variables, - nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_mem_shared); + nir_var_shader_in | nir_var_shader_out | nir_var_system_value | nir_var_mem_shared, + NULL); /* Gather information for transform feedback. * This should be called after nir_split_per_member_structs. diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir.c b/src/gallium/auxiliary/gallivm/lp_bld_nir.c index 93234ac37b2..d78aab2ef27 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir.c @@ -1909,7 +1909,7 @@ bool lp_build_nir_llvm( nir_convert_from_ssa(nir, true); nir_lower_locals_to_regs(nir); nir_remove_dead_derefs(nir); - nir_remove_dead_variables(nir, nir_var_function_temp); + nir_remove_dead_variables(nir, nir_var_function_temp, NULL); nir_foreach_variable(variable, &nir->outputs) handle_shader_output_decl(bld_base, nir, variable); diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c index c731067f542..4542f429ddc 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c @@ -839,7 +839,7 @@ etna_compile_shader_nir(struct etna_shader_variant *v) while( OPT(s, nir_opt_vectorize) ); OPT_V(s, nir_lower_alu_to_scalar, etna_alu_to_scalar_filter_cb, specs); - NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp); + NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL); NIR_PASS_V(s, nir_opt_algebraic_late); NIR_PASS_V(s, nir_move_vec_src_uses_to_dest); diff --git a/src/gallium/drivers/freedreno/a2xx/ir2_nir.c b/src/gallium/drivers/freedreno/a2xx/ir2_nir.c index 53a3c0a6649..44e53afaa3c 100644 --- a/src/gallium/drivers/freedreno/a2xx/ir2_nir.c +++ b/src/gallium/drivers/freedreno/a2xx/ir2_nir.c @@ -122,7 +122,7 @@ ir2_optimize_nir(nir_shader *s, bool lower) ir2_optimize_loop(s); - OPT_V(s, nir_remove_dead_variables, nir_var_function_temp); + OPT_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL); OPT_V(s, nir_opt_sink, nir_move_const_undef); /* TODO we dont want to get shaders writing to depth for depth textures */ diff --git a/src/gallium/drivers/lima/lima_program.c b/src/gallium/drivers/lima/lima_program.c index 2537e770ef9..0d942d47126 100644 --- a/src/gallium/drivers/lima/lima_program.c +++ b/src/gallium/drivers/lima/lima_program.c @@ -138,7 +138,7 @@ lima_program_optimize_vs_nir(struct nir_shader *s) NIR_PASS_V(s, nir_opt_dce); NIR_PASS_V(s, nir_lower_locals_to_regs); NIR_PASS_V(s, nir_convert_from_ssa, true); - NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp); + NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL); nir_sweep(s); } @@ -243,7 +243,7 @@ lima_program_optimize_fs_nir(struct nir_shader *s, NIR_PASS_V(s, nir_lower_locals_to_regs); NIR_PASS_V(s, nir_convert_from_ssa, true); - NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp); + NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL); NIR_PASS_V(s, nir_move_vec_src_uses_to_dest); NIR_PASS_V(s, nir_lower_vec_to_movs); diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp index bd78b76f384..50c8345e4b6 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp @@ -3239,7 +3239,7 @@ Converter::run() NIR_PASS_V(nir, nir_lower_bool_to_int32); NIR_PASS_V(nir, nir_lower_locals_to_regs); - NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp); + NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL); NIR_PASS_V(nir, nir_convert_from_ssa, true); // Garbage collect dead instructions diff --git a/src/gallium/drivers/r600/sfn/sfn_nir.cpp b/src/gallium/drivers/r600/sfn/sfn_nir.cpp index 3f8badf6fc3..571498a8f4b 100644 --- a/src/gallium/drivers/r600/sfn/sfn_nir.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_nir.cpp @@ -635,8 +635,8 @@ int r600_shader_from_nir(struct r600_context *rctx, if (optimize) while(optimize_once(sel->nir)); - NIR_PASS_V(sel->nir, nir_remove_dead_variables, nir_var_shader_in); - NIR_PASS_V(sel->nir, nir_remove_dead_variables, nir_var_shader_out); + NIR_PASS_V(sel->nir, nir_remove_dead_variables, nir_var_shader_in, NULL); + NIR_PASS_V(sel->nir, nir_remove_dead_variables, nir_var_shader_out, NULL); NIR_PASS_V(sel->nir, nir_lower_vars_to_scratch, diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 6b8bea1c11c..7ce107e1b0f 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -934,7 +934,7 @@ static void si_lower_nir(struct si_screen *sscreen, struct nir_shader *nir) si_nir_opts(nir); NIR_PASS_V(nir, nir_lower_bool_to_int32); - NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp); + NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL); if (sscreen->debug_flags & DBG(FS_CORRECT_DERIVS_AFTER_KILL)) NIR_PASS_V(nir, nir_lower_discard_to_demote); diff --git a/src/gallium/drivers/v3d/v3d_program.c b/src/gallium/drivers/v3d/v3d_program.c index ad6a796866a..dbe3c7b4454 100644 --- a/src/gallium/drivers/v3d/v3d_program.c +++ b/src/gallium/drivers/v3d/v3d_program.c @@ -322,7 +322,7 @@ v3d_uncompiled_shader_create(struct pipe_context *pctx, v3d_optimize_nir(s); - NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp); + NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL); /* Garbage collect dead instructions */ nir_sweep(s); diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index 66a095e1216..2d16c479313 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -2482,7 +2482,7 @@ vc4_shader_state_create(struct pipe_context *pctx, vc4_optimize_nir(s); - NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp); + NIR_PASS_V(s, nir_remove_dead_variables, nir_var_function_temp, NULL); /* Garbage collect dead instructions */ nir_sweep(s); diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 98ef706fb8f..d3efcb987a6 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -140,7 +140,7 @@ zink_compile_nir(struct zink_screen *screen, struct nir_shader *nir) NIR_PASS_V(nir, nir_lower_clip_halfz); NIR_PASS_V(nir, nir_lower_regs_to_ssa); optimize_nir(nir); - NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp); + NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL); NIR_PASS_V(nir, lower_discard_if); NIR_PASS_V(nir, nir_convert_from_ssa, true); diff --git a/src/intel/blorp/blorp.c b/src/intel/blorp/blorp.c index d60d75e16c6..c3181a19e6c 100644 --- a/src/intel/blorp/blorp.c +++ b/src/intel/blorp/blorp.c @@ -191,7 +191,7 @@ blorp_compile_fs(struct blorp_context *blorp, void *mem_ctx, wm_prog_data->base.binding_table.texture_start = BLORP_TEXTURE_BT_INDEX; brw_preprocess_nir(compiler, nir, NULL); - nir_remove_dead_variables(nir, nir_var_shader_in); + nir_remove_dead_variables(nir, nir_var_shader_in, NULL); nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir)); if (blorp->compiler->devinfo->gen < 6) { diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c index 7a1fea10aa2..ff1b3bf5572 100644 --- a/src/intel/compiler/brw_nir.c +++ b/src/intel/compiler/brw_nir.c @@ -597,7 +597,7 @@ brw_nir_optimize(nir_shader *nir, const struct brw_compiler *compiler, /* Workaround Gfxbench unused local sampler variable which will trigger an * assert in the opt_large_constants pass. */ - OPT(nir_remove_dead_variables, nir_var_function_temp); + OPT(nir_remove_dead_variables, nir_var_function_temp, NULL); } static unsigned @@ -785,8 +785,8 @@ brw_nir_link_shaders(const struct brw_compiler *compiler, if (nir_link_opt_varyings(producer, consumer)) brw_nir_optimize(consumer, compiler, c_is_scalar, false); - NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out); - NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in); + NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, NULL); + NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, NULL); if (nir_remove_unused_varyings(producer, consumer)) { NIR_PASS_V(producer, nir_lower_global_vars_to_local); diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index bd2d1884d7a..62a0c5a0b16 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -282,7 +282,8 @@ anv_shader_compile_to_nir(struct anv_device *device, NIR_PASS_V(nir, nir_split_per_member_structs); NIR_PASS_V(nir, nir_remove_dead_variables, - nir_var_shader_in | nir_var_shader_out | nir_var_system_value); + nir_var_shader_in | nir_var_shader_out | nir_var_system_value, + NULL); NIR_PASS_V(nir, nir_propagate_invariant); NIR_PASS_V(nir, nir_lower_io_to_temporaries, diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c index be4347881f2..cbb5b312efd 100644 --- a/src/mesa/drivers/dri/i965/brw_program.c +++ b/src/mesa/drivers/dri/i965/brw_program.c @@ -106,7 +106,8 @@ brw_create_nir(struct brw_context *brw, } assert (nir); - nir_remove_dead_variables(nir, nir_var_shader_in | nir_var_shader_out); + nir_remove_dead_variables(nir, nir_var_shader_in | nir_var_shader_out, + NULL); nir_validate_shader(nir, "after glsl_to_nir or spirv_to_nir"); NIR_PASS_V(nir, nir_lower_io_to_temporaries, nir_shader_get_entrypoint(nir), true, false); diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index d7277f7f5c5..b99e8339ae0 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -260,7 +260,8 @@ st_nir_opts(nir_shader *nir) NIR_PASS(progress, nir, nir_remove_dead_variables, (nir_variable_mode)(nir_var_function_temp | nir_var_shader_temp | - nir_var_mem_shared)); + nir_var_mem_shared), + NULL); NIR_PASS(progress, nir, nir_opt_copy_prop_vars); NIR_PASS(progress, nir, nir_opt_dead_write_vars); @@ -378,7 +379,7 @@ st_nir_preprocess(struct st_context *st, struct gl_program *prog, if (!_mesa_is_gles(st->ctx) || !nir->info.separate_shader) { nir_variable_mode mask = (nir_variable_mode) (nir_var_shader_in | nir_var_shader_out); - nir_remove_dead_variables(nir, mask); + nir_remove_dead_variables(nir, mask, NULL); } if (options->lower_all_io_to_temps || @@ -503,7 +504,7 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct gl_program *prog, nir_variable_mode mask = (nir_variable_mode) (nir_var_shader_in | nir_var_shader_out | nir_var_function_temp ); - nir_remove_dead_variables(nir, mask); + nir_remove_dead_variables(nir, mask, NULL); if (!st->has_hw_atomics) NIR_PASS_V(nir, nir_lower_atomics_to_ssbo); @@ -561,8 +562,8 @@ st_nir_link_shaders(nir_shader *producer, nir_shader *consumer) if (nir_link_opt_varyings(producer, consumer)) st_nir_opts(consumer); - NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out); - NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in); + NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, NULL); + NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, NULL); if (nir_remove_unused_varyings(producer, consumer)) { NIR_PASS_V(producer, nir_lower_global_vars_to_local); @@ -575,8 +576,10 @@ st_nir_link_shaders(nir_shader *producer, nir_shader *consumer) * nir_compact_varyings() depends on all dead varyings being removed so * we need to call nir_remove_dead_variables() again here. */ - NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out); - NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in); + NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, + NULL); + NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, + NULL); } } -- 2.30.2