X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fglsl_types.cpp;h=188b72f345ac411cc2435488d1874059a5dfd2dd;hb=3effacf1725d90d14701e59dbbc4ff636b23a04d;hp=44cd2acb61d44b0385409c45405beb3606b18bc2;hpb=5d83820a1d4f6b2390520d2335848d351db13fd7;p=mesa.git diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp index 44cd2acb61d..188b72f345a 100644 --- a/src/compiler/glsl_types.cpp +++ b/src/compiler/glsl_types.cpp @@ -28,7 +28,8 @@ #include "util/hash_table.h" -mtx_t glsl_type::mutex = _MTX_INITIALIZER_NP; +mtx_t glsl_type::mem_mutex = _MTX_INITIALIZER_NP; +mtx_t glsl_type::hash_mutex = _MTX_INITIALIZER_NP; hash_table *glsl_type::array_types = NULL; hash_table *glsl_type::record_types = NULL; hash_table *glsl_type::interface_types = NULL; @@ -40,7 +41,7 @@ void glsl_type::init_ralloc_type_ctx(void) { if (glsl_type::mem_ctx == NULL) { - glsl_type::mem_ctx = ralloc_autofree_context(); + glsl_type::mem_ctx = ralloc_context(NULL); assert(glsl_type::mem_ctx != NULL); } } @@ -62,13 +63,13 @@ glsl_type::glsl_type(GLenum gl_type, STATIC_ASSERT((unsigned(GLSL_TYPE_INT) & 3) == unsigned(GLSL_TYPE_INT)); STATIC_ASSERT((unsigned(GLSL_TYPE_FLOAT) & 3) == unsigned(GLSL_TYPE_FLOAT)); - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); init_ralloc_type_ctx(); assert(name != NULL); this->name = ralloc_strdup(this->mem_ctx, name); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); /* Neither dimension is zero or both dimensions are zero. */ @@ -85,22 +86,17 @@ glsl_type::glsl_type(GLenum gl_type, glsl_base_type base_type, sampler_array(array), sampled_type(type), interface_packing(0), interface_row_major(0), length(0) { - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); init_ralloc_type_ctx(); assert(name != NULL); this->name = ralloc_strdup(this->mem_ctx, name); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); memset(& fields, 0, sizeof(fields)); - if (base_type == GLSL_TYPE_SAMPLER) { - /* Samplers take no storage whatsoever. */ - matrix_columns = vector_elements = 0; - } else { - matrix_columns = vector_elements = 1; - } + matrix_columns = vector_elements = 1; } glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields, @@ -114,7 +110,7 @@ glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields, { unsigned int i; - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); init_ralloc_type_ctx(); assert(name != NULL); @@ -123,29 +119,12 @@ glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields, glsl_struct_field, length); for (i = 0; i < length; i++) { - this->fields.structure[i].type = fields[i].type; + this->fields.structure[i] = fields[i]; this->fields.structure[i].name = ralloc_strdup(this->fields.structure, fields[i].name); - this->fields.structure[i].location = fields[i].location; - this->fields.structure[i].offset = fields[i].offset; - this->fields.structure[i].interpolation = fields[i].interpolation; - this->fields.structure[i].centroid = fields[i].centroid; - this->fields.structure[i].sample = fields[i].sample; - this->fields.structure[i].matrix_layout = fields[i].matrix_layout; - this->fields.structure[i].patch = fields[i].patch; - this->fields.structure[i].image_read_only = fields[i].image_read_only; - this->fields.structure[i].image_write_only = fields[i].image_write_only; - this->fields.structure[i].image_coherent = fields[i].image_coherent; - this->fields.structure[i].image_volatile = fields[i].image_volatile; - this->fields.structure[i].image_restrict = fields[i].image_restrict; - this->fields.structure[i].precision = fields[i].precision; - this->fields.structure[i].explicit_xfb_buffer = - fields[i].explicit_xfb_buffer; - this->fields.structure[i].xfb_buffer = fields[i].xfb_buffer; - this->fields.structure[i].xfb_stride = fields[i].xfb_stride; } - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); } glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields, @@ -161,37 +140,20 @@ glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields, { unsigned int i; - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); init_ralloc_type_ctx(); assert(name != NULL); this->name = ralloc_strdup(this->mem_ctx, name); - this->fields.structure = ralloc_array(this->mem_ctx, - glsl_struct_field, length); + this->fields.structure = rzalloc_array(this->mem_ctx, + glsl_struct_field, length); for (i = 0; i < length; i++) { - this->fields.structure[i].type = fields[i].type; + this->fields.structure[i] = fields[i]; this->fields.structure[i].name = ralloc_strdup(this->fields.structure, fields[i].name); - this->fields.structure[i].location = fields[i].location; - this->fields.structure[i].offset = fields[i].offset; - this->fields.structure[i].interpolation = fields[i].interpolation; - this->fields.structure[i].centroid = fields[i].centroid; - this->fields.structure[i].sample = fields[i].sample; - this->fields.structure[i].matrix_layout = fields[i].matrix_layout; - this->fields.structure[i].patch = fields[i].patch; - this->fields.structure[i].image_read_only = fields[i].image_read_only; - this->fields.structure[i].image_write_only = fields[i].image_write_only; - this->fields.structure[i].image_coherent = fields[i].image_coherent; - this->fields.structure[i].image_volatile = fields[i].image_volatile; - this->fields.structure[i].image_restrict = fields[i].image_restrict; - this->fields.structure[i].precision = fields[i].precision; - this->fields.structure[i].explicit_xfb_buffer = - fields[i].explicit_xfb_buffer; - this->fields.structure[i].xfb_buffer = fields[i].xfb_buffer; - this->fields.structure[i].xfb_stride = fields[i].xfb_stride; } - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); } glsl_type::glsl_type(const glsl_type *return_type, @@ -205,7 +167,7 @@ glsl_type::glsl_type(const glsl_type *return_type, { unsigned int i; - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); init_ralloc_type_ctx(); @@ -224,7 +186,7 @@ glsl_type::glsl_type(const glsl_type *return_type, this->fields.parameters[i + 1].out = params[i].out; } - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); } glsl_type::glsl_type(const char *subroutine_name) : @@ -235,12 +197,12 @@ glsl_type::glsl_type(const char *subroutine_name) : vector_elements(1), matrix_columns(1), length(0) { - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); init_ralloc_type_ctx(); assert(subroutine_name != NULL); this->name = ralloc_strdup(this->mem_ctx, subroutine_name); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); } bool @@ -259,6 +221,19 @@ glsl_type::contains_sampler() const } } +bool +glsl_type::contains_array() const +{ + if (this->is_record() || this->is_interface()) { + for (unsigned int i = 0; i < this->length; i++) { + if (this->fields.structure[i].type->contains_array()) + return true; + } + return false; + } else { + return this->is_array(); + } +} bool glsl_type::contains_integer() const @@ -334,7 +309,7 @@ glsl_type::sampler_index() const { const glsl_type *const t = (this->is_array()) ? this->fields.array : this; - assert(t->is_sampler()); + assert(t->is_sampler() || t->is_image()); switch (t->sampler_dimensionality) { case GLSL_SAMPLER_DIM_1D: @@ -388,6 +363,10 @@ const glsl_type *glsl_type::get_base_type() const return double_type; case GLSL_TYPE_BOOL: return bool_type; + case GLSL_TYPE_UINT64: + return uint64_t_type; + case GLSL_TYPE_INT64: + return int64_t_type; default: return error_type; } @@ -414,6 +393,10 @@ const glsl_type *glsl_type::get_scalar_type() const return double_type; case GLSL_TYPE_BOOL: return bool_type; + case GLSL_TYPE_UINT64: + return uint64_t_type; + case GLSL_TYPE_INT64: + return int64_t_type; default: /* Handle everything else */ return type; @@ -442,6 +425,19 @@ _mesa_glsl_release_types(void) _mesa_hash_table_destroy(glsl_type::interface_types, NULL); glsl_type::interface_types = NULL; } + + if (glsl_type::function_types != NULL) { + _mesa_hash_table_destroy(glsl_type::function_types, NULL); + glsl_type::function_types = NULL; + } + + if (glsl_type::subroutine_types != NULL) { + _mesa_hash_table_destroy(glsl_type::subroutine_types, NULL); + glsl_type::subroutine_types = NULL; + } + + ralloc_free(glsl_type::mem_ctx); + glsl_type::mem_ctx = NULL; } @@ -465,9 +461,9 @@ glsl_type::glsl_type(const glsl_type *array, unsigned length) : */ const unsigned name_length = strlen(array->name) + 10 + 3; - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::mem_mutex); char *const n = (char *) ralloc_size(this->mem_ctx, name_length); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::mem_mutex); if (length == 0) snprintf(n, name_length, "%s[]", array->name); @@ -553,6 +549,31 @@ glsl_type::bvec(unsigned components) } +const glsl_type * +glsl_type::i64vec(unsigned components) +{ + if (components == 0 || components > 4) + return error_type; + + static const glsl_type *const ts[] = { + int64_t_type, i64vec2_type, i64vec3_type, i64vec4_type + }; + return ts[components - 1]; +} + + +const glsl_type * +glsl_type::u64vec(unsigned components) +{ + if (components == 0 || components > 4) + return error_type; + + static const glsl_type *const ts[] = { + uint64_t_type, u64vec2_type, u64vec3_type, u64vec4_type + }; + return ts[components - 1]; +} + const glsl_type * glsl_type::get_instance(unsigned base_type, unsigned rows, unsigned columns) { @@ -576,6 +597,10 @@ glsl_type::get_instance(unsigned base_type, unsigned rows, unsigned columns) return dvec(rows); case GLSL_TYPE_BOOL: return bvec(rows); + case GLSL_TYPE_UINT64: + return u64vec(rows); + case GLSL_TYPE_INT64: + return i64vec(rows); default: return error_type; } @@ -678,6 +703,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, else return samplerExternalOES_type; case GLSL_SAMPLER_DIM_SUBPASS: + case GLSL_SAMPLER_DIM_SUBPASS_MS: return error_type; } case GLSL_TYPE_INT: @@ -707,6 +733,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; case GLSL_SAMPLER_DIM_SUBPASS: + case GLSL_SAMPLER_DIM_SUBPASS_MS: return error_type; } case GLSL_TYPE_UINT: @@ -736,6 +763,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; case GLSL_SAMPLER_DIM_SUBPASS: + case GLSL_SAMPLER_DIM_SUBPASS_MS: return error_type; } default: @@ -749,8 +777,6 @@ const glsl_type * glsl_type::get_image_instance(enum glsl_sampler_dim dim, bool array, glsl_base_type type) { - if (dim == GLSL_SAMPLER_DIM_SUBPASS) - return subpassInput_type; switch (type) { case GLSL_TYPE_FLOAT: switch (dim) { @@ -774,8 +800,11 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, return imageBuffer_type; case GLSL_SAMPLER_DIM_MS: return (array ? image2DMSArray_type : image2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: case GLSL_SAMPLER_DIM_SUBPASS: + return subpassInput_type; + case GLSL_SAMPLER_DIM_SUBPASS_MS: + return subpassInputMS_type; + case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; } case GLSL_TYPE_INT: @@ -800,8 +829,11 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, return iimageBuffer_type; case GLSL_SAMPLER_DIM_MS: return (array ? iimage2DMSArray_type : iimage2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: case GLSL_SAMPLER_DIM_SUBPASS: + return isubpassInput_type; + case GLSL_SAMPLER_DIM_SUBPASS_MS: + return isubpassInputMS_type; + case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; } case GLSL_TYPE_UINT: @@ -826,8 +858,11 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, return uimageBuffer_type; case GLSL_SAMPLER_DIM_MS: return (array ? uimage2DMSArray_type : uimage2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: case GLSL_SAMPLER_DIM_SUBPASS: + return usubpassInput_type; + case GLSL_SAMPLER_DIM_SUBPASS_MS: + return usubpassInputMS_type; + case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; } default: @@ -848,7 +883,7 @@ glsl_type::get_array_instance(const glsl_type *base, unsigned array_size) char key[128]; snprintf(key, sizeof(key), "%p[%u]", (void *) base, array_size); - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::hash_mutex); if (array_types == NULL) { array_types = _mesa_hash_table_create(NULL, _mesa_key_hash_string, @@ -857,9 +892,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); - mtx_lock(&glsl_type::mutex); entry = _mesa_hash_table_insert(array_types, ralloc_strdup(mem_ctx, key), @@ -870,7 +903,7 @@ glsl_type::get_array_instance(const glsl_type *base, unsigned array_size) assert(((glsl_type *) entry->data)->length == array_size); assert(((glsl_type *) entry->data)->fields.array == base); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::hash_mutex); return (glsl_type *) entry->data; } @@ -894,13 +927,9 @@ glsl_type::record_compare(const glsl_type *b, bool match_locations) const * type definitions, and field names to be considered the same type." * * GLSL ES behaves the same (Ver 1.00 Sec 4.2.4, Ver 3.00 Sec 4.2.5). - * - * Note that we cannot force type name check when comparing unnamed - * structure types, these have a unique name assigned during parsing. */ - if (!this->is_anonymous() && !b->is_anonymous()) - if (strcmp(this->name, b->name) != 0) - return false; + if (strcmp(this->name, b->name) != 0) + return false; for (unsigned i = 0; i < this->length; i++) { if (this->fields.structure[i].type != b->fields.structure[i].type) @@ -929,20 +958,23 @@ glsl_type::record_compare(const glsl_type *b, bool match_locations) const if (this->fields.structure[i].patch != b->fields.structure[i].patch) return false; - if (this->fields.structure[i].image_read_only - != b->fields.structure[i].image_read_only) + if (this->fields.structure[i].memory_read_only + != b->fields.structure[i].memory_read_only) return false; - if (this->fields.structure[i].image_write_only - != b->fields.structure[i].image_write_only) + if (this->fields.structure[i].memory_write_only + != b->fields.structure[i].memory_write_only) return false; - if (this->fields.structure[i].image_coherent - != b->fields.structure[i].image_coherent) + if (this->fields.structure[i].memory_coherent + != b->fields.structure[i].memory_coherent) return false; - if (this->fields.structure[i].image_volatile - != b->fields.structure[i].image_volatile) + if (this->fields.structure[i].memory_volatile + != b->fields.structure[i].memory_volatile) return false; - if (this->fields.structure[i].image_restrict - != b->fields.structure[i].image_restrict) + if (this->fields.structure[i].memory_restrict + != b->fields.structure[i].memory_restrict) + return false; + if (this->fields.structure[i].image_format + != b->fields.structure[i].image_format) return false; if (this->fields.structure[i].precision != b->fields.structure[i].precision) @@ -1003,7 +1035,7 @@ glsl_type::get_record_instance(const glsl_struct_field *fields, { const glsl_type key(fields, num_fields, name); - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::hash_mutex); if (record_types == NULL) { record_types = _mesa_hash_table_create(NULL, record_key_hash, @@ -1013,9 +1045,7 @@ glsl_type::get_record_instance(const glsl_struct_field *fields, const struct hash_entry *entry = _mesa_hash_table_search(record_types, &key); if (entry == NULL) { - mtx_unlock(&glsl_type::mutex); const glsl_type *t = new glsl_type(fields, num_fields, name); - mtx_lock(&glsl_type::mutex); entry = _mesa_hash_table_insert(record_types, t, (void *) t); } @@ -1024,7 +1054,7 @@ glsl_type::get_record_instance(const glsl_struct_field *fields, assert(((glsl_type *) entry->data)->length == num_fields); assert(strcmp(((glsl_type *) entry->data)->name, name) == 0); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::hash_mutex); return (glsl_type *) entry->data; } @@ -1039,7 +1069,7 @@ glsl_type::get_interface_instance(const glsl_struct_field *fields, { const glsl_type key(fields, num_fields, packing, row_major, block_name); - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::hash_mutex); if (interface_types == NULL) { interface_types = _mesa_hash_table_create(NULL, record_key_hash, @@ -1049,10 +1079,8 @@ glsl_type::get_interface_instance(const glsl_struct_field *fields, const struct hash_entry *entry = _mesa_hash_table_search(interface_types, &key); if (entry == NULL) { - mtx_unlock(&glsl_type::mutex); const glsl_type *t = new glsl_type(fields, num_fields, packing, row_major, block_name); - mtx_lock(&glsl_type::mutex); entry = _mesa_hash_table_insert(interface_types, t, (void *) t); } @@ -1061,7 +1089,7 @@ glsl_type::get_interface_instance(const glsl_struct_field *fields, assert(((glsl_type *) entry->data)->length == num_fields); assert(strcmp(((glsl_type *) entry->data)->name, block_name) == 0); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::hash_mutex); return (glsl_type *) entry->data; } @@ -1071,7 +1099,7 @@ glsl_type::get_subroutine_instance(const char *subroutine_name) { const glsl_type key(subroutine_name); - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::hash_mutex); if (subroutine_types == NULL) { subroutine_types = _mesa_hash_table_create(NULL, record_key_hash, @@ -1081,9 +1109,7 @@ glsl_type::get_subroutine_instance(const char *subroutine_name) const struct hash_entry *entry = _mesa_hash_table_search(subroutine_types, &key); if (entry == NULL) { - mtx_unlock(&glsl_type::mutex); const glsl_type *t = new glsl_type(subroutine_name); - mtx_lock(&glsl_type::mutex); entry = _mesa_hash_table_insert(subroutine_types, t, (void *) t); } @@ -1091,7 +1117,7 @@ glsl_type::get_subroutine_instance(const char *subroutine_name) assert(((glsl_type *) entry->data)->base_type == GLSL_TYPE_SUBROUTINE); assert(strcmp(((glsl_type *) entry->data)->name, subroutine_name) == 0); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::hash_mutex); return (glsl_type *) entry->data; } @@ -1126,7 +1152,7 @@ glsl_type::get_function_instance(const glsl_type *return_type, { const glsl_type key(return_type, params, num_params); - mtx_lock(&glsl_type::mutex); + mtx_lock(&glsl_type::hash_mutex); if (function_types == NULL) { function_types = _mesa_hash_table_create(NULL, function_key_hash, @@ -1135,9 +1161,7 @@ glsl_type::get_function_instance(const glsl_type *return_type, struct hash_entry *entry = _mesa_hash_table_search(function_types, &key); if (entry == NULL) { - mtx_unlock(&glsl_type::mutex); const glsl_type *t = new glsl_type(return_type, params, num_params); - mtx_lock(&glsl_type::mutex); entry = _mesa_hash_table_insert(function_types, t, (void *) t); } @@ -1147,7 +1171,7 @@ glsl_type::get_function_instance(const glsl_type *return_type, assert(t->base_type == GLSL_TYPE_FUNCTION); assert(t->length == num_params); - mtx_unlock(&glsl_type::mutex); + mtx_unlock(&glsl_type::hash_mutex); return t; } @@ -1263,6 +1287,8 @@ glsl_type::component_slots() const return this->components(); case GLSL_TYPE_DOUBLE: + case GLSL_TYPE_UINT64: + case GLSL_TYPE_INT64: return 2 * this->components(); case GLSL_TYPE_STRUCT: @@ -1278,13 +1304,14 @@ glsl_type::component_slots() const case GLSL_TYPE_ARRAY: return this->length * this->fields.array->component_slots(); + case GLSL_TYPE_SAMPLER: case GLSL_TYPE_IMAGE: - return 1; + return 2; + case GLSL_TYPE_SUBROUTINE: - return 1; + return 1; case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_SAMPLER: case GLSL_TYPE_ATOMIC_UINT: case GLSL_TYPE_VOID: case GLSL_TYPE_ERROR: @@ -1345,6 +1372,8 @@ glsl_type::uniform_locations() const case GLSL_TYPE_INT: case GLSL_TYPE_FLOAT: case GLSL_TYPE_DOUBLE: + case GLSL_TYPE_UINT64: + case GLSL_TYPE_INT64: case GLSL_TYPE_BOOL: case GLSL_TYPE_SAMPLER: case GLSL_TYPE_IMAGE: @@ -1374,6 +1403,8 @@ glsl_type::varying_count() const case GLSL_TYPE_FLOAT: case GLSL_TYPE_DOUBLE: case GLSL_TYPE_BOOL: + case GLSL_TYPE_UINT64: + case GLSL_TYPE_INT64: return 1; case GLSL_TYPE_STRUCT: @@ -1945,8 +1976,12 @@ glsl_type::count_attribute_slots(bool is_vertex_input) const case GLSL_TYPE_INT: case GLSL_TYPE_FLOAT: case GLSL_TYPE_BOOL: + case GLSL_TYPE_SAMPLER: + case GLSL_TYPE_IMAGE: return this->matrix_columns; case GLSL_TYPE_DOUBLE: + case GLSL_TYPE_UINT64: + case GLSL_TYPE_INT64: if (this->vector_elements > 2 && !is_vertex_input) return this->matrix_columns * 2; else @@ -1965,8 +2000,6 @@ glsl_type::count_attribute_slots(bool is_vertex_input) const return this->length * this->fields.array->count_attribute_slots(is_vertex_input); case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: case GLSL_TYPE_ATOMIC_UINT: case GLSL_TYPE_VOID: case GLSL_TYPE_SUBROUTINE: @@ -2011,8 +2044,7 @@ glsl_type::coordinate_components() const * cubemap faces. */ if (sampler_array && - !(base_type == GLSL_TYPE_IMAGE && - sampler_dimensionality == GLSL_SAMPLER_DIM_CUBE)) + !(is_image() && sampler_dimensionality == GLSL_SAMPLER_DIM_CUBE)) size += 1; return size;