summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2015-12-18 14:39:02 -0800
committerJason Ekstrand <jason.ekstrand@intel.com>2015-12-23 13:49:56 -0800
commit413a9d351746a0e3ecb274a8f39dcefec7010edd (patch)
tree1ca173154a98964edd85e869351a58f9bc01598c /src
parent220ac9337b24c7099ac3534ba14c61592e1266ae (diff)
downloadexternal_mesa3d-413a9d351746a0e3ecb274a8f39dcefec7010edd.zip
external_mesa3d-413a9d351746a0e3ecb274a8f39dcefec7010edd.tar.gz
external_mesa3d-413a9d351746a0e3ecb274a8f39dcefec7010edd.tar.bz2
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.
Diffstat (limited to 'src')
-rw-r--r--src/glsl/nir/nir_print.c61
1 files changed, 31 insertions, 30 deletions
diff --git a/src/glsl/nir/nir_print.c b/src/glsl/nir/nir_print.c
index 10f46ce..26b1cbb 100644
--- a/src/glsl/nir/nir_print.c
+++ b/src/glsl/nir/nir_print.c
@@ -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