etnaviv: Don't flush on transfer when UNSYNCHRONIZED
Structure code to only flush when we will potentially call cpu_prep. This prevents spurious flushes in applications that heavily rely on u_uploader. Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
This commit is contained in:
parent
8fbd82f464
commit
bc71c31842
|
@ -243,18 +243,6 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc,
|
|||
|
||||
struct etna_resource_level *res_level = &rsc->levels[level];
|
||||
|
||||
/*
|
||||
* Always flush if we have the temporary resource and have a copy to this
|
||||
* outstanding. Otherwise infer flush requirement from resource access and
|
||||
* current GPU usage (reads must wait for GPU writes, writes must have
|
||||
* exclusive access to the buffer).
|
||||
*/
|
||||
if ((trans->rsc && (etna_resource(trans->rsc)->status & ETNA_PENDING_WRITE)) ||
|
||||
(!trans->rsc &&
|
||||
(((usage & PIPE_TRANSFER_READ) && (rsc->status & ETNA_PENDING_WRITE)) ||
|
||||
((usage & PIPE_TRANSFER_WRITE) && rsc->status))))
|
||||
pctx->flush(pctx, NULL, 0);
|
||||
|
||||
/* XXX we don't handle PIPE_TRANSFER_FLUSH_EXPLICIT; this flag can be ignored
|
||||
* when mapping in-place,
|
||||
* but when not in place we need to fire off the copy operation in
|
||||
|
@ -312,6 +300,18 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc,
|
|||
if (trans->rsc || !(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) {
|
||||
uint32_t prep_flags = 0;
|
||||
|
||||
/*
|
||||
* Always flush if we have the temporary resource and have a copy to this
|
||||
* outstanding. Otherwise infer flush requirement from resource access and
|
||||
* current GPU usage (reads must wait for GPU writes, writes must have
|
||||
* exclusive access to the buffer).
|
||||
*/
|
||||
if ((trans->rsc && (etna_resource(trans->rsc)->status & ETNA_PENDING_WRITE)) ||
|
||||
(!trans->rsc &&
|
||||
(((usage & PIPE_TRANSFER_READ) && (rsc->status & ETNA_PENDING_WRITE)) ||
|
||||
((usage & PIPE_TRANSFER_WRITE) && rsc->status))))
|
||||
pctx->flush(pctx, NULL, 0);
|
||||
|
||||
if (usage & PIPE_TRANSFER_READ)
|
||||
prep_flags |= DRM_ETNA_PREP_READ;
|
||||
if (usage & PIPE_TRANSFER_WRITE)
|
||||
|
|
Loading…
Reference in New Issue