mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 16:50:10 +01:00
asahi: Fix incorrect BO bitmap reallocations
If the BO handle is greater than 2x what fits inside the current bitmap size, then we end up overflowing. Make sure to always reallocate to a large enough bitmap, not just 2x the previous size. Found while replaying firefox apitraces with looping (which apparently leaks a ton of objects, but that might just be apitrace). Signed-off-by: Asahi Lina <lina@asahilina.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24635>
This commit is contained in:
parent
f1fedb72d3
commit
c247de37bb
1 changed files with 6 additions and 2 deletions
|
|
@ -707,10 +707,14 @@ agx_batch_add_bo(struct agx_batch *batch, struct agx_bo *bo)
|
|||
{
|
||||
/* Double the size of the BO list if we run out, this is amortized O(1) */
|
||||
if (unlikely(bo->handle > agx_batch_bo_list_bits(batch))) {
|
||||
unsigned word_count =
|
||||
MAX2(batch->bo_list.word_count * 2,
|
||||
util_next_power_of_two(BITSET_WORDS(bo->handle + 1)));
|
||||
|
||||
batch->bo_list.set =
|
||||
rerzalloc(batch->ctx, batch->bo_list.set, BITSET_WORD,
|
||||
batch->bo_list.word_count, batch->bo_list.word_count * 2);
|
||||
batch->bo_list.word_count *= 2;
|
||||
batch->bo_list.word_count, word_count);
|
||||
batch->bo_list.word_count = word_count;
|
||||
}
|
||||
|
||||
/* The batch holds a single reference to each BO in the batch, released when
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue