From d878470bbc3d81ca30280c98bc1d9b23204dc238 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 1 Aug 2023 14:38:57 -0400 Subject: [PATCH] etnaviv: Don't use alu->dest.write_mask Just plug n chug tbh all of this code is bad. Signed-off-by: Alyssa Rosenzweig Reviewed-by: Faith Ekstrand Reviewed-by: Christian Gmeiner Part-of: --- src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c | 15 +++++---------- src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h | 5 +---- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c index 0645fc4..679265c 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c @@ -34,6 +34,7 @@ #include "etnaviv_nir.h" #include "etnaviv_uniforms.h" #include "etnaviv_util.h" +#include "nir.h" #include #include "util/u_memory.h" @@ -414,8 +415,8 @@ get_src(struct etna_compile *c, nir_src *src) static bool vec_dest_has_swizzle(nir_alu_instr *vec, nir_ssa_def *ssa) { - for (unsigned i = 0; i < 4; i++) { - if (!(vec->dest.write_mask & (1 << i)) || vec->src[i].src.ssa != ssa) + for (unsigned i = 0; i < nir_dest_num_components(vec->dest.dest); i++) { + if (vec->src[i].src.ssa != ssa) continue; if (vec->src[i].swizzle[0] != i) @@ -717,10 +718,7 @@ insert_vec_mov(nir_alu_instr *vec, unsigned start_idx, nir_shader *shader) unsigned num_components = 1; - for (unsigned i = start_idx + 1; i < 4; i++) { - if (!(vec->dest.write_mask & (1 << i))) - continue; - + for (unsigned i = start_idx + 1; i < nir_dest_num_components(vec->dest.dest); i++) { if (nir_srcs_equal(vec->src[i].src, vec->src[start_idx].src) && is_src_mod_neg(&vec->instr, i) == is_src_mod_neg(&vec->instr, start_idx) && is_src_mod_abs(&vec->instr, i) == is_src_mod_neg(&vec->instr, start_idx)) { @@ -897,10 +895,7 @@ lower_alu(struct etna_compile *c, nir_alu_instr *alu) } unsigned finished_write_mask = 0; - for (unsigned i = 0; i < 4; i++) { - if (!(alu->dest.write_mask & (1 << i))) - continue; - + for (unsigned i = 0; i < nir_dest_num_components(alu->dest.dest); i++) { nir_ssa_def *ssa = alu->src[i].src.ssa; /* check that vecN instruction is only user of this */ diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h index e5f9ed5..90925d3 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.h @@ -181,10 +181,7 @@ update_swiz_mask(nir_alu_instr *alu, nir_dest *dest, unsigned *swiz, unsigned *m bool is_vec = dest != NULL; unsigned swizzle = 0, write_mask = 0; - for (unsigned i = 0; i < 4; i++) { - /* channel not written */ - if (!(alu->dest.write_mask & (1 << i))) - continue; + for (unsigned i = 0; i < nir_dest_num_components(alu->dest.dest); i++) { /* src is different (only check for vecN) */ if (is_vec && alu->src[i].src.ssa != &dest->ssa) continue; -- 2.7.4