diff options
author | Ian Romanick <[email protected]> | 2013-08-16 23:30:43 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2013-08-19 16:39:04 -0700 |
commit | 5ac884fd9f213baed1de52eb7d17b86455c48a02 (patch) | |
tree | e10e5f4819484255b3c64625e56c459b9dbe19f3 /src/glsl/linker.h | |
parent | d9bb8b7b56ce65bbf6909419aa6d3d69ccd34c08 (diff) |
glsl: Add new overload of program_resource_visitor::visit_field method
The outer-most record is passed into the visit_field method for
the first field. In other words, in the following structure:
struct S1 {
vec4 v;
float f;
};
struct S {
S1 s1;
S1 s2;
};
uniform Ubo {
S s;
};
s.s1.v would get record_type = S (because s1.v is the first non-record
field in S), and s.s2.v would get record_type = S1. s.s1.f and s.s2.f
would get record_type = NULL becuase they aren't the first field of
anything.
This new overload isn't used yet, but the next patch will add several
uses.
Signed-off-by: Ian Romanick <[email protected]>
Reviewed-by: Paul Berry <[email protected]>
Cc: "9.2 9.1" [email protected]
Diffstat (limited to 'src/glsl/linker.h')
-rw-r--r-- | src/glsl/linker.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/glsl/linker.h b/src/glsl/linker.h index 64a683d1545..8a0027d2bca 100644 --- a/src/glsl/linker.h +++ b/src/glsl/linker.h @@ -126,6 +126,19 @@ protected: * \param type Type of the field. * \param name Fully qualified name of the field. * \param row_major For a matrix type, is it stored row-major. + * \param record_type Type of the record containing the field. + * + * The default implementation just calls the other \c visit_field method. + */ + virtual void visit_field(const glsl_type *type, const char *name, + bool row_major, const glsl_type *record_type); + + /** + * Method invoked for each leaf of the variable + * + * \param type Type of the field. + * \param name Fully qualified name of the field. + * \param row_major For a matrix type, is it stored row-major. */ virtual void visit_field(const glsl_type *type, const char *name, bool row_major) = 0; @@ -146,7 +159,7 @@ private: * terminating \c NUL character. */ void recursion(const glsl_type *t, char **name, size_t name_length, - bool row_major); + bool row_major, const glsl_type *record_type); }; void |