Module: Mesa Branch: main Commit: feeae0f18f856043b25f922ce6ba212279aa0d57 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=feeae0f18f856043b25f922ce6ba212279aa0d57
Author: Qiang Yu <[email protected]> Date: Sat Apr 15 13:04:05 2023 +0800 ac/llvm,radeonsi: lower nir_load_point_coord_maybe_flipped in nir Reviewed-by: Marek Olšák <[email protected]> Signed-off-by: Qiang Yu <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22523> --- src/amd/llvm/ac_nir_to_llvm.c | 8 -------- src/amd/llvm/ac_shader_abi.h | 3 --- src/gallium/drivers/radeonsi/si_nir_lower_abi.c | 10 ++++++++++ src/gallium/drivers/radeonsi/si_shader_llvm.c | 2 -- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 904dc2981bd..dadfd248f1f 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -3812,14 +3812,6 @@ static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins nir_intrinsic_io_semantics(instr).high_16bits); break; } - case nir_intrinsic_load_point_coord_maybe_flipped: { - LLVMValueRef interp_param = lookup_interp_param(ctx, INTERP_MODE_NONE, INTERP_CENTER); - /* Load point coordinates (x, y) which are written by the hw after the interpolated inputs */ - result = load_interpolated_input(ctx, interp_param, ctx->abi->num_interp, 2, - instr->dest.ssa.num_components, instr->dest.ssa.bit_size, - false); - break; - } case nir_intrinsic_emit_vertex_with_counter: { unsigned stream = nir_intrinsic_stream_id(instr); LLVMValueRef next_vertex = get_src(ctx, instr->src[0]); diff --git a/src/amd/llvm/ac_shader_abi.h b/src/amd/llvm/ac_shader_abi.h index b1dd01db51d..0369d574a5f 100644 --- a/src/amd/llvm/ac_shader_abi.h +++ b/src/amd/llvm/ac_shader_abi.h @@ -121,9 +121,6 @@ struct ac_shader_abi { /* Equal to radeon_info::conformant_trunc_coord. */ bool conformant_trunc_coord; - - /* Number of all interpolated inputs */ - unsigned num_interp; }; #endif /* AC_SHADER_ABI_H */ diff --git a/src/gallium/drivers/radeonsi/si_nir_lower_abi.c b/src/gallium/drivers/radeonsi/si_nir_lower_abi.c index a3a7a6f3f8e..c56caa1c41f 100644 --- a/src/gallium/drivers/radeonsi/si_nir_lower_abi.c +++ b/src/gallium/drivers/radeonsi/si_nir_lower_abi.c @@ -513,6 +513,16 @@ static bool lower_abi_instr(nir_builder *b, nir_instr *instr, struct lower_abi_s replacement = nir_vec(b, color, 4); break; } + case nir_intrinsic_load_point_coord_maybe_flipped: { + nir_ssa_def *interp_param = + nir_load_barycentric_pixel(b, 32, .interp_mode = INTERP_MODE_NONE); + + /* Load point coordinates (x, y) which are written by the hw after the interpolated inputs */ + replacement = nir_load_interpolated_input(b, 2, 32, interp_param, nir_imm_int(b, 0), + .base = si_get_ps_num_interp(shader), + .component = 2); + break; + } default: return false; } diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c index 1955112bc78..583abbd61e2 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c @@ -832,8 +832,6 @@ static bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shade break; case MESA_SHADER_FRAGMENT: { - ctx->abi.num_interp = si_get_ps_num_interp(shader); - ctx->abi.kill_ps_if_inf_interp = ctx->screen->options.no_infinite_interp && (ctx->shader->selector->info.uses_persp_center ||
