summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamuel Iglesias Gonsálvez <[email protected]>2017-11-09 11:15:03 +0100
committerSamuel Iglesias Gonsálvez <[email protected]>2017-12-04 09:32:57 +0100
commitfa8c1b92b7a8beb9ca2608c9b9bef23232214ae7 (patch)
treef34fe6f8e0b479ac4178611dff6371ee83ce7be0 /src
parentfc6d55952d08ea03d133c1178871b0d4d289a0cf (diff)
glsl: don't run intrastage array validation when the interface type is not an array
We validate that the interface block array type's definition matches. However, previously, the function could be called if an non-array interface block has different type definitions -for example, when the precision qualifier differs in a GLSL ES shader, we would create two different types-, and it would return invalid as both definitions are non-arrays. We fix this by specifying that at least one definition should be an array to call the validation. Signed-off-by: Samuel Iglesias Gonsálvez <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/compiler/glsl/link_interface_blocks.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/compiler/glsl/link_interface_blocks.cpp b/src/compiler/glsl/link_interface_blocks.cpp
index c2c3b58f821..ce90d916075 100644
--- a/src/compiler/glsl/link_interface_blocks.cpp
+++ b/src/compiler/glsl/link_interface_blocks.cpp
@@ -137,7 +137,7 @@ intrastage_match(ir_variable *a,
/* If a block is an array then it must match across the shader.
* Unsized arrays are also processed and matched agaist sized arrays.
*/
- if (b->type != a->type &&
+ if (b->type != a->type && (b->type->is_array() || a->type->is_array()) &&
(b->is_interface_instance() || a->is_interface_instance()) &&
!validate_intrastage_arrays(prog, b, a))
return false;