glsl: Pull interpolation_string() out of ir_variable.

Future patches will need to call this function when there isn't an
ir_varible present to refer to.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Paul Berry
2013-10-22 14:48:08 -07:00
parent 1e3e72e305
commit f65feb5335
4 changed files with 22 additions and 20 deletions

View File

@@ -2111,7 +2111,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
_mesa_glsl_error(loc, state, _mesa_glsl_error(loc, state,
"interpolation qualifier `%s' can only be applied to " "interpolation qualifier `%s' can only be applied to "
"shader inputs or outputs.", "shader inputs or outputs.",
var->interpolation_string()); interpolation_string(var->interpolation));
} }
@@ -2120,7 +2120,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
_mesa_glsl_error(loc, state, _mesa_glsl_error(loc, state,
"interpolation qualifier `%s' cannot be applied to " "interpolation qualifier `%s' cannot be applied to "
"vertex shader inputs or fragment shader outputs", "vertex shader inputs or fragment shader outputs",
var->interpolation_string()); interpolation_string(var->interpolation));
} }
} }

View File

@@ -1616,9 +1616,9 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
const char * const char *
ir_variable::interpolation_string() const interpolation_string(unsigned interpolation)
{ {
switch (this->interpolation) { switch (interpolation) {
case INTERP_QUALIFIER_NONE: return "no"; case INTERP_QUALIFIER_NONE: return "no";
case INTERP_QUALIFIER_SMOOTH: return "smooth"; case INTERP_QUALIFIER_SMOOTH: return "smooth";
case INTERP_QUALIFIER_FLAT: return "flat"; case INTERP_QUALIFIER_FLAT: return "flat";

View File

@@ -312,6 +312,22 @@ struct ir_state_slot {
int swizzle; int swizzle;
}; };
/**
* Get the string value for an interpolation qualifier
*
* \return The string that would be used in a shader to specify \c
* mode will be returned.
*
* This function is used to generate error messages of the form "shader
* uses %s interpolation qualifier", so in the case where there is no
* interpolation qualifier, it returns "no".
*
* This function should only be used on a shader input or output variable.
*/
const char *interpolation_string(unsigned interpolation);
class ir_variable : public ir_instruction { class ir_variable : public ir_instruction {
public: public:
ir_variable(const struct glsl_type *, const char *, ir_variable_mode); ir_variable(const struct glsl_type *, const char *, ir_variable_mode);
@@ -331,20 +347,6 @@ public:
virtual ir_visitor_status accept(ir_hierarchical_visitor *); virtual ir_visitor_status accept(ir_hierarchical_visitor *);
/**
* Get the string value for the interpolation qualifier
*
* \return The string that would be used in a shader to specify \c
* mode will be returned.
*
* This function is used to generate error messages of the form "shader
* uses %s interpolation qualifier", so in the case where there is no
* interpolation qualifier, it returns "no".
*
* This function should only be used on a shader input or output variable.
*/
const char *interpolation_string() const;
/** /**
* Determine how this variable should be interpolated based on its * Determine how this variable should be interpolated based on its
* interpolation qualifier (if present), whether it is gl_Color or * interpolation qualifier (if present), whether it is gl_Color or

View File

@@ -125,9 +125,9 @@ cross_validate_types_and_qualifiers(struct gl_shader_program *prog,
"interpolation qualifier\n", "interpolation qualifier\n",
_mesa_glsl_shader_target_name(producer_type), _mesa_glsl_shader_target_name(producer_type),
output->name, output->name,
output->interpolation_string(), interpolation_string(output->interpolation),
_mesa_glsl_shader_target_name(consumer_type), _mesa_glsl_shader_target_name(consumer_type),
input->interpolation_string()); interpolation_string(input->interpolation));
return; return;
} }
} }