diff --git a/src/amd/common/ac_nir.c b/src/amd/common/ac_nir.c index f9dc654f706..d4e96e7f2f5 100644 --- a/src/amd/common/ac_nir.c +++ b/src/amd/common/ac_nir.c @@ -250,6 +250,10 @@ lower_intrinsic_to_arg(nir_builder *b, nir_instr *instr, void *state) case nir_intrinsic_load_sample_id: replacement = ac_nir_unpack_arg(b, s->args, s->args->ancillary, 8, 4); break; + case nir_intrinsic_load_sample_pos: + replacement = nir_vec2(b, nir_ffract(b, ac_nir_load_arg(b, s->args, s->args->frag_pos[0])), + nir_ffract(b, ac_nir_load_arg(b, s->args, s->args->frag_pos[1]))); + break; default: return false; } diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 967a0c400ce..2d7669a1259 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -8125,15 +8125,6 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr) case nir_intrinsic_load_frag_shading_rate: emit_load_frag_shading_rate(ctx, get_ssa_temp(ctx, &instr->def)); break; - case nir_intrinsic_load_sample_pos: { - Temp posx = get_arg(ctx, ctx->args->frag_pos[0]); - Temp posy = get_arg(ctx, ctx->args->frag_pos[1]); - bld.pseudo( - aco_opcode::p_create_vector, Definition(get_ssa_temp(ctx, &instr->def)), - posx.id() ? bld.vop1(aco_opcode::v_fract_f32, bld.def(v1), posx) : Operand::zero(), - posy.id() ? bld.vop1(aco_opcode::v_fract_f32, bld.def(v1), posy) : Operand::zero()); - break; - } case nir_intrinsic_load_tess_coord: visit_load_tess_coord(ctx, instr); break; case nir_intrinsic_load_interpolated_input: visit_load_interpolated_input(ctx, instr); break; case nir_intrinsic_store_output: visit_store_output(ctx, instr); break; diff --git a/src/amd/compiler/aco_instruction_selection_setup.cpp b/src/amd/compiler/aco_instruction_selection_setup.cpp index 2f96770657c..67e87efc22b 100644 --- a/src/amd/compiler/aco_instruction_selection_setup.cpp +++ b/src/amd/compiler/aco_instruction_selection_setup.cpp @@ -558,7 +558,6 @@ init_context(isel_context* ctx, nir_shader* shader) case nir_intrinsic_load_interpolated_input: case nir_intrinsic_load_front_face_fsign: case nir_intrinsic_load_frag_shading_rate: - case nir_intrinsic_load_sample_pos: case nir_intrinsic_load_local_invocation_index: case nir_intrinsic_load_subgroup_invocation: case nir_intrinsic_load_tess_coord: diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 3c78cdaeef8..1b7a6b4e8d1 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -2657,19 +2657,6 @@ static LLVMValueRef visit_var_atomic(struct ac_nir_context *ctx, const nir_intri return result; } -static LLVMValueRef load_sample_pos(struct ac_nir_context *ctx) -{ - LLVMValueRef values[2]; - LLVMValueRef pos[2]; - - pos[0] = ac_to_float(&ctx->ac, ac_get_arg(&ctx->ac, ctx->args->frag_pos[0])); - pos[1] = ac_to_float(&ctx->ac, ac_get_arg(&ctx->ac, ctx->args->frag_pos[1])); - - values[0] = ac_build_fract(&ctx->ac, pos[0], 32); - values[1] = ac_build_fract(&ctx->ac, pos[1], 32); - return ac_build_gather_values(&ctx->ac, values, 2); -} - static LLVMValueRef lookup_interp_param(struct ac_nir_context *ctx, enum glsl_interp_mode interp, unsigned location) { @@ -2969,9 +2956,6 @@ static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins } else fprintf(stderr, "Unknown primitive id intrinsic: %d", ctx->stage); break; - case nir_intrinsic_load_sample_pos: - result = load_sample_pos(ctx); - break; case nir_intrinsic_load_frag_shading_rate: result = emit_load_frag_shading_rate(ctx); break;