diff options
author | Jason Ekstrand <[email protected]> | 2015-03-23 18:20:21 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2015-04-01 12:49:49 -0700 |
commit | 793a94d6b5fc589ca8d7475347def4e222cd3d7c (patch) | |
tree | 8bc03f3f08b894e606f566411aac25074fa0796d | |
parent | d99135b2e9b7599ee57ac90952c605b725239908 (diff) |
nir/print: Don't print extra swizzzle components
Previously, NIR would just print 4 swizzle components if the swizzle was
anything other than foo.xyzw. This creates lots of noise if, for example,
you have a one-component element with a swizzle of foo.xxxx.
Reviewed-by: Kenneth Grunke <[email protected]>
-rw-r--r-- | src/glsl/nir/nir_print.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/glsl/nir/nir_print.c b/src/glsl/nir/nir_print.c index fa11a312e51..53fada8eb95 100644 --- a/src/glsl/nir/nir_print.c +++ b/src/glsl/nir/nir_print.c @@ -137,7 +137,7 @@ print_dest(nir_dest *dest, FILE *fp) } static void -print_alu_src(nir_alu_src *src, FILE *fp) +print_alu_src(nir_alu_src *src, uint8_t read_mask, FILE *fp) { if (src->negate) fprintf(fp, "-"); @@ -146,13 +146,25 @@ print_alu_src(nir_alu_src *src, FILE *fp) print_src(&src->src, fp); - if (src->swizzle[0] != 0 || - src->swizzle[1] != 1 || - src->swizzle[2] != 2 || - src->swizzle[3] != 3) { + bool print_swizzle = false; + for (unsigned i = 0; i < 4; i++) { + if (read_mask >> i == 0) + break; + + if (src->swizzle[i] != i) { + print_swizzle = true; + break; + } + } + + if (print_swizzle) { fprintf(fp, "."); - for (unsigned i = 0; i < 4; i++) + for (unsigned i = 0; i < 4; i++) { + if (read_mask >> i == 0) + break; + fprintf(fp, "%c", "xyzw"[src->swizzle[i]]); + } } if (src->abs) @@ -189,7 +201,7 @@ print_alu_instr(nir_alu_instr *instr, FILE *fp) if (i != 0) fprintf(fp, ", "); - print_alu_src(&instr->src[i], fp); + print_alu_src(&instr->src[i], instr->dest.write_mask, fp); } } |