/2017-04-05 18:14 GMT+02:00 Philipp Zabel <p.za...@pengutronix.de>: > This adds native fence fd support to etnaviv, similarly to commit > 0b98e84e9ba0 ("freedreno: native fence fd"), enabled for kernel > driver version 1.1 or later. > > Signed-off-by: Philipp Zabel <p.za...@pengutronix.de> > --- > This depends on libdrm patches [1][2] which may or may not make their > way into libdrm 2.4.78. > [1] https://patchwork.kernel.org/patch/9664401/ > [2] https://patchwork.kernel.org/patch/9664403/ > --- > configure.ac | 2 +- > src/gallium/drivers/etnaviv/etnaviv_context.c | 17 ++++++++-- > src/gallium/drivers/etnaviv/etnaviv_context.h | 1 + > src/gallium/drivers/etnaviv/etnaviv_fence.c | 46 > +++++++++++++++++++++++++-- > src/gallium/drivers/etnaviv/etnaviv_fence.h | 14 +++++++- > src/gallium/drivers/etnaviv/etnaviv_screen.c | 10 +++++- > src/gallium/drivers/etnaviv/etnaviv_screen.h | 3 ++ > 7 files changed, 86 insertions(+), 7 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 1c60a59823..a5e1d69912 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -80,7 +80,7 @@ LIBDRM_NVVIEUX_REQUIRED=2.4.66 > LIBDRM_NOUVEAU_REQUIRED=2.4.66 > LIBDRM_FREEDRENO_REQUIRED=2.4.74 > LIBDRM_VC4_REQUIRED=2.4.69 > -LIBDRM_ETNAVIV_REQUIRED=2.4.74 > +LIBDRM_ETNAVIV_REQUIRED=2.4.78 > > dnl Versions for external dependencies > DRI2PROTO_REQUIRED=2.8 > diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c > b/src/gallium/drivers/etnaviv/etnaviv_context.c > index dfd9e1f73a..14170342ff 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_context.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_context.c > @@ -73,6 +73,9 @@ etna_context_destroy(struct pipe_context *pctx) > > slab_destroy_child(&ctx->transfer_pool); > > + if (ctx->in_fence_fd != -1) > + close(ctx->in_fence_fd); > + > FREE(pctx); > } > > @@ -230,11 +233,17 @@ etna_flush(struct pipe_context *pctx, struct > pipe_fence_handle **fence, > enum pipe_flush_flags flags) > { > struct etna_context *ctx = etna_context(pctx); > + int out_fence_fd = -1; > > - etna_cmd_stream_flush(ctx->stream); > + if (ctx->in_fence_fd != -1 || (flags & PIPE_FLUSH_FENCE_FD)) > + etna_cmd_stream_flush_explicit(ctx->stream, ctx->in_fence_fd, > + (flags & PIPE_FLUSH_FENCE_FD) ? > + &out_fence_fd : NULL); > + else > + etna_cmd_stream_flush(ctx->stream); >
Can we do that without the extra if and just call etna_cmd_stream_flush_explicit(..) in every case? (Just like in freedreno?) > if (fence) > - *fence = etna_fence_create(pctx); > + *fence = etna_fence_create(pctx, out_fence_fd); > } greets -- Christian Gmeiner, MSc https://www.youtube.com/user/AloryOFFICIAL https://soundcloud.com/christian-gmeiner _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev