mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
panfrost: Compact the bo_access readers array
Previously, the array bo_access->readers was only cleared when there were no unsignaled fences, which in some situations never happened. That resulted in the array having thousands of NULL pointers, but only a handful of active readers. With this patch, all the unsignaled readers are moved to the front of the array, effectively building a new array only containing the active readers in-place. This results in the readers array usually only having a couple of elements. Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3419> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3419>
This commit is contained in:
parent
c0ba9000d2
commit
5e8386c606
1 changed files with 9 additions and 4 deletions
|
|
@ -346,7 +346,9 @@ panfrost_bo_access_gc_fences(struct panfrost_context *ctx,
|
|||
access->writer = NULL;
|
||||
}
|
||||
|
||||
unsigned nreaders = 0;
|
||||
struct panfrost_batch_fence **readers_array = util_dynarray_begin(&access->readers);
|
||||
struct panfrost_batch_fence **new_readers = readers_array;
|
||||
|
||||
util_dynarray_foreach(&access->readers, struct panfrost_batch_fence *,
|
||||
reader) {
|
||||
if (!(*reader))
|
||||
|
|
@ -356,12 +358,15 @@ panfrost_bo_access_gc_fences(struct panfrost_context *ctx,
|
|||
panfrost_batch_fence_unreference(*reader);
|
||||
*reader = NULL;
|
||||
} else {
|
||||
nreaders++;
|
||||
/* Build a new array of only unsignaled fences in-place */
|
||||
*(new_readers++) = *reader;
|
||||
}
|
||||
}
|
||||
|
||||
if (!nreaders)
|
||||
util_dynarray_clear(&access->readers);
|
||||
if (!util_dynarray_resize(&access->readers, struct panfrost_batch_fence *,
|
||||
new_readers - readers_array) &&
|
||||
new_readers != readers_array)
|
||||
unreachable("Invalid dynarray access->readers");
|
||||
}
|
||||
|
||||
/* Collect signaled fences to keep the kernel-side syncobj-map small. The
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue