From: Nicolai Hähnle <[email protected]>
This is for geometry shader outputs. Without it, drivers have no way of
knowing which stream each output is intended for, and have to
conservatively write all outputs to all streams.
Separate stream numbers for each component are required due to output
packing.
---
src/compiler/glsl/ir_print_visitor.cpp | 4 +--
src/gallium/auxiliary/tgsi/tgsi_build.c | 18 +++++++++--
src/gallium/auxiliary/tgsi/tgsi_dump.c | 13 ++++++++
src/gallium/auxiliary/tgsi/tgsi_text.c | 48 ++++++++++++++++++++++++++++++
src/gallium/include/pipe/p_shader_tokens.h | 5 +++-
5 files changed, 83 insertions(+), 5 deletions(-)
diff --git a/src/compiler/glsl/ir_print_visitor.cpp
b/src/compiler/glsl/ir_print_visitor.cpp
index 2b77c14..d401426 100644
--- a/src/compiler/glsl/ir_print_visitor.cpp
+++ b/src/compiler/glsl/ir_print_visitor.cpp
@@ -173,26 +173,26 @@ void ir_print_visitor::visit(ir_variable *ir)
if (ir->data.location != -1)
snprintf(loc, sizeof(loc), "location=%i ", ir->data.location);
char component[32] = {0};
if (ir->data.explicit_component)
snprintf(component, sizeof(component), "component=%i ",
ir->data.location_frac);
char stream[32] = {0};
if (ir->data.stream & (1u << 31)) {
if (ir->data.stream & ~(1u << 31)) {
- snprintf(stream, sizeof(stream), "stream(%u,%u,%u,%u)",
+ snprintf(stream, sizeof(stream), "stream(%u,%u,%u,%u) ",
ir->data.stream & 3, (ir->data.stream >> 2) & 3,
(ir->data.stream >> 4) & 3, (ir->data.stream >> 6) & 3);
}
} else if (ir->data.stream) {
- snprintf(stream, sizeof(stream), "stream%u", ir->data.stream);
+ snprintf(stream, sizeof(stream), "stream%u ", ir->data.stream);
}
const char *const cent = (ir->data.centroid) ? "centroid " : "";
const char *const samp = (ir->data.sample) ? "sample " : "";
const char *const patc = (ir->data.patch) ? "patch " : "";
const char *const inv = (ir->data.invariant) ? "invariant " : "";
const char *const prec = (ir->data.precise) ? "precise " : "";
const char *const mode[] = { "", "uniform ", "shader_storage ",
"shader_shared ", "shader_in ", "shader_out ",
"in ", "out ", "inout ",