> +/* Return true if a resource has a TS, and it is valid for at least one > level */ > +static bool > +etna_resource_has_valid_ts(struct pipe_resource *prsc) > +{ > + struct etna_resource *rsc = etna_resource(prsc); > + > + if (!rsc->ts_bo) > + return false; > + > + for (int level = 0; level <= rsc->base.last_level; level++) > + if (rsc->levels[level].ts_valid) > + return true; > + return false; > +}
> static void > -etna_update_sampler_source(struct pipe_sampler_view *view) > +etna_update_sampler_source(struct etna_context *ctx, struct > pipe_sampler_view *view, int num) > { > struct etna_resource *base = etna_resource(view->texture); > struct etna_resource *to = base, *from = base; > + bool enable_sampler_ts = false; > > if (base->external && etna_resource_newer(etna_resource(base->external), > base)) > from = etna_resource(base->external); > @@ -128,12 +199,19 @@ etna_update_sampler_source(struct pipe_sampler_view > *view) > 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; > + } else if ((to == from) && > + etna_resource_needs_flush(to) && > + etna_resource_has_valid_ts(&to->base)) { I just realized - would it maybe make sense to roll the call to etna_resource_has_valid_ts into etna_resource_needs_flush? etna_resource_needs_flush is only called from two places - here, and in resource_flush, where it also determines whether to do a resolve-to-self, but before presenting the image. There it also only makes sense to do if the resource has at least a valid TS. Wladimir _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev