qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] spice: allow to specify drm rendernode


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH] spice: allow to specify drm rendernode
Date: Mon, 13 Feb 2017 08:37:08 +0000

Hi Gerd,

Rendernode are not stable across reboots, it depends on module order.

I have further patches to specify a pci address instead:
rendernode=<file|pciaddr>. Does that seem fine?

Do you want me to squash and resend?

The current branch: https://github.com/elmarco/qemu/commits/spice

thanks

On Sun, Feb 12, 2017 at 3:23 PM Marc-André Lureau <
address@hidden> wrote:

> When multiple GPU are available, picking the first one isn't always the
> best choice. Learn to specify a device rendernode.
>
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
>  include/ui/egl-helpers.h |  3 +--
>  ui/egl-helpers.c         | 10 +++++++---
>  ui/spice-core.c          |  5 ++++-
>  qemu-options.hx          |  6 +++++-
>  4 files changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/include/ui/egl-helpers.h b/include/ui/egl-helpers.h
> index 03fcf4bba2..88a13e827b 100644
> --- a/include/ui/egl-helpers.h
> +++ b/include/ui/egl-helpers.h
> @@ -14,8 +14,7 @@ extern int qemu_egl_rn_fd;
>  extern struct gbm_device *qemu_egl_rn_gbm_dev;
>  extern EGLContext qemu_egl_rn_ctx;
>
> -int qemu_egl_rendernode_open(void);
> -int egl_rendernode_init(void);
> +int egl_rendernode_init(const char *rendernode);
>  int egl_get_fd_for_texture(uint32_t tex_id, EGLint *stride, EGLint
> *fourcc);
>
>  #endif
> diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c
> index cd24568a5e..417462b76d 100644
> --- a/ui/egl-helpers.c
> +++ b/ui/egl-helpers.c
> @@ -44,13 +44,17 @@ int qemu_egl_rn_fd;
>  struct gbm_device *qemu_egl_rn_gbm_dev;
>  EGLContext qemu_egl_rn_ctx;
>
> -int qemu_egl_rendernode_open(void)
> +static int qemu_egl_rendernode_open(const char *rendernode)
>  {
>      DIR *dir;
>      struct dirent *e;
>      int r, fd;
>      char *p;
>
> +    if (rendernode) {
> +        return open(rendernode, O_RDWR | O_CLOEXEC | O_NOCTTY |
> O_NONBLOCK);
> +    }
> +
>      dir = opendir("/dev/dri");
>      if (!dir) {
>          return -1;
> @@ -85,11 +89,11 @@ int qemu_egl_rendernode_open(void)
>      return fd;
>  }
>
> -int egl_rendernode_init(void)
> +int egl_rendernode_init(const char *rendernode)
>  {
>      qemu_egl_rn_fd = -1;
>
> -    qemu_egl_rn_fd = qemu_egl_rendernode_open();
> +    qemu_egl_rn_fd = qemu_egl_rendernode_open(rendernode);
>      if (qemu_egl_rn_fd == -1) {
>          error_report("egl: no drm render node available");
>          goto err;
> diff --git a/ui/spice-core.c b/ui/spice-core.c
> index 1452e77fd1..39ccab7561 100644
> --- a/ui/spice-core.c
> +++ b/ui/spice-core.c
> @@ -501,6 +501,9 @@ static QemuOptsList qemu_spice_opts = {
>          },{
>              .name = "gl",
>              .type = QEMU_OPT_BOOL,
> +        },{
> +            .name = "rendernode",
> +            .type = QEMU_OPT_STRING,
>  #endif
>          },
>          { /* end of list */ }
> @@ -833,7 +836,7 @@ void qemu_spice_init(void)
>                           "incompatible with -spice port/tls-port");
>              exit(1);
>          }
> -        if (egl_rendernode_init() != 0) {
> +        if (egl_rendernode_init(qemu_opt_get(opts, "rendernode")) != 0) {
>              error_report("Failed to initialize EGL render node for SPICE
> GL");
>              exit(1);
>          }
> diff --git a/qemu-options.hx b/qemu-options.hx
> index ac036b4cbd..b64087d934 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -1066,7 +1066,7 @@ DEF("spice", HAS_ARG, QEMU_OPTION_spice,
>      "       [,streaming-video=[off|all|filter]][,disable-copy-paste]\n"
>      "       [,disable-agent-file-xfer][,agent-mouse=[on|off]]\n"
>      "
>  [,playback-compression=[on|off]][,seamless-migration=[on|off]]\n"
> -    "       [,gl=[on|off]]\n"
> +    "       [,gl=[on|off]][,rendernode=<file>]\n"
>      "   enable spice\n"
>      "   at least one of {port, tls-port} is mandatory\n",
>      QEMU_ARCH_ALL)
> @@ -1161,6 +1161,10 @@ Enable/disable spice seamless migration. Default is
> off.
>  @item gl=[on|off]
>  Enable/disable OpenGL context. Default is off.
>
> address@hidden rendernode=<file>
> +DRM render node for OpenGL rendering. If not specified, it will pick
> +the first available. (Since 2.9)
> +
>  @end table
>  ETEXI
>
> --
> 2.11.0.295.gd7dffce1c.dirty
>
>
> --
Marc-André Lureau


reply via email to

[Prev in Thread] Current Thread [Next in Thread]