diff --git a/src/amd/common/ac_nir.c b/src/amd/common/ac_nir.c index 8c006838306..5df53c0e59f 100644 --- a/src/amd/common/ac_nir.c +++ b/src/amd/common/ac_nir.c @@ -174,6 +174,12 @@ lower_intrinsic_to_arg(nir_builder *b, nir_instr *instr, void *state) case nir_intrinsic_load_pixel_coord: replacement = nir_unpack_32_2x16(b, ac_nir_load_arg(b, s->args, s->args->pos_fixed_pt)); break; + case nir_intrinsic_load_frag_coord: + replacement = nir_vec4(b, ac_nir_load_arg(b, s->args, s->args->frag_pos[0]), + ac_nir_load_arg(b, s->args, s->args->frag_pos[1]), + ac_nir_load_arg(b, s->args, s->args->frag_pos[2]), + ac_nir_load_arg(b, s->args, s->args->frag_pos[3])); + break; default: return false; } diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 4dcf149c6d4..274f4db0b13 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -5527,29 +5527,6 @@ emit_interp_mov_instr(isel_context* ctx, unsigned idx, unsigned component, unsig emit_extract_vector(ctx, tmp, high_16bits, dst); } -void -emit_load_frag_coord(isel_context* ctx, Temp dst, unsigned num_components) -{ - Builder bld(ctx->program, ctx->block); - - aco_ptr vec( - create_instruction(aco_opcode::p_create_vector, Format::PSEUDO, num_components, 1)); - for (unsigned i = 0; i < num_components; i++) { - if (ctx->args->frag_pos[i].used) - vec->operands[i] = Operand(get_arg(ctx, ctx->args->frag_pos[i])); - else - vec->operands[i] = Operand(v1); - } - - for (Operand& op : vec->operands) - op = op.isUndefined() ? Operand::zero() : op; - - vec->definitions[0] = Definition(dst); - ctx->block->instructions.emplace_back(std::move(vec)); - emit_split_vector(ctx, dst, num_components); - return; -} - void emit_load_frag_shading_rate(isel_context* ctx, Temp dst) { @@ -8154,10 +8131,6 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr) bld.copy(Definition(dst), Operand(get_arg(ctx, ctx->args->view_index))); break; } - case nir_intrinsic_load_frag_coord: { - emit_load_frag_coord(ctx, get_ssa_temp(ctx, &instr->def), 4); - break; - } case nir_intrinsic_load_frag_shading_rate: emit_load_frag_shading_rate(ctx, get_ssa_temp(ctx, &instr->def)); break; diff --git a/src/amd/compiler/aco_instruction_selection_setup.cpp b/src/amd/compiler/aco_instruction_selection_setup.cpp index 740f94810a4..ec2c30031f7 100644 --- a/src/amd/compiler/aco_instruction_selection_setup.cpp +++ b/src/amd/compiler/aco_instruction_selection_setup.cpp @@ -560,7 +560,6 @@ init_context(isel_context* ctx, nir_shader* shader) case nir_intrinsic_load_barycentric_at_offset: case nir_intrinsic_load_interpolated_input: case nir_intrinsic_load_front_face_fsign: - case nir_intrinsic_load_frag_coord: case nir_intrinsic_load_frag_shading_rate: case nir_intrinsic_load_sample_pos: case nir_intrinsic_load_local_invocation_id: diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index d3982ac9c90..463c072a0e4 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -2873,16 +2873,6 @@ emit_load_frag_shading_rate(struct ac_nir_context *ctx) return LLVMBuildOr(ctx->ac.builder, x_rate, y_rate, ""); } -static LLVMValueRef -emit_load_frag_coord(struct ac_nir_context *ctx) -{ - LLVMValueRef values[4] = { - ac_get_arg(&ctx->ac, ctx->args->frag_pos[0]), ac_get_arg(&ctx->ac, ctx->args->frag_pos[1]), - ac_get_arg(&ctx->ac, ctx->args->frag_pos[2]), ac_get_arg(&ctx->ac, ctx->args->frag_pos[3])}; - - return ac_to_integer(&ctx->ac, ac_build_gather_values(&ctx->ac, values, 4)); -} - static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *instr) { LLVMValueRef result = NULL; @@ -3024,9 +3014,6 @@ static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins case nir_intrinsic_load_sample_pos: result = load_sample_pos(ctx); break; - case nir_intrinsic_load_frag_coord: - result = emit_load_frag_coord(ctx); - break; case nir_intrinsic_load_frag_shading_rate: result = emit_load_frag_shading_rate(ctx); break;