ir3: use isam for txf with LOD 0

isaml with LOD 0 is equivalent to isam. Use isam if possible because it
needs one less src register.

Totals:
Instrs: 49141575 -> 49109622 (-0.07%); split: -0.07%, +0.00%
CodeSize: 102938312 -> 102865138 (-0.07%)
NOPs: 8464238 -> 8463245 (-0.01%); split: -0.02%, +0.01%
(ss)-stall: 4013710 -> 4014037 (+0.01%); split: -0.00%, +0.01%
(sy)-stall: 16712850 -> 16712860 (+0.00%)
Preamble Instrs: 11120034 -> 11119863 (-0.00%)
Last helper: 11942609 -> 11934226 (-0.07%); split: -0.07%, +0.00%
Cat0: 9320007 -> 9319014 (-0.01%); split: -0.02%, +0.01%
Cat7: 1636810 -> 1605850 (-1.89%)

Totals from 9523 (5.78% of 164705) affected shaders:
Instrs: 7755614 -> 7723661 (-0.41%); split: -0.41%, +0.00%
CodeSize: 15214510 -> 15141336 (-0.48%)
NOPs: 1722109 -> 1721116 (-0.06%); split: -0.11%, +0.05%
(ss)-stall: 807953 -> 808280 (+0.04%); split: -0.00%, +0.04%
(sy)-stall: 3054163 -> 3054173 (+0.00%)
Preamble Instrs: 1653169 -> 1652998 (-0.01%)
Last helper: 2333301 -> 2324918 (-0.36%); split: -0.36%, +0.00%
Cat0: 1888236 -> 1887243 (-0.05%); split: -0.10%, +0.05%
Cat7: 276671 -> 245711 (-11.19%)

Signed-off-by: Job Noorman <jnoorman@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36766>
This commit is contained in:
Job Noorman
2025-08-13 19:37:47 +02:00
committed by Marge Bot
parent fc1b26f4dc
commit 23c49ede57

View File

@@ -3591,6 +3591,7 @@ emit_tex(struct ir3_context *ctx, nir_tex_instr *tex)
struct ir3_instruction *lod, *compare, *proj, *sample_index;
struct tex_src_info info = {0};
bool has_bias = false, has_lod = false, has_proj = false, has_off = false;
bool lod_zero = false;
unsigned i, coords, flags, ncomp;
unsigned nsrc0 = 0, nsrc1 = 0;
type_t type;
@@ -3615,6 +3616,8 @@ emit_tex(struct ir3_context *ctx, nir_tex_instr *tex)
case nir_tex_src_lod:
lod = ir3_get_src(ctx, &tex->src[i].src)[0];
has_lod = true;
lod_zero = nir_src_is_const(tex->src[i].src) &&
nir_src_as_uint(tex->src[i].src) == 0;
break;
case nir_tex_src_comparator: /* shadow comparator */
compare = ir3_get_src(ctx, &tex->src[i].src)[0];
@@ -3683,7 +3686,11 @@ emit_tex(struct ir3_context *ctx, nir_tex_instr *tex)
opc = OPC_SAMGQ;
break;
case nir_texop_txf:
opc = OPC_ISAML;
/* isaml with LOD 0 is equivalent to isam. Use isam if possible because it
* needs one less src register.
*/
opc = lod_zero ? OPC_ISAM : OPC_ISAML;
has_lod = !lod_zero;
break;
case nir_texop_lod:
opc = OPC_GETLOD;