diff options
author | Ian Romanick <[email protected]> | 2013-03-15 15:09:48 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2013-04-08 15:17:05 -0700 |
commit | f9d8ca281750baf07ba623f86121f5a875f9bd40 (patch) | |
tree | 8cd355fc3dd1a26de36af929cc9bd55a0ca5dfb4 /src | |
parent | 2c333a878cd4a93ac32e658cc0e30b9bf9589e9d (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')
-rw-r--r-- | src/glsl/ast_array_index.cpp | 17 |
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(); } } |