From b63f866c84fc3389398f33794958f75222e7a03d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 25 Apr 2026 14:25:04 -0400 Subject: [PATCH] radeonsi: remove dead get_frag_coord_from_pixel_coord optimization It's applied unconditionally by ac_nir_lower_ps_early. It was probably replaced by that at some point. Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/amd/compiler/aco_shader_info.h | 2 -- .../aco_select_ps_prolog.cpp | 27 ------------------- src/gallium/drivers/radeonsi/gfx/si_shader.c | 7 +---- src/gallium/drivers/radeonsi/gfx/si_shader.h | 2 -- .../drivers/radeonsi/gfx/si_shader_aco.c | 2 -- .../drivers/radeonsi/gfx/si_shader_binary.c | 2 -- .../drivers/radeonsi/gfx/si_shader_info.c | 4 --- .../drivers/radeonsi/gfx/si_shader_info.h | 4 --- .../drivers/radeonsi/gfx/si_shader_llvm_ps.c | 22 --------------- .../radeonsi/gfx/si_shader_variant_info.c | 6 ----- .../drivers/radeonsi/gfx/si_state_shaders.cpp | 4 --- 11 files changed, 1 insertion(+), 81 deletions(-) diff --git a/src/amd/compiler/aco_shader_info.h b/src/amd/compiler/aco_shader_info.h index 1b49f38134b..ed1325fad26 100644 --- a/src/amd/compiler/aco_shader_info.h +++ b/src/amd/compiler/aco_shader_info.h @@ -93,8 +93,6 @@ struct aco_ps_prolog_info { bool force_linear_center_interp; unsigned samplemask_log_ps_iter; - bool get_frag_coord_from_pixel_coord; - bool pixel_center_integer; bool force_samplemask_to_helper_invocation; unsigned num_interp_inputs; unsigned colors_read; diff --git a/src/amd/compiler/instruction_selection/aco_select_ps_prolog.cpp b/src/amd/compiler/instruction_selection/aco_select_ps_prolog.cpp index 77808479a71..a64a9bc1dc5 100644 --- a/src/amd/compiler/instruction_selection/aco_select_ps_prolog.cpp +++ b/src/amd/compiler/instruction_selection/aco_select_ps_prolog.cpp @@ -167,32 +167,6 @@ overwrite_samplemask_arg(isel_context* ctx, const struct aco_ps_prolog_info* fin is_helper_invoc); } } -void -overwrite_pos_xy_args(isel_context* ctx, const struct aco_ps_prolog_info* finfo) -{ - if (!finfo->get_frag_coord_from_pixel_coord) - return; - - Builder bld(ctx->program, ctx->block); - Temp pos_fixed_pt = get_arg(ctx, ctx->args->pos_fixed_pt); - - for (unsigned i = 0; i < 2; i++) { - if (!ctx->args->frag_pos[i].used) - continue; - - Temp t; - if (i) - t = bld.vop2(aco_opcode::v_lshrrev_b32, bld.def(v1), Operand::c32(16), pos_fixed_pt); - else - t = bld.vop2(aco_opcode::v_and_b32, bld.def(v1), Operand::c32(0xffff), pos_fixed_pt); - - t = bld.vop1(aco_opcode::v_cvt_f32_u32, bld.def(v1), t); - if (!finfo->pixel_center_integer) - t = bld.vop2(aco_opcode::v_add_f32, bld.def(v1), Operand::c32(0x3f000000 /*0.5*/), t); - - ctx->arg_temps[ctx->args->frag_pos[i].arg_index] = t; - } -} void passthrough_all_args(isel_context* ctx, std::vector& regs) @@ -297,7 +271,6 @@ select_ps_prolog(Program* program, void* pinfo, ac_shader_config* config, overwrite_interp_args(&ctx, finfo); overwrite_samplemask_arg(&ctx, finfo); - overwrite_pos_xy_args(&ctx, finfo); std::vector regs; passthrough_all_args(&ctx, regs); diff --git a/src/gallium/drivers/radeonsi/gfx/si_shader.c b/src/gallium/drivers/radeonsi/gfx/si_shader.c index c9e3bee389d..c9cba65ee90 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_shader.c +++ b/src/gallium/drivers/radeonsi/gfx/si_shader.c @@ -856,8 +856,7 @@ static void si_preprocess_nir(struct si_nir_shader_ctx *ctx) .ps_iter_samples = key->ps.part.prolog.samplemask_log_ps_iter ? (1 << key->ps.part.prolog.samplemask_log_ps_iter) : (key->ps.part.prolog.force_persp_sample_interp || - key->ps.part.prolog.force_linear_sample_interp ? 2 : - (key->ps.part.prolog.get_frag_coord_from_pixel_coord ? 1 : 0)), + key->ps.part.prolog.force_linear_sample_interp ? 2 : 0), .fbfetch_is_1D = key->ps.mono.fbfetch_is_1D, .fbfetch_layered = key->ps.mono.fbfetch_layered, @@ -1742,15 +1741,12 @@ static void si_get_ps_prolog_key(struct si_shader *shader, union si_shader_part_ key->ps_prolog.states.force_linear_center_interp || key->ps_prolog.states.bc_optimize_for_persp || key->ps_prolog.states.bc_optimize_for_linear || key->ps_prolog.states.samplemask_log_ps_iter || - key->ps_prolog.states.get_frag_coord_from_pixel_coord || key->ps_prolog.states.force_samplemask_to_helper_invocation); key->ps_prolog.fragcoord_usage_mask = G_0286CC_POS_X_FLOAT_ENA(shader->config.spi_ps_input_ena) | (G_0286CC_POS_Y_FLOAT_ENA(shader->config.spi_ps_input_ena) << 1) | (G_0286CC_POS_Z_FLOAT_ENA(shader->config.spi_ps_input_ena) << 2) | (G_0286CC_POS_W_FLOAT_ENA(shader->config.spi_ps_input_ena) << 3); - key->ps_prolog.pixel_center_integer = key->ps_prolog.fragcoord_usage_mask && - shader->selector->info.base.fs.pixel_center_integer; if (shader->key.ps.part.prolog.poly_stipple) shader->info.uses_vmem_load_other = true; @@ -1852,7 +1848,6 @@ static bool si_need_ps_prolog(const union si_shader_part_key *key) key->ps_prolog.states.bc_optimize_for_persp || key->ps_prolog.states.bc_optimize_for_linear || key->ps_prolog.states.poly_stipple || key->ps_prolog.states.samplemask_log_ps_iter || - key->ps_prolog.states.get_frag_coord_from_pixel_coord || key->ps_prolog.states.force_samplemask_to_helper_invocation; } diff --git a/src/gallium/drivers/radeonsi/gfx/si_shader.h b/src/gallium/drivers/radeonsi/gfx/si_shader.h index 1d84990c6a2..7aa94fc3db9 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_shader.h +++ b/src/gallium/drivers/radeonsi/gfx/si_shader.h @@ -536,7 +536,6 @@ struct si_ps_prolog_bits { unsigned bc_optimize_for_persp : 1; unsigned bc_optimize_for_linear : 1; unsigned samplemask_log_ps_iter : 2; - unsigned get_frag_coord_from_pixel_coord : 1; unsigned force_samplemask_to_helper_invocation : 1; }; @@ -566,7 +565,6 @@ union si_shader_part_key { unsigned colors_read : 8; /* color input components read */ unsigned num_interp_inputs : 5; /* BCOLOR is at this location */ unsigned fragcoord_usage_mask : 4; - unsigned pixel_center_integer : 1; unsigned wqm : 1; uint8_t color_attr_index[2]; uint8_t color_interp[2]; /* AC_COLOR_INTERP_* */ diff --git a/src/gallium/drivers/radeonsi/gfx/si_shader_aco.c b/src/gallium/drivers/radeonsi/gfx/si_shader_aco.c index bddc2d84cb6..ff11d4773ea 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_shader_aco.c +++ b/src/gallium/drivers/radeonsi/gfx/si_shader_aco.c @@ -255,8 +255,6 @@ si_aco_build_ps_prolog(struct aco_compiler_options *options, .force_linear_center_interp = key->ps_prolog.states.force_linear_center_interp, .samplemask_log_ps_iter = key->ps_prolog.states.samplemask_log_ps_iter, - .get_frag_coord_from_pixel_coord = key->ps_prolog.states.get_frag_coord_from_pixel_coord, - .pixel_center_integer = key->ps_prolog.pixel_center_integer, .force_samplemask_to_helper_invocation = key->ps_prolog.states.force_samplemask_to_helper_invocation, .num_interp_inputs = key->ps_prolog.num_interp_inputs, .colors_read = key->ps_prolog.colors_read, diff --git a/src/gallium/drivers/radeonsi/gfx/si_shader_binary.c b/src/gallium/drivers/radeonsi/gfx/si_shader_binary.c index dfb5ee5a7bf..4c54c7f2033 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_shader_binary.c +++ b/src/gallium/drivers/radeonsi/gfx/si_shader_binary.c @@ -607,8 +607,6 @@ static void si_dump_shader_key(const struct si_shader *shader, FILE *f) key->ps.part.prolog.bc_optimize_for_linear); fprintf(f, " prolog.samplemask_log_ps_iter = %u\n", key->ps.part.prolog.samplemask_log_ps_iter); - fprintf(f, " prolog.get_frag_coord_from_pixel_coord = %u\n", - key->ps.part.prolog.get_frag_coord_from_pixel_coord); fprintf(f, " prolog.force_samplemask_to_helper_invocation = %u\n", key->ps.part.prolog.force_samplemask_to_helper_invocation); fprintf(f, " epilog.spi_shader_col_format = 0x%x\n", diff --git a/src/gallium/drivers/radeonsi/gfx/si_shader_info.c b/src/gallium/drivers/radeonsi/gfx/si_shader_info.c index 3e6a5bffa91..2bc8fe29d9d 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_shader_info.c +++ b/src/gallium/drivers/radeonsi/gfx/si_shader_info.c @@ -369,9 +369,6 @@ static void gather_instruction(const struct nir_shader *nir, struct si_shader_in if (intr->intrinsic == nir_intrinsic_load_barycentric_at_sample) info->uses_interp_at_sample = true; break; - case nir_intrinsic_load_frag_coord: - info->reads_frag_coord_mask |= nir_def_components_read(&intr->def); - break; case nir_intrinsic_load_input: case nir_intrinsic_load_per_vertex_input: case nir_intrinsic_load_per_primitive_input: @@ -525,7 +522,6 @@ void si_nir_gather_info(struct si_screen *sscreen, struct nir_shader *nir, info->base.fs.uses_sample_shading = nir->info.fs.uses_sample_shading; info->base.fs.early_fragment_tests = nir->info.fs.early_fragment_tests; info->base.fs.post_depth_coverage = nir->info.fs.post_depth_coverage; - info->base.fs.pixel_center_integer = nir->info.fs.pixel_center_integer; info->base.fs.depth_layout = nir->info.fs.depth_layout; break; diff --git a/src/gallium/drivers/radeonsi/gfx/si_shader_info.h b/src/gallium/drivers/radeonsi/gfx/si_shader_info.h index a6743228131..fe6b388ff96 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_shader_info.h +++ b/src/gallium/drivers/radeonsi/gfx/si_shader_info.h @@ -70,7 +70,6 @@ struct si_shader_info { bool uses_sample_shading:1; bool early_fragment_tests:1; bool post_depth_coverage:1; - bool pixel_center_integer:1; enum gl_frag_depth_layout depth_layout:3; } fs; @@ -172,9 +171,6 @@ struct si_shader_info { */ uint8_t writes_1_if_tex_is_1; - /* frag coord and sample pos per component read mask. */ - uint8_t reads_frag_coord_mask; - unsigned ngg_cull_vert_threshold; /* UINT32_MAX = disabled */ enum mesa_prim rast_prim; diff --git a/src/gallium/drivers/radeonsi/gfx/si_shader_llvm_ps.c b/src/gallium/drivers/radeonsi/gfx/si_shader_llvm_ps.c index 3b992357df0..461aff2ed02 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_shader_llvm_ps.c +++ b/src/gallium/drivers/radeonsi/gfx/si_shader_llvm_ps.c @@ -678,28 +678,6 @@ void si_llvm_build_ps_prolog(struct si_shader_context *ctx, union si_shader_part args->ac.sample_coverage.arg_index); } - if (key->ps_prolog.states.get_frag_coord_from_pixel_coord) { - LLVMValueRef pixel_coord = ac_get_arg(&ctx->ac, args->ac.pos_fixed_pt); - pixel_coord = LLVMBuildBitCast(ctx->ac.builder, pixel_coord, ctx->ac.v2i16, ""); - pixel_coord = LLVMBuildUIToFP(ctx->ac.builder, pixel_coord, ctx->ac.v2f32, ""); - - if (!key->ps_prolog.pixel_center_integer) { - LLVMValueRef vec2_half = LLVMConstVector((LLVMValueRef[]){LLVMConstReal(ctx->ac.f32, 0.5), - LLVMConstReal(ctx->ac.f32, 0.5)}, 2); - pixel_coord = LLVMBuildFAdd(ctx->ac.builder, pixel_coord, vec2_half, ""); - } - - for (unsigned i = 0; i < 2; i++) { - if (!args->ac.frag_pos[i].used) - continue; - - ret = insert_ret_of_arg(ctx, ret, - LLVMBuildExtractElement(ctx->ac.builder, pixel_coord, - LLVMConstInt(ctx->ac.i32, i, 0), ""), - args->ac.frag_pos[i].arg_index); - } - } - /* Tell LLVM to insert WQM instruction sequence when needed. */ if (key->ps_prolog.wqm) { LLVMAddTargetDependentFunctionAttr(func, "amdgpu-ps-wqm-outputs", ""); diff --git a/src/gallium/drivers/radeonsi/gfx/si_shader_variant_info.c b/src/gallium/drivers/radeonsi/gfx/si_shader_variant_info.c index 8195deaa206..6ad94fcf1ba 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_shader_variant_info.c +++ b/src/gallium/drivers/radeonsi/gfx/si_shader_variant_info.c @@ -580,12 +580,6 @@ void si_set_spi_ps_input_config_for_separate_prolog(struct si_shader *shader) /* The sample mask fixup has an optimization that replaces the sample mask with the sample ID. */ if (key->ps.part.prolog.samplemask_log_ps_iter == 3) shader->config.spi_ps_input_ena &= C_0286CC_SAMPLE_COVERAGE_ENA; - - if (key->ps.part.prolog.get_frag_coord_from_pixel_coord) { - shader->config.spi_ps_input_ena &= C_0286CC_POS_X_FLOAT_ENA; - shader->config.spi_ps_input_ena &= C_0286CC_POS_Y_FLOAT_ENA; - shader->config.spi_ps_input_ena |= S_0286CC_POS_FIXED_PT_ENA(1); - } } void si_fixup_spi_ps_input_config(struct si_shader *shader) diff --git a/src/gallium/drivers/radeonsi/gfx/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/gfx/si_state_shaders.cpp index 660c500db56..6639a815b07 100644 --- a/src/gallium/drivers/radeonsi/gfx/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/gfx/si_state_shaders.cpp @@ -2424,8 +2424,6 @@ void si_ps_key_update_framebuffer_rasterizer_sample_shading(struct si_context *s uses_persp_center && uses_persp_centroid; key->ps.part.prolog.bc_optimize_for_linear = sel->info.uses_sysval_linear_center && sel->info.uses_sysval_linear_centroid; - key->ps.part.prolog.get_frag_coord_from_pixel_coord = - !sel->info.base.fs.uses_sample_shading && sel->info.reads_frag_coord_mask & 0x3; key->ps.part.prolog.force_samplemask_to_helper_invocation = 0; key->ps.mono.force_mono = 0; key->ps.mono.interpolate_at_sample_force_center = 0; @@ -2444,8 +2442,6 @@ void si_ps_key_update_framebuffer_rasterizer_sample_shading(struct si_context *s sel->info.uses_sysval_linear_sample > 1; key->ps.part.prolog.bc_optimize_for_persp = 0; key->ps.part.prolog.bc_optimize_for_linear = 0; - key->ps.part.prolog.get_frag_coord_from_pixel_coord = - !!(sel->info.reads_frag_coord_mask & 0x3); key->ps.part.prolog.force_samplemask_to_helper_invocation = sel->info.uses_sysval_sample_mask_in; key->ps.mono.force_mono = 0; key->ps.mono.interpolate_at_sample_force_center = sel->info.uses_interp_at_sample;