mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
panfrost: Move the fence creation in panfrost_flush()
panfrost_flush() is about to be reworked to flush all pending batches, but we want the fence to block on the last one. Let's move the fence creation logic in panfrost_flush() to prepare for this situation. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
This commit is contained in:
parent
835439b84f
commit
2fc91a16ab
4 changed files with 15 additions and 15 deletions
|
|
@ -1316,7 +1316,6 @@ panfrost_queue_draw(struct panfrost_context *ctx)
|
|||
|
||||
static void
|
||||
panfrost_submit_frame(struct panfrost_context *ctx, bool flush_immediate,
|
||||
struct pipe_fence_handle **fence,
|
||||
struct panfrost_batch *batch)
|
||||
{
|
||||
panfrost_batch_submit(batch);
|
||||
|
|
@ -1324,14 +1323,14 @@ panfrost_submit_frame(struct panfrost_context *ctx, bool flush_immediate,
|
|||
/* If visual, we can stall a frame */
|
||||
|
||||
if (!flush_immediate)
|
||||
panfrost_drm_force_flush_fragment(ctx, fence);
|
||||
panfrost_drm_force_flush_fragment(ctx);
|
||||
|
||||
ctx->last_fragment_flushed = false;
|
||||
ctx->last_batch = batch;
|
||||
|
||||
/* If readback, flush now (hurts the pipelined performance) */
|
||||
if (flush_immediate)
|
||||
panfrost_drm_force_flush_fragment(ctx, fence);
|
||||
panfrost_drm_force_flush_fragment(ctx);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1460,7 +1459,13 @@ panfrost_flush(
|
|||
bool flush_immediate = /*flags & PIPE_FLUSH_END_OF_FRAME*/true;
|
||||
|
||||
/* Submit the frame itself */
|
||||
panfrost_submit_frame(ctx, flush_immediate, fence, batch);
|
||||
panfrost_submit_frame(ctx, flush_immediate, batch);
|
||||
|
||||
if (fence) {
|
||||
struct panfrost_fence *f = panfrost_fence_create(ctx);
|
||||
pipe->screen->fence_reference(pipe->screen, fence, NULL);
|
||||
*fence = (struct pipe_fence_handle *)f;
|
||||
}
|
||||
|
||||
/* Prepare for the next frame */
|
||||
panfrost_invalidate_frame(ctx);
|
||||
|
|
|
|||
|
|
@ -297,6 +297,9 @@ pan_context(struct pipe_context *pcontext)
|
|||
return (struct panfrost_context *) pcontext;
|
||||
}
|
||||
|
||||
struct panfrost_fence *
|
||||
panfrost_fence_create(struct panfrost_context *ctx);
|
||||
|
||||
struct pipe_context *
|
||||
panfrost_create_context(struct pipe_screen *screen, void *priv, unsigned flags);
|
||||
|
||||
|
|
|
|||
|
|
@ -294,7 +294,7 @@ panfrost_drm_submit_vs_fs_batch(struct panfrost_batch *batch, bool has_draws)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static struct panfrost_fence *
|
||||
struct panfrost_fence *
|
||||
panfrost_fence_create(struct panfrost_context *ctx)
|
||||
{
|
||||
struct pipe_context *gallium = (struct pipe_context *) ctx;
|
||||
|
|
@ -321,8 +321,7 @@ panfrost_fence_create(struct panfrost_context *ctx)
|
|||
}
|
||||
|
||||
void
|
||||
panfrost_drm_force_flush_fragment(struct panfrost_context *ctx,
|
||||
struct pipe_fence_handle **fence)
|
||||
panfrost_drm_force_flush_fragment(struct panfrost_context *ctx)
|
||||
{
|
||||
struct pipe_context *gallium = (struct pipe_context *) ctx;
|
||||
struct panfrost_screen *screen = pan_screen(gallium->screen);
|
||||
|
|
@ -334,12 +333,6 @@ panfrost_drm_force_flush_fragment(struct panfrost_context *ctx,
|
|||
/* The job finished up, so we're safe to clean it up now */
|
||||
panfrost_free_batch(ctx->last_batch);
|
||||
}
|
||||
|
||||
if (fence) {
|
||||
struct panfrost_fence *f = panfrost_fence_create(ctx);
|
||||
gallium->screen->fence_reference(gallium->screen, fence, NULL);
|
||||
*fence = (struct pipe_fence_handle *)f;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned
|
||||
|
|
|
|||
|
|
@ -134,8 +134,7 @@ panfrost_drm_export_bo(struct panfrost_screen *screen, const struct panfrost_bo
|
|||
int
|
||||
panfrost_drm_submit_vs_fs_batch(struct panfrost_batch *batch, bool has_draws);
|
||||
void
|
||||
panfrost_drm_force_flush_fragment(struct panfrost_context *ctx,
|
||||
struct pipe_fence_handle **fence);
|
||||
panfrost_drm_force_flush_fragment(struct panfrost_context *ctx);
|
||||
unsigned
|
||||
panfrost_drm_query_gpu_version(struct panfrost_screen *screen);
|
||||
int
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue