[Mesa-dev] [RFC] etnaviv: native fence fd support
Christian Gmeiner
christian.gmeiner at gmail.com
Thu Apr 6 07:54:17 UTC 2017
/2017-04-05 18:14 GMT+02:00 Philipp Zabel <p.zabel at 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.zabel at 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
More information about the mesa-dev
mailing list