mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
freedreno: allow fence_fd fences to be recycled
This allows us to avoid a no-op flush if there has been no rendering, but we hit pctx->flush(PIPE_FLUSH_FENCE_FD). Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6177>
This commit is contained in:
parent
07a49bf597
commit
141b295311
3 changed files with 8 additions and 1 deletions
|
|
@ -60,7 +60,8 @@ fd_context_flush(struct pipe_context *pctx, struct pipe_fence_handle **fencep,
|
|||
* not an "fd" fence, which results in eglDupNativeFenceFDANDROID()
|
||||
* errors.
|
||||
*/
|
||||
if (flags & PIPE_FLUSH_FENCE_FD)
|
||||
if ((flags & PIPE_FLUSH_FENCE_FD) && ctx->last_fence &&
|
||||
!fd_fence_is_fd(ctx->last_fence))
|
||||
fd_fence_ref(&ctx->last_fence, NULL);
|
||||
|
||||
/* if no rendering since last flush, ie. app just decided it needed
|
||||
|
|
|
|||
|
|
@ -150,6 +150,11 @@ int fd_fence_get_fd(struct pipe_screen *pscreen,
|
|||
return os_dupfd_cloexec(fence->fence_fd);
|
||||
}
|
||||
|
||||
bool fd_fence_is_fd(struct pipe_fence_handle *fence)
|
||||
{
|
||||
return fence->fence_fd != -1;
|
||||
}
|
||||
|
||||
struct pipe_fence_handle * fd_fence_create(struct fd_batch *batch)
|
||||
{
|
||||
return fence_create(batch->ctx, batch, 0, -1);
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ void fd_fence_server_sync(struct pipe_context *pctx,
|
|||
struct pipe_fence_handle *fence);
|
||||
int fd_fence_get_fd(struct pipe_screen *pscreen,
|
||||
struct pipe_fence_handle *pfence);
|
||||
bool fd_fence_is_fd(struct pipe_fence_handle *fence);
|
||||
|
||||
struct fd_batch;
|
||||
struct pipe_fence_handle * fd_fence_create(struct fd_batch *batch);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue