[Mesa-dev] [PATCH 0/9] glsl: cleanup and fix handling of unnamed struct types

Nicolai Hähnle nhaehnle at gmail.com
Mon May 15 09:27:24 UTC 2017


Hi all,

This series aims to simplify how we handle unnamed struct types and fix some
bugs on the way. Some of the patches should be uncontroversial, and all of
them align with my understanding of the GLSL spec, but the spec isn't
exactly explicit, so...

At a high level, the series changes two things:

1) Unnamed structs can never match named structs during linking.

2) Unnamed structs are considered the same type if they have the same
content. They will literally use the same glsl_type instance.

The second point causes a deviation from the behavior of C/C++, in that the
following code snippet now compiles (and does the reasonable thing):

  struct { float a; } s1;
  struct { float a; } s2;

  s2 = s1;

The justification is basically that the GLSL spec says (when it comes to
linking, in Section 4.2) that

   "Structures must have the same name, sequence of type names, and
    type definitions, and member names to be considered the same type."

And since people generally seem to read that as mandating that globals of
unnamed struct types should match if they're structurally the same, and the
GLSL spec otherwise says nothing (as far as I can tell) about when struct
types are equal, the cleanest thing is to just say that _in general_ (not
just for linking) struct types are the same if and only if they have the
same name and the same fields; where "same name" can mean that they both
have no name.

Please contemplate and review! :)
Thanks,
Nicolai
--
 src/compiler/glsl/ast.h                   |  1 +
 src/compiler/glsl/ast_to_hir.cpp          | 17 ++---
 src/compiler/glsl/glsl_parser_extras.cpp  | 17 +++--
 src/compiler/glsl/link_varyings.cpp       | 41 +++---------
 src/compiler/glsl/linker.cpp              | 47 +++++---------
 src/compiler/glsl/lower_ubo_reference.cpp |  2 +-
 src/compiler/glsl_types.cpp               | 69 +++++++++------------
 src/compiler/glsl_types.h                 | 11 ++--
 8 files changed, 80 insertions(+), 125 deletions(-)



More information about the mesa-dev mailing list