[Mesa-dev] [PATCH] compiler/glsl: Allow the sequence operator to be a constant expression in GLSL ES versions prior to GLSL ES 3.0

Lars Hamre chemecse at gmail.com
Mon Mar 14 16:17:05 UTC 2016


Allow the sequence operator to be a constant expression in GLSL ES versions prior
to GLSL ES 3.0

Fixes the following piglit test:
   /all/spec/glsl-es-1.0/compiler/array-sized-by-sequence-in-parenthesis.vert

This mirrors the logic from process_initializer() which performs the
same check for constant variable initialization with sequence operators.

Section 4.3.3 (Constant Expressions) of the GLSL 4.30.9 spec and of the
GLSL ES 3.00.4 spec say that the result of a sequence operator is not a
constant expression; however, we should not mandate that for lower GLSL
versions.

---
 src/compiler/glsl/ast_to_hir.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
index 5262bd8..4037468 100644
--- a/src/compiler/glsl/ast_to_hir.cpp
+++ b/src/compiler/glsl/ast_to_hir.cpp
@@ -2125,7 +2125,9 @@ process_array_size(exec_node *node,
    }

    ir_constant *const size = ir->constant_expression_value();
-   if (size == NULL || array_size->has_sequence_subexpression()) {
+   if (size == NULL ||
+       (state->is_version(430, 300) &&
+        array_size->has_sequence_subexpression())) {
       _mesa_glsl_error(& loc, state, "array size must be a "
                        "constant valued expression");
       return 0;
--
2.5.0



More information about the mesa-dev mailing list