static void etna_update_sampler_source(struct pipe_sampler_view *view, int num) { struct etna_resource *base = etna_resource(view->texture); struct etna_resource *to = base, *from = base; struct etna_context *ctx = etna_context(view->context); bool enable_sampler_ts = false; if (base->external && etna_resource_newer(etna_resource(base->external), base)) from = etna_resource(base->external); if (base->texture) 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); to->seqno = from->seqno; } else if ((to == from) && etna_resource_needs_flush(to)) { if (ctx->ts_for_sampler_view && etna_can_use_sampler_ts(view, num)) { enable_sampler_ts = true; /* Do not set flush_seqno because the resolve-to-self was bypassed */ } else { /* Resolve TS if needed */ etna_copy_resource(view->context, &to->base, &from->base, 0, view->texture->last_level); to->flush_seqno = from->seqno; } } if (ctx->ts_for_sampler_view) { etna_configure_sampler_ts(ctx->ts_for_sampler_view(view), view, enable_sampler_ts); } }
static void etna_update_sampler_source(struct pipe_sampler_view *view) { struct etna_resource *base = etna_resource(view->texture); struct etna_resource *to = base, *from = base; if (base->external && etna_resource_newer(etna_resource(base->external), base)) from = etna_resource(base->external); if (base->texture) 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); to->seqno = from->seqno; } else if ((to == from) && etna_resource_needs_flush(to)) { /* Resolve TS if needed, remove when adding sampler TS */ etna_copy_resource(view->context, &to->base, &from->base, 0, view->texture->last_level); to->flush_seqno = from->seqno; } }