etnaviv: Check that resource has a valid TS in etna_resource_needs_flush
Resources only need a resolve-to-itself if their TS is valid for any level, not just if it happens to be allocated. Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
This commit is contained in:
parent
b24cb40188
commit
ade528edd1
|
@ -629,6 +629,19 @@ etna_resource_used(struct etna_context *ctx, struct pipe_resource *prsc,
|
||||||
rsc->pending_ctx = ctx;
|
rsc->pending_ctx = ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
etna_resource_has_valid_ts(struct etna_resource *rsc)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
etna_resource_screen_init(struct pipe_screen *pscreen)
|
etna_resource_screen_init(struct pipe_screen *pscreen)
|
||||||
{
|
{
|
||||||
|
|
|
@ -103,11 +103,15 @@ etna_resource_older(struct etna_resource *a, struct etna_resource *b)
|
||||||
return (int)(a->seqno - b->seqno) < 0;
|
return (int)(a->seqno - b->seqno) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* returns TRUE if a resource has a TS, and it is valid for at least one level */
|
||||||
|
bool
|
||||||
|
etna_resource_has_valid_ts(struct etna_resource *res);
|
||||||
|
|
||||||
/* returns TRUE if the resource needs a resolve to itself */
|
/* returns TRUE if the resource needs a resolve to itself */
|
||||||
static inline bool
|
static inline bool
|
||||||
etna_resource_needs_flush(struct etna_resource *res)
|
etna_resource_needs_flush(struct etna_resource *res)
|
||||||
{
|
{
|
||||||
return res->ts_bo && ((int)(res->seqno - res->flush_seqno) > 0);
|
return etna_resource_has_valid_ts(res) && ((int)(res->seqno - res->flush_seqno) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* is the resource only used on the sampler? */
|
/* is the resource only used on the sampler? */
|
||||||
|
|
Loading…
Reference in New Issue