Mesa (master): glsl: fix segfault when indirect indexing a buffer variable which is an array

Samuel Iglesias Gonsálvez samuelig at kemper.freedesktop.org
Mon Oct 19 09:26:23 UTC 2015


Module: Mesa
Branch: master
Commit: 6f3954618b0fe273af76af79ce9ec56566b79b2a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6f3954618b0fe273af76af79ce9ec56566b79b2a

Author: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
Date:   Mon Oct 19 10:37:14 2015 +0200

glsl: fix segfault when indirect indexing a buffer variable which is an array

Fixes a regression added by bb5aeb854915ba67abc56257f830d002c956439e.

Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
Reviewed-by: Timothy Arceri <t_arceri at yahoo.com.au>

---

 src/glsl/lower_ubo_reference.cpp |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/glsl/lower_ubo_reference.cpp b/src/glsl/lower_ubo_reference.cpp
index 1fbb09d..e818c04 100644
--- a/src/glsl/lower_ubo_reference.cpp
+++ b/src/glsl/lower_ubo_reference.cpp
@@ -284,7 +284,8 @@ interface_field_name(void *mem_ctx, char *base_name, ir_rvalue *d,
             if (array_index->type != glsl_type::uint_type)
                array_index = i2u(array_index);
 
-            if (a->array->type->fields.array->is_array()) {
+            if (a->array->type->is_array() &&
+                a->array->type->fields.array->is_array()) {
                ir_constant *base_size = new(mem_ctx)
                   ir_constant(a->array->type->fields.array->arrays_of_arrays_size());
                array_index = mul(array_index, base_size);




More information about the mesa-commit mailing list