Module: Mesa Branch: main Commit: 587046ed251e395d6153d13a3419615364f06029 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=587046ed251e395d6153d13a3419615364f06029
Author: Boris Brezillon <[email protected]> Date: Fri May 7 12:33:14 2021 +0200 panfrost: Make pan_blit() return the tiler job pointer The Vulkan driver needs to patch job headers when re-issueing a command buffer. Return the tiler job pointer to allow that. Signed-off-by: Boris Brezillon <[email protected]> Reviewed-by: Alyssa Rosenzweig <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12552> --- src/panfrost/lib/pan_blitter.c | 30 ++++++++++++++++++------------ src/panfrost/lib/pan_blitter.h | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/panfrost/lib/pan_blitter.c b/src/panfrost/lib/pan_blitter.c index 641e2966801..8a28e64e83f 100644 --- a/src/panfrost/lib/pan_blitter.c +++ b/src/panfrost/lib/pan_blitter.c @@ -1159,7 +1159,7 @@ pan_preload_emit_midgard_tiler_job(struct pan_pool *desc_pool, false, false, 0, 0, &job, true); } -static void +static struct panfrost_ptr pan_blit_emit_midgard_tiler_job(struct pan_pool *desc_pool, struct pan_scoreboard *scoreboard, mali_ptr src_coords, mali_ptr dst_coords, @@ -1192,9 +1192,10 @@ pan_blit_emit_midgard_tiler_job(struct pan_pool *desc_pool, panfrost_add_job(desc_pool, scoreboard, MALI_JOB_TYPE_TILER, false, false, 0, 0, &job, false); + return job; } -static void +static struct panfrost_ptr pan_blit_emit_bifrost_tiler_job(struct pan_pool *desc_pool, struct pan_scoreboard *scoreboard, mali_ptr src_coords, mali_ptr dst_coords, @@ -1233,6 +1234,7 @@ pan_blit_emit_bifrost_tiler_job(struct pan_pool *desc_pool, panfrost_add_job(desc_pool, scoreboard, MALI_JOB_TYPE_TILER, false, false, 0, 0, &job, false); + return job; } static void @@ -1483,14 +1485,14 @@ pan_blit_next_surface(struct pan_blit_context *ctx) return true; } -void +struct panfrost_ptr pan_blit(struct pan_blit_context *ctx, struct pan_pool *pool, struct pan_scoreboard *scoreboard, mali_ptr tsd, mali_ptr tiler) { if (ctx->dst.cur_layer < 0 || ctx->dst.cur_layer > ctx->dst.last_layer) - return; + return (struct panfrost_ptr){ 0 }; int32_t layer = ctx->dst.cur_layer - ctx->dst.layer_offset; float src_z; @@ -1510,17 +1512,21 @@ pan_blit(struct pan_blit_context *ctx, pan_pool_upload_aligned(pool, src_rect, sizeof(src_rect), 64); + struct panfrost_ptr job; + if (pan_is_bifrost(pool->dev)) { - pan_blit_emit_bifrost_tiler_job(pool, scoreboard, - src_coords, ctx->position, - ctx->textures, ctx->samplers, - ctx->vpd, ctx->rsd, tsd, tiler); + job = pan_blit_emit_bifrost_tiler_job(pool, scoreboard, + src_coords, ctx->position, + ctx->textures, ctx->samplers, + ctx->vpd, ctx->rsd, tsd, tiler); } else { - pan_blit_emit_midgard_tiler_job(pool, scoreboard, - src_coords, ctx->position, - ctx->textures, ctx->samplers, - ctx->vpd, ctx->rsd, tsd); + job = pan_blit_emit_midgard_tiler_job(pool, scoreboard, + src_coords, ctx->position, + ctx->textures, ctx->samplers, + ctx->vpd, ctx->rsd, tsd); } + + return job; } static uint32_t pan_blit_shader_key_hash(const void *key) diff --git a/src/panfrost/lib/pan_blitter.h b/src/panfrost/lib/pan_blitter.h index 0f8cbb7a482..f3380ee1ea8 100644 --- a/src/panfrost/lib/pan_blitter.h +++ b/src/panfrost/lib/pan_blitter.h @@ -102,7 +102,7 @@ pan_blit_ctx_init(struct panfrost_device *dev, bool pan_blit_next_surface(struct pan_blit_context *ctx); -void +struct panfrost_ptr pan_blit(struct pan_blit_context *ctx, struct pan_pool *pool, struct pan_scoreboard *scoreboard,
