mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 11:28:05 +02:00
zink: fix descriptor pool free iterating
these arrays are sparsely allocated, and using pop() on them will
fail to access some elements
Fixes: cf7c17a7af ("zink: rework descriptor pool overflow")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21246>
This commit is contained in:
parent
16c019142b
commit
ffd91ee7a8
1 changed files with 5 additions and 5 deletions
|
|
@ -1406,11 +1406,11 @@ void
|
||||||
zink_batch_descriptor_deinit(struct zink_screen *screen, struct zink_batch_state *bs)
|
zink_batch_descriptor_deinit(struct zink_screen *screen, struct zink_batch_state *bs)
|
||||||
{
|
{
|
||||||
for (unsigned i = 0; i < ZINK_DESCRIPTOR_BASE_TYPES; i++) {
|
for (unsigned i = 0; i < ZINK_DESCRIPTOR_BASE_TYPES; i++) {
|
||||||
while (util_dynarray_contains(&bs->dd.pools[i], struct zink_descriptor_pool_multi *)) {
|
for (unsigned j = 0; j < bs->dd.pools[i].capacity / sizeof(struct zink_descriptor_pool_multi *); j++) {
|
||||||
struct zink_descriptor_pool_multi *mpool = util_dynarray_pop(&bs->dd.pools[i], struct zink_descriptor_pool_multi *);
|
struct zink_descriptor_pool_multi **mppool = util_dynarray_element(&bs->dd.pools[i], struct zink_descriptor_pool_multi *, j);
|
||||||
if (mpool) {
|
if (mppool && *mppool) {
|
||||||
deinit_multi_pool_overflow(screen, mpool);
|
deinit_multi_pool_overflow(screen, *mppool);
|
||||||
multi_pool_destroy(screen, mpool);
|
multi_pool_destroy(screen, *mppool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
util_dynarray_fini(&bs->dd.pools[i]);
|
util_dynarray_fini(&bs->dd.pools[i]);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue