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

Christian König deathsimple at vodafone.de
Thu Jan 21 11:02:12 PST 2016


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