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 <kenneth@whitecape.org>
This commit is contained in:
Jason Ekstrand 2015-03-23 18:20:21 -07:00
parent d99135b2e9
commit 793a94d6b5
1 changed files with 19 additions and 7 deletions

View File

@ -137,7 +137,7 @@ print_dest(nir_dest *dest, FILE *fp)
} }
static void 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) if (src->negate)
fprintf(fp, "-"); fprintf(fp, "-");
@ -146,13 +146,25 @@ print_alu_src(nir_alu_src *src, FILE *fp)
print_src(&src->src, fp); print_src(&src->src, fp);
if (src->swizzle[0] != 0 || bool print_swizzle = false;
src->swizzle[1] != 1 || for (unsigned i = 0; i < 4; i++) {
src->swizzle[2] != 2 || if (read_mask >> i == 0)
src->swizzle[3] != 3) { break;
if (src->swizzle[i] != i) {
print_swizzle = true;
break;
}
}
if (print_swizzle) {
fprintf(fp, "."); 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]]); fprintf(fp, "%c", "xyzw"[src->swizzle[i]]);
}
} }
if (src->abs) if (src->abs)
@ -189,7 +201,7 @@ print_alu_instr(nir_alu_instr *instr, FILE *fp)
if (i != 0) if (i != 0)
fprintf(fp, ", "); fprintf(fp, ", ");
print_alu_src(&instr->src[i], fp); print_alu_src(&instr->src[i], instr->dest.write_mask, fp);
} }
} }