This gets rid of quite a bit of CPU/GPU sync on frequent vertex buffer uploads and I haven't seen any of the issues mentioned in the comment, so this one seems stale.
Ignore the flag if there exists a temporary resource, as those ones are never busy. Signed-off-by: Lucas Stach <l.st...@pengutronix.de> --- src/gallium/drivers/etnaviv/etnaviv_transfer.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_transfer.c b/src/gallium/drivers/etnaviv/etnaviv_transfer.c index 269bd498f89f..a2cd4e6234dd 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_transfer.c +++ b/src/gallium/drivers/etnaviv/etnaviv_transfer.c @@ -114,7 +114,7 @@ etna_transfer_unmap(struct pipe_context *pctx, struct pipe_transfer *ptrans) } } - if (!trans->rsc) + if (!trans->rsc && !(ptrans->usage & PIPE_TRANSFER_UNSYNCHRONIZED)) etna_bo_cpu_fini(rsc->bo); pipe_resource_reference(&trans->rsc, NULL); @@ -260,19 +260,17 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc, (rsc->layout == ETNA_LAYOUT_TILED && util_format_is_compressed(prsc->format)); - /* Ignore PIPE_TRANSFER_UNSYNCHRONIZED and PIPE_TRANSFER_DONTBLOCK here. - * It appears that Gallium operates the index/vertex buffers in a - * circular fashion, and the CPU can catch up with the GPU and starts - * overwriting yet-to-be-processed entries, causing rendering corruption. */ - uint32_t prep_flags = 0; + if (trans->rsc || !(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) { + uint32_t prep_flags = 0; - if (usage & PIPE_TRANSFER_READ) - prep_flags |= DRM_ETNA_PREP_READ; - if (usage & PIPE_TRANSFER_WRITE) - prep_flags |= DRM_ETNA_PREP_WRITE; + if (usage & PIPE_TRANSFER_READ) + prep_flags |= DRM_ETNA_PREP_READ; + if (usage & PIPE_TRANSFER_WRITE) + prep_flags |= DRM_ETNA_PREP_WRITE; - if (etna_bo_cpu_prep(rsc->bo, prep_flags)) - goto fail_prep; + if (etna_bo_cpu_prep(rsc->bo, prep_flags)) + goto fail_prep; + } /* map buffer object */ void *mapped = etna_bo_map(rsc->bo); -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev