summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/glsl')
-rw-r--r--src/compiler/glsl/ast_to_hir.cpp2
-rw-r--r--src/compiler/glsl/builtin_variables.cpp1
-rw-r--r--src/compiler/glsl/link_uniform_blocks.cpp5
-rw-r--r--src/compiler/glsl/linker.cpp6
-rw-r--r--src/compiler/glsl/tests/general_ir_test.cpp2
-rw-r--r--src/compiler/glsl/tests/varyings_test.cpp1
6 files changed, 15 insertions, 2 deletions
diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
index 6e2f253a77d..adedcbbdf3c 100644
--- a/src/compiler/glsl/ast_to_hir.cpp
+++ b/src/compiler/glsl/ast_to_hir.cpp
@@ -7516,6 +7516,8 @@ ast_interface_block::hir(exec_list *instructions,
glsl_type::get_interface_instance(fields,
num_variables,
packing,
+ matrix_layout ==
+ GLSL_MATRIX_LAYOUT_ROW_MAJOR,
this->block_name);
unsigned component_size = block_type->contains_double() ? 8 : 4;
diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp
index 10a87502b41..ca266a4c37c 100644
--- a/src/compiler/glsl/builtin_variables.cpp
+++ b/src/compiler/glsl/builtin_variables.cpp
@@ -352,6 +352,7 @@ per_vertex_accumulator::construct_interface_instance() const
{
return glsl_type::get_interface_instance(this->fields, this->num_fields,
GLSL_INTERFACE_PACKING_STD140,
+ false,
"gl_PerVertex");
}
diff --git a/src/compiler/glsl/link_uniform_blocks.cpp b/src/compiler/glsl/link_uniform_blocks.cpp
index bb423c55410..c0bdfa934e0 100644
--- a/src/compiler/glsl/link_uniform_blocks.cpp
+++ b/src/compiler/glsl/link_uniform_blocks.cpp
@@ -247,6 +247,7 @@ process_block_array(struct uniform_block_array_elements *ub_array, char **name,
blocks[i].UniformBufferSize = 0;
blocks[i]._Packing = gl_uniform_block_packing(type->interface_packing);
+ blocks[i]._RowMajor = type->get_interface_row_major();
parcel->process(type, blocks[i].Name);
@@ -354,6 +355,7 @@ create_buffer_blocks(void *mem_ctx, struct gl_context *ctx,
blocks[i].UniformBufferSize = 0;
blocks[i]._Packing =
gl_uniform_block_packing(block_type->interface_packing);
+ blocks[i]._RowMajor = block_type->get_interface_row_major();
parcel.process(block_type,
b->has_instance_name ? block_type->name : "");
@@ -486,6 +488,9 @@ link_uniform_blocks_are_compatible(const gl_uniform_block *a,
if (a->_Packing != b->_Packing)
return false;
+ if (a->_RowMajor != b->_RowMajor)
+ return false;
+
for (unsigned i = 0; i < a->NumUniforms; i++) {
if (strcmp(a->Uniforms[i].Name, b->Uniforms[i].Name) != 0)
return false;
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 0b3c195219a..af0e29d44f4 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -1513,9 +1513,10 @@ private:
}
glsl_interface_packing packing =
(glsl_interface_packing) type->interface_packing;
+ bool row_major = (bool) type->interface_row_major;
const glsl_type *new_ifc_type =
glsl_type::get_interface_instance(fields, num_fields,
- packing, type->name);
+ packing, row_major, type->name);
delete [] fields;
return new_ifc_type;
}
@@ -1543,9 +1544,10 @@ private:
}
glsl_interface_packing packing =
(glsl_interface_packing) ifc_type->interface_packing;
+ bool row_major = (bool) ifc_type->interface_row_major;
const glsl_type *new_ifc_type =
glsl_type::get_interface_instance(fields, num_fields, packing,
- ifc_type->name);
+ row_major, ifc_type->name);
delete [] fields;
for (unsigned i = 0; i < num_fields; i++) {
if (interface_vars[i] != NULL)
diff --git a/src/compiler/glsl/tests/general_ir_test.cpp b/src/compiler/glsl/tests/general_ir_test.cpp
index 217305bf847..57917f33734 100644
--- a/src/compiler/glsl/tests/general_ir_test.cpp
+++ b/src/compiler/glsl/tests/general_ir_test.cpp
@@ -38,6 +38,7 @@ TEST(ir_variable_constructor, interface)
glsl_type::get_interface_instance(f,
ARRAY_SIZE(f),
GLSL_INTERFACE_PACKING_STD140,
+ false,
"simple_interface");
static const char name[] = "named_instance";
@@ -63,6 +64,7 @@ TEST(ir_variable_constructor, interface_array)
glsl_type::get_interface_instance(f,
ARRAY_SIZE(f),
GLSL_INTERFACE_PACKING_STD140,
+ false,
"simple_interface");
const glsl_type *const interface_array =
diff --git a/src/compiler/glsl/tests/varyings_test.cpp b/src/compiler/glsl/tests/varyings_test.cpp
index 7643e1bbbf9..eb134c9e8f2 100644
--- a/src/compiler/glsl/tests/varyings_test.cpp
+++ b/src/compiler/glsl/tests/varyings_test.cpp
@@ -83,6 +83,7 @@ link_varyings::link_varyings()
glsl_type::get_interface_instance(f,
ARRAY_SIZE(f),
GLSL_INTERFACE_PACKING_STD140,
+ false,
"simple_interface");
}