[Mesa-dev] [PATCH v2 02/25] tgsi: add Stream{X, Y, Z, W} fields to tgsi_declaration_semantic

Marek Olšák maraeo at gmail.com
Wed Dec 7 01:07:46 UTC 2016


On Tue, Dec 6, 2016 at 11:48 AM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> 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 ",

Unrelated GLSL changes.

Marek


More information about the mesa-dev mailing list