ac/nir/ngg,radv: use nir_load_viewport_xy_scale_and_offset

Acked-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17651>
This commit is contained in:
Qiang Yu 2022-08-03 17:56:36 +08:00 committed by Marge Bot
parent a19dcdf9d5
commit 035d70f721
2 changed files with 17 additions and 15 deletions

View file

@ -108,15 +108,17 @@ cull_small_primitive(nir_builder *b, nir_ssa_def *bbox_min[3], nir_ssa_def *bbox
nir_if *if_cull_small_prims = nir_push_if(b, nir_load_cull_small_primitives_enabled_amd(b));
{
nir_ssa_def *vp_scale[2] = { nir_load_viewport_x_scale(b), nir_load_viewport_y_scale(b), };
nir_ssa_def *vp_translate[2] = { nir_load_viewport_x_offset(b), nir_load_viewport_y_offset(b), };
nir_ssa_def *vp = nir_load_viewport_xy_scale_and_offset(b);
nir_ssa_def *small_prim_precision = nir_load_cull_small_prim_precision_amd(b);
prim_is_small = prim_is_small_else;
for (unsigned chan = 0; chan < 2; ++chan) {
nir_ssa_def *vp_scale = nir_channel(b, vp, chan);
nir_ssa_def *vp_translate = nir_channel(b, vp, 2 + chan);
/* Convert the position to screen-space coordinates. */
nir_ssa_def *min = nir_ffma(b, bbox_min[chan], vp_scale[chan], vp_translate[chan]);
nir_ssa_def *max = nir_ffma(b, bbox_max[chan], vp_scale[chan], vp_translate[chan]);
nir_ssa_def *min = nir_ffma(b, bbox_min[chan], vp_scale, vp_translate);
nir_ssa_def *max = nir_ffma(b, bbox_max[chan], vp_scale, vp_translate);
/* Scale the bounding box according to precision. */
min = nir_fsub(b, min, small_prim_precision);

View file

@ -174,18 +174,18 @@ lower_abi_instr(nir_builder *b, nir_instr *instr, void *state)
replacement = nir_ldexp(b, nir_imm_float(b, 1.0f), exponent);
break;
}
case nir_intrinsic_load_viewport_x_scale:
replacement = ac_nir_load_arg(b, &s->args->ac, s->args->ngg_viewport_scale[0]);
break;
case nir_intrinsic_load_viewport_x_offset:
replacement = ac_nir_load_arg(b, &s->args->ac, s->args->ngg_viewport_translate[0]);
break;
case nir_intrinsic_load_viewport_y_scale:
replacement = ac_nir_load_arg(b, &s->args->ac, s->args->ngg_viewport_scale[1]);
break;
case nir_intrinsic_load_viewport_y_offset:
replacement = ac_nir_load_arg(b, &s->args->ac, s->args->ngg_viewport_translate[1]);
case nir_intrinsic_load_viewport_xy_scale_and_offset: {
nir_ssa_def *comps[] = {
ac_nir_load_arg(b, &s->args->ac, s->args->ngg_viewport_scale[0]),
ac_nir_load_arg(b, &s->args->ac, s->args->ngg_viewport_scale[1]),
ac_nir_load_arg(b, &s->args->ac, s->args->ngg_viewport_translate[0]),
ac_nir_load_arg(b, &s->args->ac, s->args->ngg_viewport_translate[1]),
};
replacement = nir_vec(b, comps, 4);
break;
}
case nir_intrinsic_load_ring_task_draw_amd:
replacement = load_ring(b, RING_TS_DRAW, s);
break;