Module: Mesa Branch: main Commit: a818f7b68676a08075ad314e13cc114306830525 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a818f7b68676a08075ad314e13cc114306830525
Author: Jesse Natalie <[email protected]> Date: Tue Nov 16 07:05:45 2021 -0800 d3d12: Fix incorrect hash table usage I'd assumed that since insert didn't take a deleter, it was find-or-insert, not insert-or-replace. This caused a bo reference leak if the same bo was used more than once in a batch. Fixes: fde36d79920 ("d3d12: Don't wait for GPU reads to do CPU reads") Reviewed By: Bill Kristiansen <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13819> --- src/gallium/drivers/d3d12/d3d12_batch.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_batch.cpp b/src/gallium/drivers/d3d12/d3d12_batch.cpp index d45ba6e6b2d..9cb571a19e6 100644 --- a/src/gallium/drivers/d3d12/d3d12_batch.cpp +++ b/src/gallium/drivers/d3d12/d3d12_batch.cpp @@ -230,9 +230,11 @@ d3d12_batch_reference_resource(struct d3d12_batch *batch, struct d3d12_resource *res, bool write) { - hash_entry *entry = _mesa_hash_table_insert(batch->bos, res->bo, NULL); - if (entry->data == NULL) + hash_entry *entry = _mesa_hash_table_search(batch->bos, res->bo); + if (entry == NULL) { d3d12_bo_reference(res->bo); + entry = _mesa_hash_table_insert(batch->bos, res->bo, NULL); + } size_t new_data = write ? batch_bo_reference_written : batch_bo_reference_read; size_t old_data = (size_t)entry->data; entry->data = (void*)(old_data | new_data);
