On Fri, 2017-05-19 at 11:41 +0200, Lucas Stach wrote: > 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))
As we just talked about, this looks like it should be '||' ... > 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)) { ... for symmetry with etna_bo_cpu_prep call below. > + 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); regards Philipp _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev