summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThomas Helland <[email protected]>2016-08-16 22:10:24 +0200
committerTimothy Arceri <[email protected]>2016-09-12 10:48:35 +1000
commite7f91d9de12731345734fe659f48a897b99f61cf (patch)
tree7b09994096a0408361de04ebdae11e40b5b97cb1 /src
parent2228548f8368e296cf0555d5c9b8ce06b23afe59 (diff)
glsl: Change link_functions to use a set
The "locals" hash table is used as a set, so use a set to avoid confusion and also spare some minor memory. Signed-off-by: Thomas Helland <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/compiler/glsl/link_functions.cpp28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/compiler/glsl/link_functions.cpp b/src/compiler/glsl/link_functions.cpp
index 079f3b959ef..b4aae5e015d 100644
--- a/src/compiler/glsl/link_functions.cpp
+++ b/src/compiler/glsl/link_functions.cpp
@@ -26,7 +26,8 @@
#include "glsl_parser_extras.h"
#include "ir.h"
#include "program.h"
-#include "program/hash_table.h"
+#include "util/set.h"
+#include "util/hash_table.h"
#include "linker.h"
static ir_function_signature *
@@ -46,18 +47,18 @@ public:
this->success = true;
this->linked = linked;
- this->locals = hash_table_ctor(0, hash_table_pointer_hash,
- hash_table_pointer_compare);
+ this->locals = _mesa_set_create(NULL, _mesa_hash_pointer,
+ _mesa_key_pointer_equal);
}
~call_link_visitor()
{
- hash_table_dtor(this->locals);
+ _mesa_set_destroy(this->locals, NULL);
}
virtual ir_visitor_status visit(ir_variable *ir)
{
- hash_table_insert(locals, ir, ir);
+ _mesa_set_add(locals, ir);
return visit_continue;
}
@@ -147,14 +148,15 @@ public:
* replace signature stored in a function. One could easily be added,
* but this avoids the need.
*/
- struct hash_table *ht = hash_table_ctor(0, hash_table_pointer_hash,
- hash_table_pointer_compare);
+ struct hash_table *ht = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
+ _mesa_key_pointer_equal);
+
exec_list formal_parameters;
foreach_in_list(const ir_instruction, original, &sig->parameters) {
- assert(const_cast<ir_instruction *>(original)->as_variable());
+ assert(const_cast<ir_instruction *>(original)->as_variable());
- ir_instruction *copy = original->clone(linked, ht);
- formal_parameters.push_tail(copy);
+ ir_instruction *copy = original->clone(linked, ht);
+ formal_parameters.push_tail(copy);
}
linked_sig->replace_parameters(&formal_parameters);
@@ -170,7 +172,7 @@ public:
linked_sig->is_defined = true;
}
- hash_table_dtor(ht);
+ _mesa_hash_table_destroy(ht, NULL);
/* Patch references inside the function to things outside the function
* (i.e., function calls and global variables).
@@ -217,7 +219,7 @@ public:
virtual ir_visitor_status visit(ir_dereference_variable *ir)
{
- if (hash_table_find(locals, ir->var) == NULL) {
+ if (_mesa_set_search(locals, ir->var) == NULL) {
/* The non-function variable must be a global, so try to find the
* variable in the shader's symbol table. If the variable is not
* found, then it's a global that *MUST* be defined in the original
@@ -302,7 +304,7 @@ private:
/**
* Table of variables local to the function.
*/
- hash_table *locals;
+ set *locals;
};
} /* anonymous namespace */