[VDPAU] [PATCH] try DRI2DriverDRI name on DRI2DriverVDPAU absence

Aaron Plattner aplattner at nvidia.com
Tue Jan 7 09:47:41 PST 2014


Thanks for the link, Rinat.

It looks like from the discussion, that Eric (CC'd) is suggesting that 
libvdpau should enumerate and load all available VDPAU drivers and let 
each one determine, through vendor-specific mechanisms, whether it is 
applicable for the requested X screen.  Eric, does that sound like what 
you're suggesting?  That would be doable, but was not the approach that 
was suggested when I asked the X.Org community how the X screen-to-VDPAU 
driver mapping should be achieved when this was first being designed.

Can you point me to where Mesa's DRI3 support determines which driver to 
use for which X screen?

On 01/07/2014 09:30 AM, Rinat Ibragimov wrote:
> Congratulations!
>
> To the topic. I had no response other than DRI3 related info from Eric Anholt:
> http://lists.freedesktop.org/archives/intel-gfx/2013-August/031872.html
> No one said 'no', though.
>
> Вторник,  7 января 2014, 9:11 -08:00 от Aaron Plattner <aplattner at nvidia.com>:
>> Sorry for the slow response.  I just got back from paternity leave.
>>
>> I'm not sure I understand why exactly the display driver can't just
>> report the correct DRI2DriverVDPAU name.  Is it just politics / lack of
>> developer interest?
>>
>> On 01/07/2014 07:31 AM, Rinat Ibragimov wrote:
>>> Ping.
>>>
>>>
>>> Среда, 11 декабря 2013, 1:57 +04:00 от Rinat Ibragimov < ibragimovrinat at mail.ru >:
>>>> Hi. I'm making VDPAU driver with OpenGL/VA-API backend. Implementation is still incomplete, but
>>>> already works for both Mplayer and Flash Player. Some time ago there was packaging attempt at
>>>>   https://bugzilla.rpmfusion.org/show_bug.cgi?id=2897 . And they confronted with difficulties of
>>>> enabling it on target hardware -- on integrated intel chips. You know, using VDPAU_DRIVER for
>>>> development is fine, but in package it's dangerous as it can break things on nVidia hardware,
>>>> where native VDPAU is available. Unfortunately, intel Xorg driver is the only one that
>>>> does not support DRI2DriverVDPAU name, therefore it's impossible to make autoloading work.
>>>> My attempts to add support of DRI2DriverVDPAU was futile. Looks like nobody interested in that on
>>>> their side.
>>>>
>>>> So I have a humble proposal to make libvdpau try DRI2DriverDRI if DRI2DriverVDPAU fails for some
>>>> reason. That way on intel equipped machines libvdpau will try to load libvdpau_i965.so. Other
>>>> machines with other videoadapters will not be affected.
>>>>
>>>> Rinat
>>>>
>>>>
>>>> ---
>>>>    src/mesa_dri2.c     |  5 +++--
>>>>    src/mesa_dri2.h     |  2 +-
>>>>    src/vdpau_wrapper.c | 12 +++++++++---
>>>>    3 files changed, 13 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/src/mesa_dri2.c b/src/mesa_dri2.c
>>>> index 5f7146a..4dc1e85 100644
>>>> --- a/src/mesa_dri2.c
>>>> +++ b/src/mesa_dri2.c
>>>> @@ -114,7 +114,8 @@ _vdp_DRI2QueryVersion(Display * dpy, int *major, int *minor)
>>>>    }
>>>>
>>>>    Bool
>>>> -_vdp_DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName)
>>>> +_vdp_DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName,
>>>> +                 int driverType)
>>>>    {
>>>>       XExtDisplayInfo *info = DRI2FindDisplay(dpy);
>>>>       xDRI2ConnectReply rep;
>>>> @@ -127,7 +128,7 @@ _vdp_DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName
>>>>       req->reqType = info->codes->major_opcode;
>>>>       req->dri2ReqType = X_DRI2Connect;
>>>>       req->window = window;
>>>> -   req->driverType = DRI2DriverVDPAU;
>>>> +   req->driverType = driverType;
>>>>    #ifdef DRI2DriverPrimeShift
>>>>       {
>>>>          char *prime = getenv("DRI_PRIME");
>>>> diff --git a/src/mesa_dri2.h b/src/mesa_dri2.h
>>>> index 09bde8c..a3bedfd 100644
>>>> --- a/src/mesa_dri2.h
>>>> +++ b/src/mesa_dri2.h
>>>> @@ -45,7 +45,7 @@ _vdp_DRI2QueryVersion(Display * display, int *major, int *minor);
>>>>
>>>>    extern Bool
>>>>    _vdp_DRI2Connect(Display * display, XID window, char **driverName,
>>>> -                 char **deviceName);
>>>> +                 char **deviceName, int driverType);
>>>>
>>>>    extern void
>>>>    _vdp_DRI2RemoveExtension(Display * display);
>>>> diff --git a/src/vdpau_wrapper.c b/src/vdpau_wrapper.c
>>>> index 9932937..dccf168 100644
>>>> --- a/src/vdpau_wrapper.c
>>>> +++ b/src/vdpau_wrapper.c
>>>> @@ -90,9 +90,15 @@ static char * _vdp_get_driver_name_from_dri2(
>>>>            return NULL;
>>>>        }
>>>>
>>>> -    if (!_vdp_DRI2Connect(display, root, &driver_name, &device_name)) {
>>>> -        _vdp_DRI2RemoveExtension(display);
>>>> -        return NULL;
>>>> +    if (!_vdp_DRI2Connect(display, root, &driver_name, &device_name,
>>>> +                          DRI2DriverVDPAU))
>>>> +    {
>>>> +        if (!_vdp_DRI2Connect(display, root, &driver_name, &device_name,
>>>> +                              DRI2DriverDRI))
>>>> +        {
>>>> +            _vdp_DRI2RemoveExtension(display);
>>>> +            return NULL;
>>>> +        }
>>>>        }
>>>>
>>>>        XFree(device_name);
>>>> --
>>>> 1.8.4.3

-- 
Aaron


More information about the VDPAU mailing list