Tapani Pälli <tapani.pa...@intel.com> writes: > Implementation previously used case value itself as the key, however > afterhash implementation change by ee02a5e we cannot use 0 as key. > Patch uses _mesa_hash_data to formulate a suitable key for this hash. > > Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97309 > --- > src/compiler/glsl/ast_to_hir.cpp | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/src/compiler/glsl/ast_to_hir.cpp > b/src/compiler/glsl/ast_to_hir.cpp > index e03a6e3..53fc4d6 100644 > --- a/src/compiler/glsl/ast_to_hir.cpp > +++ b/src/compiler/glsl/ast_to_hir.cpp > @@ -6180,9 +6180,11 @@ ast_case_label::hir(exec_list *instructions, > /* Stuff a dummy value in to allow processing to continue. */ > label_const = new(ctx) ir_constant(0); > } else { > + unsigned hash_key = _mesa_hash_data(&label_const->value.u[0], > + sizeof(unsigned)); > ast_expression *previous_label = (ast_expression *) > hash_table_find(state->switch_state.labels_ht, > - (void *)(uintptr_t)label_const->value.u[0]); > + (void *)(uintptr_t)hash_key); > > if (previous_label) { > YYLTYPE loc = this->test_value->get_location(); > @@ -6193,7 +6195,7 @@ ast_case_label::hir(exec_list *instructions, > } else { > hash_table_insert(state->switch_state.labels_ht, > this->test_value, > - (void *)(uintptr_t)label_const->value.u[0]); > + (void *)(uintptr_t)hash_key);
_mesa_hash_data(...) could *also* be zero. It'll only probably be that for about one possible input value, but still. Instead, we should change from _mesa_pointer_hash/compare to a thing using _mesa_hash_data in HT setup, and pass pointer to the value.u[0] here.
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev