glsl: Make mode_string function globally available

I made this a function (instead of a method of ir_variable) because it
made the change set smaller, and I expect that there will be an overload
that takes an ir_var_mode enum.  Having both functions used the same way
seemed better.

v2: Add missing case for ir_var_system_value.

v3: Change the ir_var_mode_count case to just break.  Move the assertion
and the return outside the switch-statment.  In the unlikely event that
var->mode is an invalid value other than ir_var_mode_count, the
assertion will still fire, and in release builds we won't wind up
returning a garbage pointer.  Suggested by Paul.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
Ian Romanick 2013-09-25 11:44:41 -07:00
parent 2cb760d994
commit f8c579dc0f
3 changed files with 46 additions and 23 deletions

View file

@ -1891,3 +1891,46 @@ vertices_per_prim(GLenum prim)
return 3;
}
}
/**
* Generate a string describing the mode of a variable
*/
const char *
mode_string(const ir_variable *var)
{
switch (var->mode) {
case ir_var_auto:
return (var->read_only) ? "global constant" : "global variable";
case ir_var_uniform:
return "uniform";
case ir_var_shader_in:
return "shader input";
case ir_var_shader_out:
return "shader output";
case ir_var_function_in:
case ir_var_const_in:
return "function input";
case ir_var_function_out:
return "function output";
case ir_var_function_inout:
return "function inout";
case ir_var_system_value:
return "shader input";
case ir_var_temporary:
return "compiler temporary";
case ir_var_mode_count:
break;
}
assert(!"Should not get here.");
return "invalid variable";
}

View file

@ -2306,6 +2306,9 @@ extern char *
prototype_string(const glsl_type *return_type, const char *name,
exec_list *parameters);
const char *
mode_string(const ir_variable *var);
extern "C" {
#endif /* __cplusplus */

View file

@ -557,29 +557,6 @@ validate_geometry_shader_executable(struct gl_shader_program *prog,
}
/**
* Generate a string describing the mode of a variable
*/
static const char *
mode_string(const ir_variable *var)
{
switch (var->mode) {
case ir_var_auto:
return (var->read_only) ? "global constant" : "global variable";
case ir_var_uniform: return "uniform";
case ir_var_shader_in: return "shader input";
case ir_var_shader_out: return "shader output";
case ir_var_const_in:
case ir_var_temporary:
default:
assert(!"Should not get here.");
return "invalid variable";
}
}
/**
* Perform validation of global variables used across multiple shaders
*/