Signed-off-by: Tobias Klausmann <tobias.johannes.klausm...@mni.thm.de> --- src/glsl/glsl_types.cpp | 8 ++++---- src/glsl/glsl_types.h | 10 ++++++++-- src/glsl/linker.cpp | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp index f675e90..4bc7324 100644 --- a/src/glsl/glsl_types.cpp +++ b/src/glsl/glsl_types.cpp @@ -340,12 +340,12 @@ _mesa_glsl_release_types(void) } -glsl_type::glsl_type(const glsl_type *array, unsigned length) : +glsl_type::glsl_type(const glsl_type *array, unsigned length, bool was_unsized) : base_type(GLSL_TYPE_ARRAY), sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), sampler_type(0), interface_packing(0), vector_elements(0), matrix_columns(0), - length(length), name(NULL) + length(length), name(NULL), was_unsized(was_unsized) { this->fields.array = array; /* Inherit the gl type of the base. The GL type is used for @@ -635,7 +635,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, } const glsl_type * -glsl_type::get_array_instance(const glsl_type *base, unsigned array_size) +glsl_type::get_array_instance(const glsl_type *base, unsigned array_size, bool was_unsized) { /* Generate a name using the base type pointer in the key. This is * done because the name of the base type may not be unique across @@ -656,7 +656,7 @@ glsl_type::get_array_instance(const glsl_type *base, unsigned array_size) if (t == NULL) { mtx_unlock(&glsl_type::mutex); - t = new glsl_type(base, array_size); + t = new glsl_type(base, array_size, was_unsized); mtx_lock(&glsl_type::mutex); hash_table_insert(array_types, (void *) t, ralloc_strdup(mem_ctx, key)); diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h index f54a939..d6ad450 100644 --- a/src/glsl/glsl_types.h +++ b/src/glsl/glsl_types.h @@ -183,6 +183,12 @@ struct glsl_type { } fields; /** + * For \c GLSL_TYPE_ARRAY this determines if an array was unsized and + * got changed to a sized array. + */ + bool was_unsized; + + /** * \name Pointers to various public type singletons */ /*@{*/ @@ -246,7 +252,7 @@ struct glsl_type { * Get the instance of an array type */ static const glsl_type *get_array_instance(const glsl_type *base, - unsigned elements); + unsigned elements, bool was_unsized = false); /** * Get the instance of a record type @@ -677,7 +683,7 @@ private: enum glsl_interface_packing packing, const char *name); /** Constructor for array types */ - glsl_type(const glsl_type *array, unsigned length); + glsl_type(const glsl_type *array, unsigned length, bool was_unsized); /** Hash table containing the known array types. */ static struct hash_table *array_types; diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 9798afe..8eace14 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -1261,7 +1261,7 @@ private: { if ((*type)->is_unsized_array()) { *type = glsl_type::get_array_instance((*type)->fields.array, - max_array_access + 1); + max_array_access + 1, true); assert(*type != NULL); } } -- 2.4.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev