From: Tobias Klausmann <tobias.johannes.klausm...@mni.thm.de> Signed-off-by: Tobias Klausmann <tobias.johannes.klausm...@mni.thm.de> --- src/compiler/glsl/linker.cpp | 2 +- src/compiler/glsl_types.cpp | 8 ++++---- src/compiler/glsl_types.h | 10 ++++++++-- 3 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index ed9ef98..3469ed6 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -1481,7 +1481,7 @@ private: { if (!from_ssbo_unsized_array && (*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); } } diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp index 39585bf..e2f2bf1 100644 --- a/src/compiler/glsl_types.cpp +++ b/src/compiler/glsl_types.cpp @@ -435,12 +435,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), sampled_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 @@ -817,7 +817,7 @@ glsl_type::get_image_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 @@ -837,7 +837,7 @@ glsl_type::get_array_instance(const glsl_type *base, unsigned array_size) const struct hash_entry *entry = _mesa_hash_table_search(array_types, key); if (entry == NULL) { mtx_unlock(&glsl_type::mutex); - const glsl_type *t = new glsl_type(base, array_size); + const glsl_type *t = new glsl_type(base, array_size, was_unsized); mtx_lock(&glsl_type::mutex); entry = _mesa_hash_table_insert(array_types, diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h index dd46479..d9d3644 100644 --- a/src/compiler/glsl_types.h +++ b/src/compiler/glsl_types.h @@ -193,6 +193,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 */ /*@{*/ @@ -258,7 +264,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 @@ -779,7 +785,7 @@ private: const glsl_function_param *params, unsigned num_params); /** Constructor for array types */ - glsl_type(const glsl_type *array, unsigned length); + glsl_type(const glsl_type *array, unsigned length, bool was_unsized); /** Constructor for subroutine types */ glsl_type(const char *name); -- 2.5.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev