mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 10:20:09 +01:00
nir/print: Factor variable name lookup into a helper
Otherwise, we have a problem when we go to print functions with arguments because their names get added to the hash table during declaration which happens after we print the prototype.
This commit is contained in:
parent
220ac9337b
commit
413a9d3517
1 changed files with 31 additions and 30 deletions
|
|
@ -219,6 +219,35 @@ print_alu_instr(nir_alu_instr *instr, print_state *state)
|
|||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_var_name(nir_variable *var, print_state *state)
|
||||
{
|
||||
if (state->ht == NULL)
|
||||
return var->name;
|
||||
|
||||
assert(state->syms);
|
||||
|
||||
struct hash_entry *entry = _mesa_hash_table_search(state->ht, var);
|
||||
if (entry)
|
||||
return entry->data;
|
||||
|
||||
char *name;
|
||||
|
||||
struct set_entry *set_entry = _mesa_set_search(state->syms, var->name);
|
||||
if (set_entry != NULL) {
|
||||
/* we have a collision with another name, append an @ + a unique index */
|
||||
name = ralloc_asprintf(state->syms, "%s@%u", var->name, state->index++);
|
||||
} else {
|
||||
/* Mark this one as seen */
|
||||
_mesa_set_add(state->syms, var->name);
|
||||
name = var->name;
|
||||
}
|
||||
|
||||
_mesa_hash_table_insert(state->ht, var, name);
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
static void
|
||||
print_var_decl(nir_variable *var, print_state *state)
|
||||
{
|
||||
|
|
@ -239,20 +268,7 @@ print_var_decl(nir_variable *var, print_state *state)
|
|||
|
||||
glsl_print_type(var->type, fp);
|
||||
|
||||
struct set_entry *entry = NULL;
|
||||
if (state->syms)
|
||||
entry = _mesa_set_search(state->syms, var->name);
|
||||
|
||||
char *name;
|
||||
|
||||
if (entry != NULL) {
|
||||
/* we have a collision with another name, append an @ + a unique index */
|
||||
name = ralloc_asprintf(state->syms, "%s@%u", var->name, state->index++);
|
||||
} else {
|
||||
name = var->name;
|
||||
}
|
||||
|
||||
fprintf(fp, " %s", name);
|
||||
fprintf(fp, " %s", get_var_name(var, state));
|
||||
|
||||
if (var->data.mode == nir_var_shader_in ||
|
||||
var->data.mode == nir_var_shader_out ||
|
||||
|
|
@ -296,28 +312,13 @@ print_var_decl(nir_variable *var, print_state *state)
|
|||
}
|
||||
|
||||
fprintf(fp, "\n");
|
||||
|
||||
if (state->syms) {
|
||||
_mesa_set_add(state->syms, name);
|
||||
_mesa_hash_table_insert(state->ht, var, name);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_var(nir_variable *var, print_state *state)
|
||||
{
|
||||
FILE *fp = state->fp;
|
||||
const char *name;
|
||||
if (state->ht) {
|
||||
struct hash_entry *entry = _mesa_hash_table_search(state->ht, var);
|
||||
|
||||
assert(entry != NULL);
|
||||
name = entry->data;
|
||||
} else {
|
||||
name = var->name;
|
||||
}
|
||||
|
||||
fprintf(fp, "%s", name);
|
||||
fprintf(fp, "%s", get_var_name(var, state));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue