glsl: Make it possible to disable a variable in the symbol table.
In later patches, we'll use this in order to implement the required behaviour that after the gl_PerVertex interface block has been redeclared, only members of the redeclared interface block may be used. v2: Update the function name and comment to clarify that we aren't actually removing the variable from the symbol table, just disabling it. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -256,3 +256,18 @@ symbol_table_entry *glsl_symbol_table::get_entry(const char *name)
|
||||
return (symbol_table_entry *)
|
||||
_mesa_symbol_table_find_symbol(table, -1, name);
|
||||
}
|
||||
|
||||
void
|
||||
glsl_symbol_table::disable_variable(const char *name)
|
||||
{
|
||||
/* Ideally we would remove the variable's entry from the symbol table, but
|
||||
* that would be difficult. Fortunately, since this is only used for
|
||||
* built-in variables, it won't be possible for the shader to re-introduce
|
||||
* the variable later, so all we really need to do is to make sure that
|
||||
* further attempts to access it using get_variable() will return NULL.
|
||||
*/
|
||||
symbol_table_entry *entry = get_entry(name);
|
||||
if (entry != NULL) {
|
||||
entry->v = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,6 +121,14 @@ public:
|
||||
enum ir_variable_mode mode);
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
* Disable a previously-added variable so that it no longer appears to be
|
||||
* in the symbol table. This is necessary when gl_PerVertex is redeclared,
|
||||
* to ensure that previously-available built-in variables are no longer
|
||||
* available.
|
||||
*/
|
||||
void disable_variable(const char *name);
|
||||
|
||||
private:
|
||||
symbol_table_entry *get_entry(const char *name);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user