amd: lower load_sample_pos in NIR
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32782>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user