From fa8c1b92b7a8beb9ca2608c9b9bef23232214ae7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Samuel=20Iglesias=20Gons=C3=A1lvez?= Date: Thu, 9 Nov 2017 11:15:03 +0100 Subject: [PATCH] glsl: don't run intrastage array validation when the interface type is not an array MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Nicolai Hähnle --- src/compiler/glsl/link_interface_blocks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; -- 2.30.2