glsl: Slightly restructure error generation in validate_explicit_location
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 25 Sep 2013 20:53:56 +0000 (13:53 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 30 Oct 2013 20:49:30 +0000 (13:49 -0700)
Use mode_string to get the name of the variable mode.  Slightly change
the control flow.  Both of these changes make it easier to support
separate shader object location layouts.

The format of the message changed because mode_string can return a
string like "shader output".  This would result in an awkward message
like "vertex shader shader output..."

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/glsl/ast_to_hir.cpp

index d30463aa61367e7cc5ba577eb8118294aa9f8a50..68dd777838059e07a604df955f97f11cb145b70f 100644 (file)
@@ -2053,7 +2053,6 @@ validate_explicit_location(const struct ast_type_qualifier *qual,
                            YYLTYPE *loc)
 {
    bool fail = false;
-   const char *string = "";
 
    /* In the vertex shader only shader inputs can be given explicit
     * locations.
@@ -2063,10 +2062,11 @@ validate_explicit_location(const struct ast_type_qualifier *qual,
     */
    switch (state->target) {
    case vertex_shader:
-      if (var->mode != ir_var_shader_in) {
-         fail = true;
-         string = "input";
+      if (var->mode == ir_var_shader_in) {
+         break;
       }
+
+      fail = true;
       break;
 
    case geometry_shader:
@@ -2076,19 +2076,19 @@ validate_explicit_location(const struct ast_type_qualifier *qual,
       return;
 
    case fragment_shader:
-      if (var->mode != ir_var_shader_out) {
-         fail = true;
-         string = "output";
+      if (var->mode == ir_var_shader_out) {
+         break;
       }
+
+      fail = true;
       break;
    };
 
    if (fail) {
       _mesa_glsl_error(loc, state,
-                       "only %s shader %s variables can be given an "
-                       "explicit location",
-                       _mesa_glsl_shader_target_name(state->target),
-                       string);
+                       "%s cannot be given an explicit location in %s shader",
+                       mode_string(var),
+                      _mesa_glsl_shader_target_name(state->target));
    } else {
       var->explicit_location = true;