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

Author: Wladimir J. van der Laan <[email protected]>
Date:   Sat Oct 28 16:01:49 2017 +0200

etnaviv: Don't flush on transfer when UNSYNCHRONIZED

Structure code to only flush when we will potentially call cpu_prep. This
prevents spurious flushes in applications that heavily rely on u_uploader.

Signed-off-by: Wladimir J. van der Laan <[email protected]>
Reviewed-by: Lucas Stach <[email protected]>
Signed-off-by: Lucas Stach <[email protected]>

---

 src/gallium/drivers/etnaviv/etnaviv_transfer.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_transfer.c 
b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
index 08ec1987d8..c389920709 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_transfer.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
@@ -243,18 +243,6 @@ etna_transfer_map(struct pipe_context *pctx, struct 
pipe_resource *prsc,
 
    struct etna_resource_level *res_level = &rsc->levels[level];
 
-   /*
-    * Always flush if we have the temporary resource and have a copy to this
-    * outstanding. Otherwise infer flush requirement from resource access and
-    * current GPU usage (reads must wait for GPU writes, writes must have
-    * exclusive access to the buffer).
-    */
-   if ((trans->rsc && (etna_resource(trans->rsc)->status & 
ETNA_PENDING_WRITE)) ||
-       (!trans->rsc &&
-        (((usage & PIPE_TRANSFER_READ) && (rsc->status & ETNA_PENDING_WRITE)) 
||
-        ((usage & PIPE_TRANSFER_WRITE) && rsc->status))))
-      pctx->flush(pctx, NULL, 0);
-
    /* XXX we don't handle PIPE_TRANSFER_FLUSH_EXPLICIT; this flag can be 
ignored
     * when mapping in-place,
     * but when not in place we need to fire off the copy operation in
@@ -312,6 +300,18 @@ etna_transfer_map(struct pipe_context *pctx, struct 
pipe_resource *prsc,
    if (trans->rsc || !(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) {
       uint32_t prep_flags = 0;
 
+      /*
+       * Always flush if we have the temporary resource and have a copy to this
+       * outstanding. Otherwise infer flush requirement from resource access 
and
+       * current GPU usage (reads must wait for GPU writes, writes must have
+       * exclusive access to the buffer).
+       */
+      if ((trans->rsc && (etna_resource(trans->rsc)->status & 
ETNA_PENDING_WRITE)) ||
+          (!trans->rsc &&
+           (((usage & PIPE_TRANSFER_READ) && (rsc->status & 
ETNA_PENDING_WRITE)) ||
+           ((usage & PIPE_TRANSFER_WRITE) && rsc->status))))
+         pctx->flush(pctx, NULL, 0);
+
       if (usage & PIPE_TRANSFER_READ)
          prep_flags |= DRM_ETNA_PREP_READ;
       if (usage & PIPE_TRANSFER_WRITE)

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to