[Mesa-dev] [PATCH] glsl: Don't allow const on out or inout function parameters

Ian Romanick idr at freedesktop.org
Thu Aug 8 16:54:39 PDT 2013


From: Ian Romanick <ian.d.romanick at intel.com>

Fixes piglit tests const-inout-parameter.frag and
const-out-parameter.frag.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Cc: "9.2" mesa-stable at lists.freedesktop.org
Cc: Matt Turner <mattst88 at gmail.com>
---
This currently causes a regression in
relaxed-parameter-qualifier-ordering.vert.  I believe that test is
incorrect (by using const with out and inout parameters), and a patch
has been sent to the piglit list already.

 src/glsl/ast_to_hir.cpp | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 482ab3c..6266456 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -1967,6 +1967,21 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
 		       _mesa_glsl_shader_target_name(state->target));
    }
 
+   /* Section 6.1.1 (Function Calling Conventions) of the GLSL 1.10 spec says:
+    *
+    *     "However, the const qualifier cannot be used with out or inout."
+    *
+    * The same section of the GLSL 4.40 spec further clarifies this saying:
+    *
+    *     "The const qualifier cannot be used with out or inout, or a
+    *     compile-time error results."
+    */
+   if (is_parameter && qual->flags.q.constant && qual->flags.q.out) {
+      _mesa_glsl_error(loc, state,
+		       "`const' may not be applied to `out' or `inout' "
+		       "function parameters");
+   }
+
    /* If there is no qualifier that changes the mode of the variable, leave
     * the setting alone.
     */
-- 
1.8.1.4



More information about the mesa-dev mailing list