diff options
author | Ian Romanick <[email protected]> | 2014-09-08 18:25:15 -0700 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2014-09-27 18:56:39 +0100 |
commit | d9444533aa0839b9661da8f98c0052f7c6ee5207 (patch) | |
tree | 168ee4cd7deb404b62ce861aa2f48dc7799bcd1a | |
parent | 9328440ef742e84092f0f418caebc4e1ea2a7c52 (diff) |
glsl: Make sure row-major array-of-structure get correct layout
Whether or not the field is row-major (because it might be a bvec2 or
something) does not affect the array itself. We need to know whether an
array element in its entirety is row-major.
Signed-off-by: Ian Romanick <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83506
Cc: [email protected]
(cherry picked from commit 5c75270c344815b15ef73e83421192fd7de35972)
-rw-r--r-- | src/glsl/lower_ubo_reference.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/glsl/lower_ubo_reference.cpp b/src/glsl/lower_ubo_reference.cpp index 4ae1aac7765..f3920b362ce 100644 --- a/src/glsl/lower_ubo_reference.cpp +++ b/src/glsl/lower_ubo_reference.cpp @@ -301,7 +301,14 @@ lower_ubo_reference_visitor::handle_rvalue(ir_rvalue **rvalue) deref = deref_array->array->as_dereference(); break; } else { - array_stride = deref_array->type->std140_size(row_major); + /* Whether or not the field is row-major (because it might be a + * bvec2 or something) does not affect the array itself. We need + * to know whether an array element in its entirety is row-major. + */ + const bool array_row_major = + is_dereferenced_thing_row_major(deref_array); + + array_stride = deref_array->type->std140_size(array_row_major); array_stride = glsl_align(array_stride, 16); } |