mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
gallium: fix broken hashing for vertex translation
It seems we get hash collisions fairly easily and the code as it was didn't deal with that properly. I think we need a simpler hashing interface...
This commit is contained in:
parent
43be7a4819
commit
333976c90a
1 changed files with 13 additions and 5 deletions
|
|
@ -70,13 +70,21 @@ static struct translate *cached_translate(struct pt_fetch *fetch,
|
|||
struct cso_hash_iter iter = cso_hash_find(fetch->hash, hash_key);
|
||||
struct translate *translate = 0;
|
||||
|
||||
if (cso_hash_iter_is_null(iter)) {
|
||||
while (!cso_hash_iter_is_null(iter)) {
|
||||
void *iter_data = cso_hash_iter_data(iter);
|
||||
if (memcmp(iter_data, key, sizeof(*key)) == 0) {
|
||||
/* found */
|
||||
translate = cso_hash_iter_data(iter);
|
||||
break;
|
||||
}
|
||||
iter = cso_hash_iter_next(iter);
|
||||
/*debug_printf("\tOK with %d\n", hash_key);*/
|
||||
}
|
||||
|
||||
if (!translate) {
|
||||
/* create/insert */
|
||||
translate = translate_create(key);
|
||||
cso_hash_insert(fetch->hash, hash_key, translate);
|
||||
/*debug_printf("\tCREATED with %d\n", hash_key);*/
|
||||
} else {
|
||||
translate = cso_hash_iter_data(iter);
|
||||
/*debug_printf("\tOK with %d\n", hash_key);*/
|
||||
}
|
||||
|
||||
return translate;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue