mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
panfrost: Add a panfrost_flush_batches_accessing_bo() helper
This will allow us to only flush batches touching a specific resource, which is particularly useful when the CPU needs to access a BO. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
a45984b244
commit
82399b58d3
2 changed files with 35 additions and 0 deletions
|
|
@ -952,6 +952,37 @@ panfrost_flush_all_batches(struct panfrost_context *ctx, bool wait)
|
|||
util_dynarray_fini(&syncobjs);
|
||||
}
|
||||
|
||||
void
|
||||
panfrost_flush_batches_accessing_bo(struct panfrost_context *ctx,
|
||||
struct panfrost_bo *bo,
|
||||
uint32_t access_type)
|
||||
{
|
||||
struct panfrost_bo_access *access;
|
||||
struct hash_entry *hentry;
|
||||
|
||||
/* It doesn't make any to flush only the readers. */
|
||||
assert(access_type == PAN_BO_ACCESS_WRITE ||
|
||||
access_type == PAN_BO_ACCESS_RW);
|
||||
|
||||
hentry = _mesa_hash_table_search(ctx->accessed_bos, bo);
|
||||
access = hentry ? hentry->data : NULL;
|
||||
if (!access)
|
||||
return;
|
||||
|
||||
if (access_type & PAN_BO_ACCESS_WRITE && access->writer &&
|
||||
access->writer->batch)
|
||||
panfrost_batch_submit(access->writer->batch);
|
||||
|
||||
if (!(access_type & PAN_BO_ACCESS_READ))
|
||||
return;
|
||||
|
||||
util_dynarray_foreach(&access->readers, struct panfrost_batch_fence *,
|
||||
reader) {
|
||||
if (*reader && (*reader)->batch)
|
||||
panfrost_batch_submit((*reader)->batch);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
panfrost_batch_set_requirements(struct panfrost_batch *batch)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -185,6 +185,10 @@ panfrost_batch_create_bo(struct panfrost_batch *batch, size_t size,
|
|||
void
|
||||
panfrost_flush_all_batches(struct panfrost_context *ctx, bool wait);
|
||||
|
||||
void
|
||||
panfrost_flush_batches_accessing_bo(struct panfrost_context *ctx,
|
||||
struct panfrost_bo *bo, uint32_t flags);
|
||||
|
||||
void
|
||||
panfrost_batch_set_requirements(struct panfrost_batch *batch);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue