From: Icecream95 Date: Thu, 25 Jun 2020 07:51:37 +0000 (+1200) Subject: panfrost: Only copy resources when they are in a pending batch X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=be5d06106ffd4ec29884d7cfca660b20eeac6f5b;p=mesa.git panfrost: Only copy resources when they are in a pending batch Fixes a performance regression in alacritty, and rendering is still fine in GLQuake ports. Fixes: 361fb38662f ("panfrost: Copy resources when mapping to avoid waiting for readers") Reviewed-by: Tomeu Vizoso Part-of: --- diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index 9d1905d6c71..303c4a8da55 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -604,10 +604,14 @@ panfrost_transfer_map(struct pipe_context *pctx, !(usage & PIPE_TRANSFER_UNSYNCHRONIZED) && (usage & PIPE_TRANSFER_WRITE) && !(resource->target == PIPE_BUFFER - && !util_ranges_intersect(&rsrc->valid_buffer_range, box->x, box->x + box->width))) { + && !util_ranges_intersect(&rsrc->valid_buffer_range, box->x, box->x + box->width)) && + panfrost_pending_batches_access_bo(ctx, bo)) { - /* It is often faster to copy the whole resource than to flush - * readers */ + /* When a resource to be modified is already being used by a + * pending batch, it is often faster to copy the whole BO than + * to flush and split the frame in two. This also mostly + * mitigates broken depth reload. + */ panfrost_flush_batches_accessing_bo(ctx, bo, PAN_BO_ACCESS_WRITE); panfrost_bo_wait(bo, INT64_MAX, PAN_BO_ACCESS_WRITE);