mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
radv: combine v_mov_dpp into fma in frag_coord.z adjust
This wasn't possible before because of the literal. fossil-db (vangogh): Totals from 3766 (3.36% of 112041) affected shaders: Instrs: 5646975 -> 5642967 (-0.07%); split: -0.09%, +0.02% CodeSize: 30751152 -> 30749956 (-0.00%); split: -0.02%, +0.02% VGPRs: 262640 -> 262672 (+0.01%); split: -0.01%, +0.02% Latency: 184869423 -> 184883681 (+0.01%); split: -0.02%, +0.03% InvThroughput: 43462111 -> 43456113 (-0.01%); split: -0.03%, +0.02% VClause: 93337 -> 93353 (+0.02%); split: -0.10%, +0.12% SClause: 186857 -> 186833 (-0.01%); split: -0.07%, +0.06% Copies: 390583 -> 390327 (-0.07%); split: -0.44%, +0.38% Branches: 106070 -> 106086 (+0.02%); split: -0.03%, +0.05% VALU: 4112856 -> 4108839 (-0.10%); split: -0.12%, +0.02% SALU: 593814 -> 593758 (-0.01%); split: -0.05%, +0.04% Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40013>
This commit is contained in:
parent
437a3d5ade
commit
05586fae67
1 changed files with 4 additions and 5 deletions
|
|
@ -58,17 +58,16 @@ pass(nir_builder *b, nir_intrinsic_instr *intrin, void *data)
|
|||
|
||||
nir_def *frag_z = nir_channel(b, &intrin->def, 2);
|
||||
|
||||
/* adjusted_frag_z = dFdxFine(frag_z) * 0.0625 + frag_z */
|
||||
nir_def *adjusted_frag_z = nir_ddx_fine(b, frag_z);
|
||||
adjusted_frag_z = nir_ffma_imm1(b, adjusted_frag_z, 0.0625f, frag_z);
|
||||
|
||||
/* VRS Rate X = Ancillary[2:3] */
|
||||
nir_def *ancillary = nir_load_vector_arg_amd(b, 1, .base = args->ac.ancillary.arg_index);
|
||||
nir_def *x_rate = nir_ubfe_imm(b, ancillary, 2, 2);
|
||||
|
||||
/* xRate = xRate == 0x1 ? adjusted_frag_z : frag_z. */
|
||||
nir_def *cond = nir_ieq_imm(b, x_rate, 1);
|
||||
frag_z = nir_bcsel(b, cond, adjusted_frag_z, frag_z);
|
||||
nir_def *mul = nir_bcsel(b, cond, nir_imm_float(b, 0.0625f), nir_imm_float(b, -0.0));
|
||||
|
||||
/* adjusted_frag_z = dFdxFine(frag_z) * 0.0625 + frag_z */
|
||||
frag_z = nir_ffma(b, nir_ddx_fine(b, frag_z), mul, frag_z);
|
||||
|
||||
nir_def *new_dest = nir_vector_insert_imm(b, &intrin->def, frag_z, 2);
|
||||
nir_def_rewrite_uses_after(&intrin->def, new_dest);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue