diff --git a/src/gallium/drivers/freedreno/freedreno_context.c b/src/gallium/drivers/freedreno/freedreno_context.c index ce8a6ba0477..1df71550efa 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.c +++ b/src/gallium/drivers/freedreno/freedreno_context.c @@ -60,8 +60,6 @@ fd_context_flush(struct pipe_context *pctx, struct pipe_fence_handle **fencep, if (ctx->screen->reorder) fd_bc_flush(ctx, flags & PIPE_FLUSH_DEFERRED); fd_bc_dump(ctx, "%p: NULL batch, remaining:\n", ctx); - if (!(flags & PIPE_FLUSH_DEFERRED)) - tc_driver_internal_flush_notify(ctx->tc); return; } @@ -140,12 +138,6 @@ fd_context_flush(struct pipe_context *pctx, struct pipe_fence_handle **fencep, fd_bc_dump(ctx, "%p: remaining:\n", ctx); out: - /* If we just flushed all rendering out of the batch cache, then inform TC - * that it can use the resource_busy callback to check if they're still busy. - */ - if (!(flags & PIPE_FLUSH_DEFERRED)) - tc_driver_internal_flush_notify(ctx->tc); - if (fencep) fd_fence_ref(fencep, fence); @@ -711,7 +703,7 @@ fd_context_init_tc(struct pipe_context *pctx, unsigned flags) fd_replace_buffer_storage, fd_fence_create_unflushed, fd_resource_busy, - true, + false, &ctx->tc); uint64_t total_ram; diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c index d696f02ac0f..89d27504286 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.c +++ b/src/gallium/drivers/freedreno/freedreno_resource.c @@ -312,20 +312,15 @@ translate_usage(unsigned usage) return op; } -/* This is called by TC to check if a buffer is idle on the GPU so it can do - * unsynchronized mappings from the frontend. - * - * Note that TC tracks what buffers are outstanding in its queue in between - * pctx->flush() calls (which we inform it of through - * tc_driver_internal_flush_notify()) so we don't need to go digging in our - * batch cache to check for usages. - */ bool fd_resource_busy(struct pipe_screen *pscreen, struct pipe_resource *prsc, unsigned usage) { struct fd_resource *rsc = fd_resource(prsc); + if (pending(rsc, !!(usage & PIPE_MAP_WRITE))) + return true; + if (resource_busy(rsc, translate_usage(usage))) return true;