etnaviv: only flush resource to self if no scanout buffer exists
authorLucas Stach <l.stach@pengutronix.de>
Mon, 26 Jun 2017 10:25:08 +0000 (12:25 +0200)
committerChristian Gmeiner <christian.gmeiner@gmail.com>
Mon, 26 Jun 2017 18:06:01 +0000 (20:06 +0200)
Currently a resource flush may trigger a self resolve, even if a scanout buffer
exists, but is up to date. If a scanout buffer exists we only ever want to
flush the resource to the scanout buffer. This fixes a performance regression.

Fixes: dda956340ce9 (etnaviv: resolve tile status when flushing resource)
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
src/gallium/drivers/etnaviv/etnaviv_clear_blit.c

index e4620a3015e9e1eaabee17435dc862b2a4e98122..80967be3f93db4f10cc5d99242a4235bb8a70f63 100644 (file)
@@ -602,10 +602,11 @@ etna_flush_resource(struct pipe_context *pctx, struct pipe_resource *prsc)
 {
    struct etna_resource *rsc = etna_resource(prsc);
 
-   if (rsc->scanout &&
-       etna_resource_older(etna_resource(rsc->scanout->prime), rsc)) {
-      etna_copy_resource(pctx, rsc->scanout->prime, prsc, 0, 0);
-      etna_resource(rsc->scanout->prime)->seqno = rsc->seqno;
+   if (rsc->scanout) {
+      if (etna_resource_older(etna_resource(rsc->scanout->prime), rsc)) {
+         etna_copy_resource(pctx, rsc->scanout->prime, prsc, 0, 0);
+         etna_resource(rsc->scanout->prime)->seqno = rsc->seqno;
+      }
    } else if (etna_resource_needs_flush(rsc)) {
       etna_copy_resource(pctx, prsc, prsc, 0, 0);
       rsc->flush_seqno = rsc->seqno;