etnaviv: optimize sampler source update
authorLucas Stach <l.stach@pengutronix.de>
Fri, 18 Nov 2022 16:58:02 +0000 (17:58 +0100)
committerMarge Bot <emma+marge@anholt.net>
Fri, 14 Jul 2023 14:21:35 +0000 (14:21 +0000)
Now that we track age at the resource level we can optimize
the sampler source update by only copying/flushing the levels
that are actually used by the sampler.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19964>

src/gallium/drivers/etnaviv/etnaviv_texture.c

index f97d1e9..0d1d4a6 100644 (file)
@@ -172,16 +172,18 @@ etna_update_sampler_source(struct pipe_sampler_view *view, int num)
       to = etna_resource(base->texture);
 
    if ((to != from) && etna_resource_older(to, from)) {
-      etna_copy_resource(view->context, &to->base, &from->base, 0,
-                         view->texture->last_level);
+      etna_copy_resource(view->context, &to->base, &from->base,
+                         view->u.tex.first_level,
+                         MIN2(view->texture->last_level, view->u.tex.last_level));
       ctx->dirty |= ETNA_DIRTY_TEXTURE_CACHES;
    } else if ((to == from) && etna_resource_needs_flush(to)) {
       if (etna_can_use_sampler_ts(view, num)) {
          enable_sampler_ts = true;
       } else {
          /* Resolve TS if needed */
-         etna_copy_resource(view->context, &to->base, &from->base, 0,
-                            view->texture->last_level);
+         etna_copy_resource(view->context, &to->base, &from->base,
+                            view->u.tex.first_level,
+                            MIN2(view->texture->last_level, view->u.tex.last_level));
          ctx->dirty |= ETNA_DIRTY_TEXTURE_CACHES;
       }
    }