zink: add a pipe_context::fence_server_sync hook

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9626>
This commit is contained in:
Mike Blumenkrantz 2020-10-27 15:01:17 -04:00
parent 6d005ba3fc
commit 49efef9d55
3 changed files with 20 additions and 0 deletions

View file

@ -2340,6 +2340,7 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
ctx->base.draw_vbo = zink_draw_vbo;
ctx->base.launch_grid = zink_launch_grid;
ctx->base.fence_server_sync = zink_fence_server_sync;
ctx->base.flush = zink_flush;
ctx->base.memory_barrier = zink_memory_barrier;
ctx->base.texture_barrier = zink_texture_barrier;

View file

@ -158,6 +158,22 @@ fence_finish(struct pipe_screen *pscreen, struct pipe_context *pctx,
timeout_ns);
}
void
zink_fence_server_sync(struct pipe_context *pctx, struct pipe_fence_handle *pfence)
{
struct zink_fence *fence = zink_fence(pfence);
if (pctx && fence->deferred_ctx == pctx)
return;
if (fence->deferred_ctx) {
zink_curr_batch(zink_context(pctx))->has_work = true;
/* this must be the current batch */
pctx->flush(pctx, NULL, 0);
}
zink_fence_finish(zink_screen(pctx->screen), pctx, fence, PIPE_TIMEOUT_INFINITE);
}
void
zink_screen_fence_init(struct pipe_screen *pscreen)
{

View file

@ -64,6 +64,9 @@ bool
zink_fence_finish(struct zink_screen *screen, struct pipe_context *pctx, struct zink_fence *fence,
uint64_t timeout_ns);
void
zink_fence_server_sync(struct pipe_context *pctx, struct pipe_fence_handle *pfence);
void
zink_screen_fence_init(struct pipe_screen *pscreen);