summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2015-03-23 18:20:21 -0700
committerJason Ekstrand <[email protected]>2015-04-01 12:49:49 -0700
commit793a94d6b5fc589ca8d7475347def4e222cd3d7c (patch)
tree8bc03f3f08b894e606f566411aac25074fa0796d
parentd99135b2e9b7599ee57ac90952c605b725239908 (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.c26
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);
}
}