glsl: replace strncmp("gl_") calls with new is_gl_identifier() helper
Makes things a little easier to read. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -3078,7 +3078,7 @@ validate_identifier(const char *identifier, YYLTYPE loc,
|
|||||||
* OpenGL, and may not be declared in a shader as either a
|
* OpenGL, and may not be declared in a shader as either a
|
||||||
* variable or a function."
|
* variable or a function."
|
||||||
*/
|
*/
|
||||||
if (strncmp(identifier, "gl_", 3) == 0) {
|
if (is_gl_identifier(identifier)) {
|
||||||
_mesa_glsl_error(&loc, state,
|
_mesa_glsl_error(&loc, state,
|
||||||
"identifier `%s' uses reserved `gl_' prefix",
|
"identifier `%s' uses reserved `gl_' prefix",
|
||||||
identifier);
|
identifier);
|
||||||
@@ -3653,7 +3653,7 @@ ast_declarator_list::hir(exec_list *instructions,
|
|||||||
exec_list initializer_instructions;
|
exec_list initializer_instructions;
|
||||||
|
|
||||||
/* Examine var name here since var may get deleted in the next call */
|
/* Examine var name here since var may get deleted in the next call */
|
||||||
bool var_is_gl_id = (strncmp(var->name, "gl_", 3) == 0);
|
bool var_is_gl_id = is_gl_identifier(var->name);
|
||||||
|
|
||||||
ir_variable *earlier =
|
ir_variable *earlier =
|
||||||
get_variable_being_redeclared(var, decl->get_location(), state,
|
get_variable_being_redeclared(var, decl->get_location(), state,
|
||||||
@@ -5403,7 +5403,7 @@ ast_interface_block::hir(exec_list *instructions,
|
|||||||
ir_variable *earlier =
|
ir_variable *earlier =
|
||||||
get_variable_being_redeclared(var, loc, state,
|
get_variable_being_redeclared(var, loc, state,
|
||||||
true /* allow_all_redeclarations */);
|
true /* allow_all_redeclarations */);
|
||||||
if (strncmp(var->name, "gl_", 3) != 0 || earlier == NULL) {
|
if (!is_gl_identifier(var->name) || earlier == NULL) {
|
||||||
_mesa_glsl_error(&loc, state,
|
_mesa_glsl_error(&loc, state,
|
||||||
"redeclaration of gl_PerVertex can only "
|
"redeclaration of gl_PerVertex can only "
|
||||||
"include built-in variables");
|
"include built-in variables");
|
||||||
@@ -5638,7 +5638,7 @@ detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
|
|||||||
gl_FragColor_assigned = true;
|
gl_FragColor_assigned = true;
|
||||||
else if (strcmp(var->name, "gl_FragData") == 0)
|
else if (strcmp(var->name, "gl_FragData") == 0)
|
||||||
gl_FragData_assigned = true;
|
gl_FragData_assigned = true;
|
||||||
else if (strncmp(var->name, "gl_", 3) != 0) {
|
else if (!is_gl_identifier(var->name)) {
|
||||||
if (state->stage == MESA_SHADER_FRAGMENT &&
|
if (state->stage == MESA_SHADER_FRAGMENT &&
|
||||||
var->data.mode == ir_var_shader_out) {
|
var->data.mode == ir_var_shader_out) {
|
||||||
user_defined_fs_output_assigned = true;
|
user_defined_fs_output_assigned = true;
|
||||||
|
@@ -2342,6 +2342,15 @@ prototype_string(const glsl_type *return_type, const char *name,
|
|||||||
const char *
|
const char *
|
||||||
mode_string(const ir_variable *var);
|
mode_string(const ir_variable *var);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Built-in / reserved GL variables names start with "gl_"
|
||||||
|
*/
|
||||||
|
static inline bool
|
||||||
|
is_gl_identifier(const char *s)
|
||||||
|
{
|
||||||
|
return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_';
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
@@ -146,7 +146,7 @@ print_type(FILE *f, const glsl_type *t)
|
|||||||
print_type(f, t->fields.array);
|
print_type(f, t->fields.array);
|
||||||
fprintf(f, " %u)", t->length);
|
fprintf(f, " %u)", t->length);
|
||||||
} else if ((t->base_type == GLSL_TYPE_STRUCT)
|
} else if ((t->base_type == GLSL_TYPE_STRUCT)
|
||||||
&& (strncmp("gl_", t->name, 3) != 0)) {
|
&& !is_gl_identifier(t->name)) {
|
||||||
fprintf(f, "%s@%p", t->name, (void *) t);
|
fprintf(f, "%s@%p", t->name, (void *) t);
|
||||||
} else {
|
} else {
|
||||||
fprintf(f, "%s", t->name);
|
fprintf(f, "%s", t->name);
|
||||||
|
@@ -848,7 +848,7 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
|
|||||||
|
|
||||||
/* FINISHME: Update code to process built-in uniforms!
|
/* FINISHME: Update code to process built-in uniforms!
|
||||||
*/
|
*/
|
||||||
if (strncmp("gl_", var->name, 3) == 0) {
|
if (is_gl_identifier(var->name)) {
|
||||||
uniform_size.num_shader_uniform_components +=
|
uniform_size.num_shader_uniform_components +=
|
||||||
var->type->component_slots();
|
var->type->component_slots();
|
||||||
continue;
|
continue;
|
||||||
@@ -900,7 +900,7 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
|
|||||||
|
|
||||||
/* FINISHME: Update code to process built-in uniforms!
|
/* FINISHME: Update code to process built-in uniforms!
|
||||||
*/
|
*/
|
||||||
if (strncmp("gl_", var->name, 3) == 0)
|
if (is_gl_identifier(var->name))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
parcel.set_and_process(prog, var);
|
parcel.set_and_process(prog, var);
|
||||||
|
@@ -77,8 +77,7 @@ cross_validate_types_and_qualifiers(struct gl_shader_program *prog,
|
|||||||
* correspondence between the vertex language and the
|
* correspondence between the vertex language and the
|
||||||
* fragment language."
|
* fragment language."
|
||||||
*/
|
*/
|
||||||
if (!output->type->is_array()
|
if (!output->type->is_array() || !is_gl_identifier(output->name)) {
|
||||||
|| (strncmp("gl_", output->name, 3) != 0)) {
|
|
||||||
linker_error(prog,
|
linker_error(prog,
|
||||||
"%s shader output `%s' declared as type `%s', "
|
"%s shader output `%s' declared as type `%s', "
|
||||||
"but %s shader input declared as type `%s'\n",
|
"but %s shader input declared as type `%s'\n",
|
||||||
|
Reference in New Issue
Block a user