Mesa (master): glsl: fix variable ordering in the output_read_remover
Alex Deucher
agd5f at kemper.freedesktop.org
Mon Apr 9 22:12:56 UTC 2012
Module: Mesa
Branch: master
Commit: 4b06280ea34ce0e2ef9ec36df792c28c3828eabd
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4b06280ea34ce0e2ef9ec36df792c28c3828eabd
Author: Vadim Girlin <vadimgirlin at gmail.com>
Date: Thu Apr 5 05:07:03 2012 +0400
glsl: fix variable ordering in the output_read_remover
Use the hash of the variable name instead of the pointer value.
Signed-off-by: Vadim Girlin <vadimgirlin at gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/glsl/lower_output_reads.cpp | 18 +++++++++++++++++-
1 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/src/glsl/lower_output_reads.cpp b/src/glsl/lower_output_reads.cpp
index 415b541..90d71b0 100644
--- a/src/glsl/lower_output_reads.cpp
+++ b/src/glsl/lower_output_reads.cpp
@@ -54,11 +54,27 @@ public:
virtual ir_visitor_status visit_leave(class ir_function_signature *);
};
+/**
+ * Hash function for the output variables - computes the hash of the name.
+ * NOTE: We're using the name string to ensure that the hash doesn't depend
+ * on any random factors, otherwise the output_read_remover could produce
+ * the random order of the assignments.
+ *
+ * NOTE: If you want to reuse this function please take into account that
+ * generally the names of the variables are non-unique.
+ */
+static unsigned
+hash_table_var_hash(const void *key)
+{
+ const ir_variable * var = static_cast<const ir_variable *>(key);
+ return hash_table_string_hash(var->name);
+}
+
output_read_remover::output_read_remover()
{
mem_ctx = ralloc_context(NULL);
replacements =
- hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare);
+ hash_table_ctor(0, hash_table_var_hash, hash_table_pointer_compare);
}
output_read_remover::~output_read_remover()
More information about the mesa-commit
mailing list