[Mesa-dev] [PATCH] st/mesa: conditionally enable GL_NV_vdpau_interop

Emil Velikov emil.l.velikov at gmail.com
Fri Jan 22 08:15:47 PST 2016


Form autofoo perspective things look great.

Although I second Ilia's concern - we need a form of runtime detection
here. Pretty much all distros ship the vdpau(+ other video driver
backend) in a separate library. Thus this will likely get us nowhere
we want - as I'm suspecting this is to assist the unsuspecting user,
which hasn't installed package X or Y in the first place ?

I won't object against it but please can we get a big fat warning/note
- anything vaguely alike "this is a hack until we get a runtime
detection of the presence/interop of the partner library/module" will
be great.

Thanks
Emil

On 21 January 2016 at 21:02, Christian König <deathsimple at vodafone.de> wrote:
> Advertising NV_vdpau_interop while the backend for the driver isn't
> installed is fine, cause this only means that the OpenGL side has support
> for it.
>
> Mesa doesn't have a runtime dependency on libvdpau and to initialize
> NV_vdpau_interop the application must open libvdpau first.
>
> So if libvdpau isn't installed this will fail way even before Mesa into the
> picture.
>
> My question is rather if that's the right approach? I'm not really an expert
> on autohell.
>
> Regards,
> Christian.
>
>
> Am 21.01.2016 um 17:09 schrieb Ilia Mirkin:
>>
>> I wonder if something more robust is needed. Let's say a distro builds
>> with vdpau and everything else enabled, but then ships the libraries
>> separately...
>>
>> On Thu, Jan 21, 2016 at 11:05 AM, Christian König
>> <deathsimple at vodafone.de> wrote:
>>>
>>> From: Christian König <christian.koenig at amd.com>
>>>
>>> Only enable it when we compile the state tracker as well.
>>>
>>> Signed-off-by: Christian König <christian.koenig at amd.com>
>>> ---
>>>   configure.ac                           | 1 +
>>>   src/mesa/state_tracker/st_extensions.c | 2 ++
>>>   src/mesa/state_tracker/st_vdpau.c      | 6 ++++++
>>>   3 files changed, 9 insertions(+)
>>>
>>> diff --git a/configure.ac b/configure.ac
>>> index 8d19dab..a92f707 100644
>>> --- a/configure.ac
>>> +++ b/configure.ac
>>> @@ -1741,6 +1741,7 @@ AM_CONDITIONAL(HAVE_ST_XVMC, test "x$enable_xvmc" =
>>> xyes)
>>>   if test "x$enable_vdpau" = xyes; then
>>>       PKG_CHECK_MODULES([VDPAU], [vdpau >= $VDPAU_REQUIRED])
>>>       gallium_st="$gallium_st vdpau"
>>> +    DEFINES="$DEFINES -DHAVE_ST_VDPAU"
>>>   fi
>>>   AM_CONDITIONAL(HAVE_ST_VDPAU, test "x$enable_vdpau" = xyes)
>>>
>>> diff --git a/src/mesa/state_tracker/st_extensions.c
>>> b/src/mesa/state_tracker/st_extensions.c
>>> index 2a3e523..25e88ea 100644
>>> --- a/src/mesa/state_tracker/st_extensions.c
>>> +++ b/src/mesa/state_tracker/st_extensions.c
>>> @@ -959,12 +959,14 @@ void st_init_extensions(struct pipe_screen *screen,
>>>         extensions->ARB_ES3_compatibility = GL_TRUE;
>>>      }
>>>
>>> +#ifdef HAVE_ST_VDPAU
>>>      if (screen->get_video_param &&
>>>          screen->get_video_param(screen, PIPE_VIDEO_PROFILE_UNKNOWN,
>>>                                  PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
>>>                                  PIPE_VIDEO_CAP_SUPPORTS_INTERLACED)) {
>>>         extensions->NV_vdpau_interop = GL_TRUE;
>>>      }
>>> +#endif
>>>
>>>      if (screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
>>>                                   PIPE_SHADER_CAP_DOUBLES) &&
>>> diff --git a/src/mesa/state_tracker/st_vdpau.c
>>> b/src/mesa/state_tracker/st_vdpau.c
>>> index 63af119..71dd15b 100644
>>> --- a/src/mesa/state_tracker/st_vdpau.c
>>> +++ b/src/mesa/state_tracker/st_vdpau.c
>>> @@ -49,6 +49,8 @@
>>>   #include "st_format.h"
>>>   #include "st_cb_flush.h"
>>>
>>> +#ifdef HAVE_ST_VDPAU
>>> +
>>>   static void
>>>   st_vdpau_map_surface(struct gl_context *ctx, GLenum target, GLenum
>>> access,
>>>                        GLboolean output, struct gl_texture_object
>>> *texObj,
>>> @@ -180,9 +182,13 @@ st_vdpau_unmap_surface(struct gl_context *ctx,
>>> GLenum target, GLenum access,
>>>      st_flush(st, NULL, 0);
>>>   }
>>>
>>> +#endif
>>> +
>>>   void
>>>   st_init_vdpau_functions(struct dd_function_table *functions)
>>>   {
>>> +#ifdef HAVE_ST_VDPAU
>>>      functions->VDPAUMapSurface = st_vdpau_map_surface;
>>>      functions->VDPAUUnmapSurface = st_vdpau_unmap_surface;
>>> +#endif
>>>   }
>>> --
>>> 2.5.0
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>


More information about the mesa-dev mailing list