<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 19 October 2015 at 17:16, Emil Velikov <span dir="ltr"><<a href="mailto:emil.l.velikov@gmail.com" target="_blank">emil.l.velikov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="">On 17 October 2015 at 00:14, Julien Isorce <<a href="mailto:julien.isorce@gmail.com">julien.isorce@gmail.com</a>> wrote:<br>
> This patch allows to use gallium vaapi without requiring<br>
> a X server running for your second graphic card.<br>
><br>
</span>I've sent a lengthy series which should mitigate the need of some hunks.<br></blockquote><div><br></div><div>Ok I'll wait for your patches to land before going further on this patch. Should I expect vl_winsy_drm.c in your patches ? Not sure do understood that part. Actually I though about having "vl_screen_create_drm" and renames vl_screen_create to vl_screen_create_x11 (because it takes XDisplay in params) but then I got confused because vl_winsys.h includes Xlib.h. Should future vl_screen_create_drm be in another header, vl_drm.h ?<br><br></div><div>Thx<br></div><div>Julien<br></div><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class=""><br>
> Signed-off-by: Julien Isorce <<a href="mailto:j.isorce@samsung.com">j.isorce@samsung.com</a>><br>
> ---<br>
>  src/gallium/state_trackers/va/Makefile.am |  9 ++++++<br>
>  src/gallium/state_trackers/va/context.c   | 49 +++++++++++++++++++++++++++----<br>
>  2 files changed, 53 insertions(+), 5 deletions(-)<br>
><br>
> diff --git a/src/gallium/state_trackers/va/Makefile.am b/src/gallium/state_trackers/va/Makefile.am<br>
> index 2a93a90..348cfe1 100644<br>
> --- a/src/gallium/state_trackers/va/Makefile.am<br>
> +++ b/src/gallium/state_trackers/va/Makefile.am<br>
> @@ -30,6 +30,15 @@ AM_CFLAGS = \<br>
>         $(VA_CFLAGS) \<br>
>         -DVA_DRIVER_INIT_FUNC="__vaDriverInit_$(VA_MAJOR)_$(VA_MINOR)"<br>
><br>
> +AM_CFLAGS += \<br>
> +       $(GALLIUM_PIPE_LOADER_DEFINES) \<br>
> +       -DPIPE_SEARCH_DIR=\"$(libdir)/gallium-pipe\"<br>
> +<br>
> +if HAVE_GALLIUM_STATIC_TARGETS<br>
> +AM_CFLAGS += \<br>
> +       -DGALLIUM_STATIC_TARGETS=1<br>
> +endif<br>
> +<br>
</span>Like this one.<br>
<span class=""><br>
>  AM_CPPFLAGS = \<br>
>         -I$(top_srcdir)/include<br>
><br>
> diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c<br>
> index ddc863b..9ab2710 100644<br>
> --- a/src/gallium/state_trackers/va/context.c<br>
> +++ b/src/gallium/state_trackers/va/context.c<br>
> @@ -28,7 +28,8 @@<br>
><br>
>  #include "pipe/p_screen.h"<br>
>  #include "pipe/p_video_codec.h"<br>
> -<br>
> +#include "pipe-loader/pipe_loader.h"<br>
> +#include "state_tracker/drm_driver.h"<br>
>  #include "util/u_memory.h"<br>
>  #include "util/u_handle_table.h"<br>
>  #include "util/u_video.h"<br>
> @@ -98,7 +99,7 @@ static struct VADriverVTableVPP vtable_vpp =<br>
>  PUBLIC VAStatus<br>
>  VA_DRIVER_INIT_FUNC(VADriverContextP ctx)<br>
>  {<br>
> -   vlVaDriver *drv;<br>
> +   vlVaDriver *drv = NULL;<br>
</span>Unnecessary change.<br>
<span class=""><br>
><br>
>     if (!ctx)<br>
>        return VA_STATUS_ERROR_INVALID_CONTEXT;<br>
> @@ -107,8 +108,40 @@ VA_DRIVER_INIT_FUNC(VADriverContextP ctx)<br>
>     if (!drv)<br>
>        return VA_STATUS_ERROR_ALLOCATION_FAILED;<br>
><br>
> -   drv->vscreen = vl_screen_create(ctx->native_dpy, ctx->x11_screen);<br>
> -   if (!drv->vscreen)<br>
> +   drv->vscreen = NULL;<br>
</span>DItto.<br>
<div><div class="h5"><br>
> +<br>
> +   switch (ctx->display_type) {<br>
> +   case VA_DISPLAY_X11:<br>
> +      drv->vscreen = vl_screen_create(ctx->native_dpy, ctx->x11_screen);<br>
> +      if (!drv->vscreen)<br>
> +         goto error_screen;<br>
> +      break;<br>
> +<br>
> +   case VA_DISPLAY_DRM:<br>
> +   case VA_DISPLAY_DRM_RENDERNODES: {<br>
> +      struct drm_state *drm_info = (struct drm_state *) ctx->drm_state;<br>
> +      if (!drm_info)<br>
> +         goto error_screen;<br>
> +<br>
> +      drv->vscreen = CALLOC_STRUCT(vl_screen);<br>
> +<br>
> +#if GALLIUM_STATIC_TARGETS<br>
> +      drv->vscreen->pscreen = dd_create_screen(drm_info->fd);<br>
> +#else<br>
> +      int loader_fd = dup(drm_info->fd);<br>
> +      if (loader_fd == -1)<br>
> +         goto error_screen;<br>
> +<br>
> +      if (pipe_loader_drm_probe_fd(&drv->dev, loader_fd))<br>
> +         drv->vscreen->pscreen = pipe_loader_create_screen(drv->dev, PIPE_SEARCH_DIR);<br>
> +#endif<br>
</div></div>And much of this.<br>
<br>
Having this around feels rather abusive. I'm leaning that ideally we<br>
need vl_winsy_drm.c, but I'll let others decide. At the very least the<br>
error paths looks quite funky. Please use the same approach as in<br>
vlVaTerminate()<br>
<span class=""><font color="#888888"><br>
-Emil<br>
</font></span></blockquote></div><br></div></div>