From: Lucas Stach Date: Thu, 18 May 2017 15:05:02 +0000 (+0200) Subject: etnaviv: upgrade DISCARD_RANGE to DISCARD_WHOLE_RESOURCE if possible X-Git-Tag: android-x86-8.1-r1~12860 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0f888ad4be32d1c66e2749feacb8b88def03fac9;p=android-x86%2Fexternal-mesa.git etnaviv: upgrade DISCARD_RANGE to DISCARD_WHOLE_RESOURCE if possible Stolen from VC4. As we don't do any fancy reallocation tricks yet, it's possible to upgrade also coherent mappings and shared resources. Signed-off-by: Lucas Stach Reviewed-by: Wladimir J. van der Laan --- diff --git a/src/gallium/drivers/etnaviv/etnaviv_transfer.c b/src/gallium/drivers/etnaviv/etnaviv_transfer.c index 8a18dbb8fc3..27e1be19579 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_transfer.c +++ b/src/gallium/drivers/etnaviv/etnaviv_transfer.c @@ -157,6 +157,20 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc, assert(level <= prsc->last_level); + /* Upgrade DISCARD_RANGE to WHOLE_RESOURCE if the whole resource is + * being mapped. If we add buffer reallocation to avoid CPU/GPU sync this + * check needs to be extended to coherent mappings and shared resources. + */ + if ((usage & PIPE_TRANSFER_DISCARD_RANGE) && + !(usage & PIPE_TRANSFER_UNSYNCHRONIZED) && + prsc->last_level == 0 && + prsc->width0 == box->width && + prsc->height0 == box->height && + prsc->depth0 == box->depth && + prsc->array_size == 1) { + usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE; + } + if (rsc->texture && !etna_resource_newer(rsc, etna_resource(rsc->texture))) { /* We have a texture resource which is the same age or newer than the * render resource. Use the texture resource, which avoids bouncing