summaryrefslogtreecommitdiffstats
path: root/src/glsl
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2013-03-15 15:09:48 -0700
committerIan Romanick <[email protected]>2013-04-08 15:17:05 -0700
commitf9d8ca281750baf07ba623f86121f5a875f9bd40 (patch)
tree8cd355fc3dd1a26de36af929cc9bd55a0ca5dfb4 /src/glsl
parent2c333a878cd4a93ac32e658cc0e30b9bf9589e9d (diff)
glsl: Minor code compaction in _mesa_ast_array_index_to_hir
Also, document the reason for not checking for type->is_array in some of the bound-checking cases. Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/ast_array_index.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/glsl/ast_array_index.cpp b/src/glsl/ast_array_index.cpp
index 9331bef4bde..5f3ae8e6661 100644
--- a/src/glsl/ast_array_index.cpp
+++ b/src/glsl/ast_array_index.cpp
@@ -60,17 +60,9 @@ _mesa_ast_array_index_to_hir(void *mem_ctx,
ir_constant *const const_index = idx->constant_expression_value();
if (const_index != NULL) {
const int idx = const_index->value.i[0];
- const char *type_name;
+ const char *type_name = "error";
unsigned bound = 0;
- if (array->type->is_matrix()) {
- type_name = "matrix";
- } else if (array->type->is_vector()) {
- type_name = "vector";
- } else {
- type_name = "array";
- }
-
/* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec:
*
* "It is illegal to declare an array with a size, and then
@@ -81,15 +73,22 @@ _mesa_ast_array_index_to_hir(void *mem_ctx,
*/
if (array->type->is_matrix()) {
if (array->type->row_type()->vector_elements <= idx) {
+ type_name = "matrix";
bound = array->type->row_type()->vector_elements;
}
} else if (array->type->is_vector()) {
if (array->type->vector_elements <= idx) {
+ type_name = "vector";
bound = array->type->vector_elements;
}
} else {
+ /* glsl_type::array_size() returns 0 for non-array types. This means
+ * that we don't need to verify that the type is an array before
+ * doing the bounds checking.
+ */
if ((array->type->array_size() > 0)
&& (array->type->array_size() <= idx)) {
+ type_name = "array";
bound = array->type->array_size();
}
}