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: 361fb38662 ("panfrost: Copy resources when mapping to avoid waiting for readers")
Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5642>
This commit is contained in:
Icecream95 2020-06-25 19:51:37 +12:00 committed by Marge Bot
parent 66df2ffa36
commit be5d06106f

View File

@ -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);