[Mesa-dev] [PATCH 10/22] glsl: Only flag RowMajor on matrix-type variables.

Eric Anholt eric at anholt.net
Tue Jul 31 15:01:39 PDT 2012


We were only propagating it to the API when the variable was a matrix type,
but we were still tripping over it in lower_ubo_reference when it was set on a
vector.
---
 src/glsl/ast_to_hir.cpp |   14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 1c54991..02fe66b 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -4054,11 +4054,15 @@ ast_uniform_block::hir(exec_list *instructions,
 	 ubo_var->Type = var->type;
 	 ubo_var->Buffer = ubo - state->uniform_blocks;
 	 ubo_var->Offset = 0; /* Assigned at link time. */
-	 ubo_var->RowMajor = block_row_major;
-	 if (decl_list->type->qualifier.flags.q.row_major)
-	    ubo_var->RowMajor = true;
-	 else if (decl_list->type->qualifier.flags.q.column_major)
-	    ubo_var->RowMajor = false;
+
+	 if (var->type->is_matrix() ||
+	     (var->type->is_array() && var->type->fields.array->is_matrix())) {
+	    ubo_var->RowMajor = block_row_major;
+	    if (decl_list->type->qualifier.flags.q.row_major)
+	       ubo_var->RowMajor = true;
+	    else if (decl_list->type->qualifier.flags.q.column_major)
+	       ubo_var->RowMajor = false;
+	 }
 
 	 /* From the GL_ARB_uniform_buffer_object spec:
 	  *
-- 
1.7.10.4



More information about the mesa-dev mailing list