When passing render buffers from EGL clients to a wayland compositor,
the resource tile status must be resolved because otherwise the tile
status is lost in the transfer and cleared parts of the buffer will
contain old contents.
The same applies when sampling directly from a renderable resource.
lst: Add seqno tracking, to skip flush when not needed.
Fixes: aadcb5e94b35 ("etnaviv: enable TS, but disable autodisable")
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
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;
}
}
struct pipe_resource base;
struct renderonly_scanout *scanout;
uint32_t seqno;
+ uint32_t flush_seqno;
/* only lod 0 used for non-texture buffers */
/* Layout for surface (tiled, multitiled, split tiled, ...) */
return (int)(a->seqno - b->seqno) < 0;
}
+/* returns TRUE if the resource needs a resolve to itself */
+static inline bool
+etna_resource_needs_flush(struct etna_resource *res)
+{
+ return (int)(res->seqno - res->flush_seqno) > 0;
+}
+
/* is the resource only used on the sampler? */
static inline bool
etna_resource_sampler_only(const struct pipe_resource *pres)