From 7af16e9f1ee7858e87609e4742646d16de0d7168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Thu, 8 Feb 2024 16:03:55 +0100 Subject: [PATCH] nir/shader_info: remove uses_demote MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This flag is mostly redundant with uses_discard and was only introduced to implement demote with LLVM when it didn't have that intrinsic. Reviewed-by: Marek Olšák Reviewed-by: Alyssa Rosenzweig Reviewed-by: Faith Ekstrand Part-of: --- src/amd/vulkan/radv_shader.c | 2 +- src/broadcom/compiler/nir_to_vir.c | 1 - src/compiler/nir/nir_gather_info.c | 3 --- src/compiler/nir/nir_print.c | 1 - src/compiler/shader_info.h | 1 - src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 3 ++- src/intel/compiler/brw_fs.cpp | 3 +-- src/intel/compiler/elk/elk_fs.cpp | 1 - src/nouveau/codegen/nv50_ir_from_nir.cpp | 2 +- src/panfrost/lib/pan_shader.c | 3 +-- 10 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 5a89ce537b6..63b81931a14 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -176,7 +176,7 @@ radv_optimize_nir(struct nir_shader *shader, bool optimize_conservatively) NIR_PASS(progress, shader, nir_remove_dead_variables, nir_var_function_temp | nir_var_shader_in | nir_var_shader_out | nir_var_mem_shared, NULL); - if (shader->info.stage == MESA_SHADER_FRAGMENT && (shader->info.fs.uses_discard || shader->info.fs.uses_demote)) { + if (shader->info.stage == MESA_SHADER_FRAGMENT && shader->info.fs.uses_discard) { NIR_PASS(progress, shader, nir_opt_conditional_discard); NIR_PASS(progress, shader, nir_opt_move_discards_to_top); } diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 738347aed08..6bf96752856 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1917,7 +1917,6 @@ emit_frag_end(struct v3d_compile *c) if (c->output_position_index == -1 && !(c->s->info.num_images || c->s->info.num_ssbos) && !c->s->info.fs.uses_discard && - !c->s->info.fs.uses_demote && !c->fs_key->sample_alpha_to_coverage && c->output_sample_mask_index == -1 && has_any_tlb_color_write) { diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index 6549a35ba4d..67b81689760 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -467,8 +467,6 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader, switch (instr->intrinsic) { case nir_intrinsic_demote: case nir_intrinsic_demote_if: - shader->info.fs.uses_demote = true; - FALLTHROUGH; /* quads with helper lanes only might be discarded entirely */ case nir_intrinsic_terminate: case nir_intrinsic_terminate_if: /* Freedreno uses discard_if() to end GS invocations that don't produce @@ -1002,7 +1000,6 @@ nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint) if (shader->info.stage == MESA_SHADER_FRAGMENT) { shader->info.fs.uses_sample_qualifier = false; shader->info.fs.uses_discard = false; - shader->info.fs.uses_demote = false; shader->info.fs.color_is_dual_source = false; shader->info.fs.uses_fbfetch_output = false; shader->info.fs.needs_quad_helper_invocations = false; diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index ce8867cf43c..71cd4e2b0a3 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -2561,7 +2561,6 @@ print_shader_info(const struct shader_info *info, FILE *fp) case MESA_SHADER_FRAGMENT: print_nz_bool(fp, "uses_discard", info->fs.uses_discard); - print_nz_bool(fp, "uses_demote", info->fs.uses_demote); print_nz_bool(fp, "uses_fbfetch_output", info->fs.uses_fbfetch_output); print_nz_bool(fp, "color_is_dual_source", info->fs.color_is_dual_source); diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index aa997ef16a3..6d4fdae0807 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -332,7 +332,6 @@ typedef struct shader_info { struct { bool uses_discard:1; - bool uses_demote:1; bool uses_fbfetch_output:1; bool fbfetch_coherent:1; bool color_is_dual_source:1; diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index 16e5ff89eb7..24eb535ee37 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -4421,7 +4421,8 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, const s case MESA_SHADER_FRAGMENT: if (s->info.fs.uses_sample_shading) spirv_builder_emit_cap(&ctx.builder, SpvCapabilitySampleRateShading); - if (s->info.fs.uses_demote && spirv_version < SPIRV_VERSION(1, 6)) + if (s->info.fs.uses_discard && spirv_version < SPIRV_VERSION(1, 6) && + screen->info.have_EXT_shader_demote_to_helper_invocation) spirv_builder_emit_extension(&ctx.builder, "SPV_EXT_demote_to_helper_invocation"); break; diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index e19860c434f..a0c9d8d07fe 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -3644,8 +3644,7 @@ brw_nir_populate_wm_prog_data(nir_shader *shader, struct brw_wm_prog_data *prog_data, const struct brw_mue_map *mue_map) { - prog_data->uses_kill = shader->info.fs.uses_discard || - shader->info.fs.uses_demote; + prog_data->uses_kill = shader->info.fs.uses_discard; prog_data->uses_omask = !key->ignore_sample_mask_out && (shader->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK)); prog_data->max_polygons = 1; diff --git a/src/intel/compiler/elk/elk_fs.cpp b/src/intel/compiler/elk/elk_fs.cpp index a1ae1eafc3a..4dcd263cf8a 100644 --- a/src/intel/compiler/elk/elk_fs.cpp +++ b/src/intel/compiler/elk/elk_fs.cpp @@ -6450,7 +6450,6 @@ elk_nir_populate_wm_prog_data(nir_shader *shader, * so the shader definitely kills pixels. */ prog_data->uses_kill = shader->info.fs.uses_discard || - shader->info.fs.uses_demote || key->emit_alpha_test; prog_data->uses_omask = !key->ignore_sample_mask_out && (shader->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK)); diff --git a/src/nouveau/codegen/nv50_ir_from_nir.cpp b/src/nouveau/codegen/nv50_ir_from_nir.cpp index 51942407fee..dd028311258 100644 --- a/src/nouveau/codegen/nv50_ir_from_nir.cpp +++ b/src/nouveau/codegen/nv50_ir_from_nir.cpp @@ -1322,7 +1322,7 @@ Converter::parseNIR() info_out->prop.fp.postDepthCoverage = nir->info.fs.post_depth_coverage; info_out->prop.fp.readsSampleLocations = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_SAMPLE_POS); - info_out->prop.fp.usesDiscard = nir->info.fs.uses_discard || nir->info.fs.uses_demote; + info_out->prop.fp.usesDiscard = nir->info.fs.uses_discard; info_out->prop.fp.usesSampleMaskIn = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_SAMPLE_MASK_IN); break; diff --git a/src/panfrost/lib/pan_shader.c b/src/panfrost/lib/pan_shader.c index 7e1c5ed2878..c168da84e8c 100644 --- a/src/panfrost/lib/pan_shader.c +++ b/src/panfrost/lib/pan_shader.c @@ -167,8 +167,7 @@ GENX(pan_shader_compile)(nir_shader *s, struct panfrost_compile_inputs *inputs, /* List of reasons we need to execute frag shaders when things * are masked off */ - info->fs.sidefx = s->info.writes_memory || s->info.fs.uses_discard || - s->info.fs.uses_demote; + info->fs.sidefx = s->info.writes_memory || s->info.fs.uses_discard; /* With suitable ZSA/blend, is early-z possible? */ info->fs.can_early_z = !info->fs.sidefx && !info->fs.writes_depth &&