OSDN Git Service

glsl: assert on incoherent point mode layout-id-qualifier validation
authorAndres Gomez <agomez@igalia.com>
Fri, 11 Nov 2016 19:03:24 +0000 (21:03 +0200)
committerAndres Gomez <agomez@igalia.com>
Fri, 25 Nov 2016 11:18:30 +0000 (13:18 +0200)
The point mode value in an ast_type_qualifier can only be true if the
flag is already set since this layout-id-qualifier can only be or not
be present in a shader.

Hence, it is useless to check for its value if the flag is already
set. Just replaced with an assert.

V2: assert instead of checking for coherence and raising a compilation
    error. Suggested by Timothy.

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
src/compiler/glsl/ast_type.cpp

index 6aedeaa..1adb1f4 100644 (file)
@@ -316,10 +316,8 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc,
    }
 
    if (q.flags.q.point_mode) {
-      if (this->flags.q.point_mode && this->point_mode != q.point_mode) {
-         _mesa_glsl_error(loc, state, "conflicting point mode used");
-         return false;
-      }
+      /* Point mode can only be true if the flag is set. */
+      assert (!this->flags.q.point_mode || (this->point_mode && q.point_mode));
       this->flags.q.point_mode = 1;
       this->point_mode = q.point_mode;
    }
@@ -582,12 +580,10 @@ ast_type_qualifier::validate_in_qualifier(YYLTYPE *loc,
                        "conflicting ordering specified");
    }
 
-   if (state->in_qualifier->flags.q.point_mode && this->flags.q.point_mode
-       && state->in_qualifier->point_mode != this->point_mode) {
-      r = false;
-      _mesa_glsl_error(loc, state,
-                       "conflicting point mode specified");
-   }
+   /* Point mode can only be true if the flag is set. */
+   assert (!state->in_qualifier->flags.q.point_mode
+           || !this->flags.q.point_mode
+           || (state->in_qualifier->point_mode && this->point_mode));
 
    return r;
 }