mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 06:30:10 +01:00
panfrost: Make panfrost_bo_wait take a wait_readers bool
panfrost_bo_wait is often used after panfrost_flush_batches_accessing_bo, so make them take similar arguments for consistency. Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5962>
This commit is contained in:
parent
5b38048347
commit
858cc13eb2
4 changed files with 10 additions and 20 deletions
|
|
@ -1391,7 +1391,7 @@ panfrost_get_query_result(struct pipe_context *pipe,
|
|||
case PIPE_QUERY_OCCLUSION_PREDICATE:
|
||||
case PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE:
|
||||
panfrost_flush_batches_accessing_bo(ctx, query->bo, PAN_BO_ACCESS_WRITE);
|
||||
panfrost_bo_wait(query->bo, INT64_MAX, PAN_BO_ACCESS_WRITE);
|
||||
panfrost_bo_wait(query->bo, INT64_MAX, false);
|
||||
|
||||
/* Read back the query results */
|
||||
unsigned *result = (unsigned *) query->bo->cpu;
|
||||
|
|
|
|||
|
|
@ -579,7 +579,7 @@ panfrost_transfer_map(struct pipe_context *pctx,
|
|||
*/
|
||||
|
||||
panfrost_flush_batches_accessing_bo(ctx, bo, PAN_BO_ACCESS_WRITE);
|
||||
panfrost_bo_wait(bo, INT64_MAX, PAN_BO_ACCESS_WRITE);
|
||||
panfrost_bo_wait(bo, INT64_MAX, false);
|
||||
|
||||
create_new_bo = true;
|
||||
copy_resource = true;
|
||||
|
|
@ -591,7 +591,7 @@ panfrost_transfer_map(struct pipe_context *pctx,
|
|||
* batches), we try to allocate a new one to avoid waiting.
|
||||
*/
|
||||
if (panfrost_pending_batches_access_bo(ctx, bo) ||
|
||||
!panfrost_bo_wait(bo, 0, PAN_BO_ACCESS_RW)) {
|
||||
!panfrost_bo_wait(bo, 0, true)) {
|
||||
/* We want the BO to be MMAPed. */
|
||||
uint32_t flags = bo->flags & ~PAN_BO_DELAY_MMAP;
|
||||
struct panfrost_bo *newbo = NULL;
|
||||
|
|
@ -627,10 +627,10 @@ panfrost_transfer_map(struct pipe_context *pctx,
|
|||
} else if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) {
|
||||
if (usage & PIPE_TRANSFER_WRITE) {
|
||||
panfrost_flush_batches_accessing_bo(ctx, bo, true);
|
||||
panfrost_bo_wait(bo, INT64_MAX, PAN_BO_ACCESS_RW);
|
||||
panfrost_bo_wait(bo, INT64_MAX, true);
|
||||
} else if (usage & PIPE_TRANSFER_READ) {
|
||||
panfrost_flush_batches_accessing_bo(ctx, bo, false);
|
||||
panfrost_bo_wait(bo, INT64_MAX, PAN_BO_ACCESS_WRITE);
|
||||
panfrost_bo_wait(bo, INT64_MAX, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -105,16 +105,11 @@ panfrost_bo_free(struct panfrost_bo *bo)
|
|||
|
||||
/* Returns true if the BO is ready, false otherwise.
|
||||
* access_type is encoding the type of access one wants to ensure is done.
|
||||
* Say you want to make sure all writers are done writing, you should pass
|
||||
* PAN_BO_ACCESS_WRITE.
|
||||
* If you want to wait for all users, you should pass PAN_BO_ACCESS_RW.
|
||||
* PAN_BO_ACCESS_READ would work too as waiting for readers implies
|
||||
* waiting for writers as well, but we want to make things explicit and waiting
|
||||
* only for readers is impossible.
|
||||
* Waiting is always done for writers, but if wait_readers is set then readers
|
||||
* are also waited for.
|
||||
*/
|
||||
bool
|
||||
panfrost_bo_wait(struct panfrost_bo *bo, int64_t timeout_ns,
|
||||
uint32_t access_type)
|
||||
panfrost_bo_wait(struct panfrost_bo *bo, int64_t timeout_ns, bool wait_readers)
|
||||
{
|
||||
struct drm_panfrost_wait_bo req = {
|
||||
.handle = bo->gem_handle,
|
||||
|
|
@ -122,9 +117,6 @@ panfrost_bo_wait(struct panfrost_bo *bo, int64_t timeout_ns,
|
|||
};
|
||||
int ret;
|
||||
|
||||
assert(access_type == PAN_BO_ACCESS_WRITE ||
|
||||
access_type == PAN_BO_ACCESS_RW);
|
||||
|
||||
/* If the BO has been exported or imported we can't rely on the cached
|
||||
* state, we need to call the WAIT_BO ioctl.
|
||||
*/
|
||||
|
|
@ -136,8 +128,7 @@ panfrost_bo_wait(struct panfrost_bo *bo, int64_t timeout_ns,
|
|||
/* If the caller only wants to wait for writers and no
|
||||
* writes are pending, we don't have to wait.
|
||||
*/
|
||||
if (access_type == PAN_BO_ACCESS_WRITE &&
|
||||
!(bo->gpu_access & PAN_BO_ACCESS_WRITE))
|
||||
if (!wait_readers && !(bo->gpu_access & PAN_BO_ACCESS_WRITE))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -107,8 +107,7 @@ struct panfrost_bo {
|
|||
};
|
||||
|
||||
bool
|
||||
panfrost_bo_wait(struct panfrost_bo *bo, int64_t timeout_ns,
|
||||
uint32_t access_type);
|
||||
panfrost_bo_wait(struct panfrost_bo *bo, int64_t timeout_ns, bool wait_readers);
|
||||
void
|
||||
panfrost_bo_reference(struct panfrost_bo *bo);
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue