Mesa (master): etnaviv: upgrade DISCARD_RANGE to DISCARD_WHOLE_RESOURCE if possible

Lucas Stach lynxeye at kemper.freedesktop.org
Thu Jun 8 16:30:14 UTC 2017


Module: Mesa
Branch: master
Commit: 0f888ad4be32d1c66e2749feacb8b88def03fac9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0f888ad4be32d1c66e2749feacb8b88def03fac9

Author: Lucas Stach <l.stach at pengutronix.de>
Date:   Thu May 18 17:05:02 2017 +0200

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 <l.stach at pengutronix.de>
Reviewed-by: Wladimir J. van der Laan <laanwj at gmail.com>

---

 src/gallium/drivers/etnaviv/etnaviv_transfer.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_transfer.c b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
index 8a18dbb8fc..27e1be1957 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




More information about the mesa-commit mailing list