mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
util/set: Fix the _mesa_set_clear function to not leave tombstones.
This implementation was broken and should have just been the same as the hash_table_clear() one, which I copied over here. It was setting all formerly-present entries to deleted, yet also setting deleted_entries to 0. This meant that all new searches or additions after clearing would have to reprobe the whole table until a rehash happened, and that rehash would be delayed because we violated the deleted_entries invariant. No statistically significant performance difference on softpipe KHR-GL33.texture_swizzle.functional runtime (n=18) Fixes:5c075b0855("util/set: add a set_clear function") Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7244> (cherry picked from commit2afdd94f86)
This commit is contained in:
parent
966b55c6da
commit
f4d976d591
2 changed files with 9 additions and 5 deletions
|
|
@ -1012,7 +1012,7 @@
|
|||
"description": "util/set: Fix the _mesa_set_clear function to not leave tombstones.",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "5c075b085585b1629022d40ce7af9448c7d0e906"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -223,13 +223,17 @@ _mesa_set_clear(struct set *set, void (*delete_function)(struct set_entry *entry
|
|||
if (!set)
|
||||
return;
|
||||
|
||||
set_foreach (set, entry) {
|
||||
if (delete_function)
|
||||
struct set_entry *entry;
|
||||
|
||||
for (entry = set->table; entry != set->table + set->size; entry++) {
|
||||
if (entry_is_present(entry) && delete_function != NULL)
|
||||
delete_function(entry);
|
||||
entry->key = deleted_key;
|
||||
|
||||
entry->key = NULL;
|
||||
}
|
||||
|
||||
set->entries = set->deleted_entries = 0;
|
||||
set->entries = 0;
|
||||
set->deleted_entries = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue