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:
Wladimir J. van der Laan 2017-11-14 10:21:20 +01:00 committed by Christian Gmeiner
parent b24cb40188
commit ade528edd1
2 changed files with 18 additions and 1 deletions

View File

@ -629,6 +629,19 @@ etna_resource_used(struct etna_context *ctx, struct pipe_resource *prsc,
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
etna_resource_screen_init(struct pipe_screen *pscreen)
{

View File

@ -103,11 +103,15 @@ etna_resource_older(struct etna_resource *a, struct etna_resource *b)
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 */
static inline bool
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? */