mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 00:30:13 +01:00
aco: optimize AC_FETCH_FORMAT_SNORM alpha adjust
This looks like it was copied from LLVM, which didn't have a fmax intrinsic. fossil-db (GFX8): Totals from 43 (0.03% of 140385) affected shaders: CodeSize: 49660 -> 49488 (-0.35%) Instrs: 10434 -> 10348 (-0.82%) Cycles: 41736 -> 41392 (-0.82%) VMEM: 13793 -> 13719 (-0.54%) Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8918>
This commit is contained in:
parent
bd7d8a77e9
commit
e8220e106b
1 changed files with 3 additions and 4 deletions
|
|
@ -4854,14 +4854,13 @@ Temp adjust_vertex_fetch_alpha(isel_context *ctx, unsigned adjustment, Temp alph
|
||||||
* and happen to contain 0, 1, 2, 3 as the two LSBs of the
|
* and happen to contain 0, 1, 2, 3 as the two LSBs of the
|
||||||
* exponent.
|
* exponent.
|
||||||
*/
|
*/
|
||||||
alpha = bld.vop2(aco_opcode::v_lshlrev_b32, bld.def(v1), Operand(adjustment == AC_FETCH_FORMAT_SNORM ? 7u : 30u), alpha);
|
unsigned offset = adjustment == AC_FETCH_FORMAT_SNORM ? 7u : 30u;
|
||||||
alpha = bld.vop2(aco_opcode::v_ashrrev_i32, bld.def(v1), Operand(30u), alpha);
|
alpha = bld.vop3(aco_opcode::v_bfe_i32, bld.def(v1), alpha, Operand(offset), Operand(2u));
|
||||||
|
|
||||||
/* Convert back to the right type. */
|
/* Convert back to the right type. */
|
||||||
if (adjustment == AC_FETCH_FORMAT_SNORM) {
|
if (adjustment == AC_FETCH_FORMAT_SNORM) {
|
||||||
alpha = bld.vop1(aco_opcode::v_cvt_f32_i32, bld.def(v1), alpha);
|
alpha = bld.vop1(aco_opcode::v_cvt_f32_i32, bld.def(v1), alpha);
|
||||||
Temp clamp = bld.vopc(aco_opcode::v_cmp_le_f32, bld.hint_vcc(bld.def(bld.lm)), Operand(0xbf800000u), alpha);
|
alpha = bld.vop2(aco_opcode::v_max_f32, bld.def(v1), Operand(0xbf800000u), alpha);
|
||||||
alpha = bld.vop2(aco_opcode::v_cndmask_b32, bld.def(v1), Operand(0xbf800000u), alpha, clamp);
|
|
||||||
} else if (adjustment == AC_FETCH_FORMAT_SSCALED) {
|
} else if (adjustment == AC_FETCH_FORMAT_SSCALED) {
|
||||||
alpha = bld.vop1(aco_opcode::v_cvt_f32_i32, bld.def(v1), alpha);
|
alpha = bld.vop1(aco_opcode::v_cvt_f32_i32, bld.def(v1), alpha);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue