radv/nir/lower_cmat: convert matrix use in smaller type

Less conversions, and less data to move around.

Foz-DB Navi31:
Totals from 10 out of 14 FSR4 shaders:
Instrs: 65443 -> 64204 (-1.89%); split: -1.93%, +0.04%
CodeSize: 441884 -> 439052 (-0.64%); split: -1.21%, +0.57%
Latency: 213374 -> 208878 (-2.11%); split: -2.17%, +0.07%
InvThroughput: 236922 -> 232898 (-1.70%); split: -1.77%, +0.08%
VClause: 935 -> 902 (-3.53%); split: -3.74%, +0.21%
Copies: 5064 -> 6418 (+26.74%); split: -13.35%, +40.09%
Branches: 54 -> 55 (+1.85%)
VALU: 55700 -> 54762 (-1.68%); split: -1.85%, +0.16%
VOPD: 3459 -> 3895 (+12.60%); split: +16.88%, -4.28%

Acked-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36115>
This commit is contained in:
Georg Lehmann 2025-07-12 19:23:18 +02:00 committed by Marge Bot
parent f2846b936a
commit 56d93c40ea

View file

@ -605,10 +605,14 @@ radv_nir_lower_cooperative_matrix(nir_shader *shader, enum amd_gfx_level gfx_lev
src = nir_vec(&b, components, src->num_components / scale);
}
src = convert_use(&b, src, src_use, dst_use, &params);
if (radv_nir_cmat_bits(src_desc) <= radv_nir_cmat_bits(dst_desc))
src = convert_use(&b, src, src_use, dst_use, &params);
nir_def *ret = convert_base_type(&b, src, src_element_type, dst_element_type, sat);
if (radv_nir_cmat_bits(src_desc) > radv_nir_cmat_bits(dst_desc))
ret = convert_use(&b, ret, src_use, dst_use, &params);
if (dst_mul > src_mul) {
nir_def *components[NIR_MAX_VEC_COMPONENTS];
unsigned scale = dst_mul / src_mul;