Lastly, from some discussions with ajax on IRC, it appears that DRI3
is half-baked at best wrt sync between server and client. I think we
should just disable it by default for now, until issues are ironed
out. (Rather than what this patch has, which is default-on for Xorg >
some version.)

On Sat, Jul 4, 2015 at 3:03 PM, Emil Velikov <emil.l.veli...@gmail.com> wrote:
> The DRI option with the intel ddx can be used to indicate the following
>  - whether dri is disabled
>  - the dri "version" - dri1, dri2, dri3
>  - the dri module name - doo_dri.so bar_dri.so
>
> I'm not sure how exactly it's supposed to work/works, and I believe
> most of that is due to legacy reasons. I'm just saying let's not do
> the whole thing - just the dri "version" would be great (as you
> suggested).
>
> -Emil
>
>
> On 4 July 2015 at 19:28, Ilia Mirkin <imir...@alum.mit.edu> wrote:
>> Erm, that's nuts. I also don't really understand what they're talking
>> about there... i915g vs i915? Anyways, I just meant the version
>> numbers :)
>>
>> On Sat, Jul 4, 2015 at 2:23 PM, Emil Velikov <emil.l.veli...@gmail.com> 
>> wrote:
>>> That would be great, as long as it does only that and does not go into
>>> the "drivername" territory. As the said driver ;-)
>>>
>>> "A driver name to use can be provided instead
>>> of simple boolean value, which will be passed to the GL implementation for
>>> it to load the appropriate backend."
>>>
>>> -Emil
>>>
>>> On 4 July 2015 at 18:17, Ilia Mirkin <imir...@alum.mit.edu> wrote:
>>>> IMO it'd be nice to keep this compatible with the intel driver, which
>>>> has a "DRI" option, which can take the values 1, 2, 3. Obviously for
>>>> nouveau, 1 makes no sense as that was dropped quite some time ago.
>>>>
>>>> See 
>>>> http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/tree/man/intel.man#n68
>>>>
>>>> On Mon, Jun 29, 2015 at 11:30 PM, Mario Kleiner
>>>> <mario.kleiner...@gmail.com> wrote:
>>>>> X-Server versions older than 1.16.3 have bugs in their
>>>>> DRI3/Present implementation which impair nouveau, so
>>>>> it is better to stick to good old DRI2 by default on
>>>>> such servers. E.g., page flipping doesn't work at all
>>>>> under DRI3/Present with older servers, and use of
>>>>> extensions like OML_sync_control, SGI_video_sync or
>>>>> INTEL_swap_events also causes failure of Present.
>>>>>
>>>>> nouveau's glamor accel backend currently doesn't work under
>>>>> DRI2, so continue to use DRI3 whenever it is supported.
>>>>>
>>>>> Under the exa accel backend, DRI2 works just fine, so
>>>>> disable DRI3 and choose DRI2 by default when nouveau
>>>>> is built for X-Server < 1.16.3, and enable DRI3 if
>>>>> building on later X-Servers which work reasonably well
>>>>> under DRI3/Present.
>>>>>
>>>>> A new boolean xorg.conf Option "DRI3" allows to enforce or
>>>>> prevent use of DRI3/Present under EXA acceleration for
>>>>> testing.
>>>>>
>>>>> Also add a bit more output about status of Present and
>>>>> DRI3 to aid debugging.
>>>>>
>>>>> Signed-off-by: Mario Kleiner <mario.kleiner...@gmail.com>
>>>>> ---
>>>>>  man/nouveau.man    |  6 ++++++
>>>>>  src/nouveau_dri2.c | 11 ++++++++++-
>>>>>  src/nv_const.h     |  2 ++
>>>>>  src/nv_driver.c    | 17 +++++++++++++++--
>>>>>  4 files changed, 33 insertions(+), 3 deletions(-)
>>>>>
>>>>> diff --git a/man/nouveau.man b/man/nouveau.man
>>>>> index 129bb7f..12cfbc0 100644
>>>>> --- a/man/nouveau.man
>>>>> +++ b/man/nouveau.man
>>>>> @@ -125,6 +125,12 @@ that relies on correct presentation timing behaviour 
>>>>> as defined in that
>>>>>  specification.
>>>>>  .br
>>>>>  Default: 1.
>>>>> +.TP
>>>>> +.BI "Option \*qDRI3\*q \*q" boolean \*q
>>>>> +Enable the DRI3 extension under exa acceleration if supported by server.
>>>>> +A setting of "off" will only use DRI2 instead. Under glamor acceleration,
>>>>> +DRI3 is always enabled if supported. Default: on for XOrg >= 1.16.3, off 
>>>>> for
>>>>> +earlier versions.
>>>>>  .SH "SEE ALSO"
>>>>>  __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), 
>>>>> Xserver(__appmansuffix__), X(__miscmansuffix__)
>>>>>  .SH AUTHORS
>>>>> diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c
>>>>> index f22e319..d818976 100644
>>>>> --- a/src/nouveau_dri2.c
>>>>> +++ b/src/nouveau_dri2.c
>>>>> @@ -1130,7 +1130,16 @@ nouveau_dri3_screen_init(ScreenPtr screen)
>>>>>         if (buf && stat(buf, &render) == 0 &&
>>>>>             master.st_mode == render.st_mode) {
>>>>>                 pNv->render_node = buf;
>>>>> -               return dri3_screen_init(screen, 
>>>>> &nouveau_dri3_screen_info);
>>>>> +               if (dri3_screen_init(screen, &nouveau_dri3_screen_info)) {
>>>>> +                       xf86DrvMsg(pScrn->scrnIndex, X_INFO,
>>>>> +                                  "DRI3 on EXA enabled\n");
>>>>> +                       return TRUE;
>>>>> +               }
>>>>> +               else {
>>>>> +                       xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
>>>>> +                                  "DRI3 on EXA initialization failed\n");
>>>>> +                       return FALSE;
>>>>> +               }
>>>>>         } else
>>>>>                 free(buf);
>>>>>  #endif
>>>>> diff --git a/src/nv_const.h b/src/nv_const.h
>>>>> index f1b4e9b..df1e398 100644
>>>>> --- a/src/nv_const.h
>>>>> +++ b/src/nv_const.h
>>>>> @@ -18,6 +18,7 @@ typedef enum {
>>>>>      OPTION_SWAP_LIMIT,
>>>>>      OPTION_ASYNC_COPY,
>>>>>      OPTION_ACCELMETHOD,
>>>>> +    OPTION_DRI3,
>>>>>  } NVOpts;
>>>>>
>>>>>
>>>>> @@ -34,6 +35,7 @@ static const OptionInfoRec NVOptions[] = {
>>>>>      { OPTION_SWAP_LIMIT,       "SwapLimit",    OPTV_INTEGER,   {0}, 
>>>>> FALSE },
>>>>>      { OPTION_ASYNC_COPY,       "AsyncUTSDFS",  OPTV_BOOLEAN,   {0}, 
>>>>> FALSE },
>>>>>      { OPTION_ACCELMETHOD,      "AccelMethod",  OPTV_STRING,    {0}, 
>>>>> FALSE },
>>>>> +    { OPTION_DRI3,             "DRI3",         OPTV_BOOLEAN,   {0}, 
>>>>> FALSE },
>>>>>      { -1,                       NULL,           OPTV_NONE,      {0}, 
>>>>> FALSE }
>>>>>  };
>>>>>
>>>>> diff --git a/src/nv_driver.c b/src/nv_driver.c
>>>>> index 8e2ae03..32f04d8 100644
>>>>> --- a/src/nv_driver.c
>>>>> +++ b/src/nv_driver.c
>>>>> @@ -1470,7 +1470,13 @@ NVScreenInit(SCREEN_INIT_ARGS_DECL)
>>>>>
>>>>>         xf86SetBlackWhitePixels(pScreen);
>>>>>
>>>>> -       nouveau_present_init(pScreen);
>>>>> +       if (nouveau_present_init(pScreen) <= 0)
>>>>> +               xf86DrvMsg(pScrn->scrnIndex, X_INFO,
>>>>> +                          "Hardware support for Present disabled\n");
>>>>> +       else
>>>>> +               xf86DrvMsg(pScrn->scrnIndex, X_INFO,
>>>>> +                          "Hardware support for Present enabled\n");
>>>>> +
>>>>>         nouveau_sync_init(pScreen);
>>>>>         nouveau_dri2_init(pScreen);
>>>>>         if (pNv->AccelMethod == GLAMOR) {
>>>>> @@ -1478,7 +1484,14 @@ NVScreenInit(SCREEN_INIT_ARGS_DECL)
>>>>>                         return FALSE;
>>>>>         } else
>>>>>         if (pNv->AccelMethod == EXA) {
>>>>> -               if (!nouveau_dri3_screen_init(pScreen))
>>>>> +               /* Default to DRI3/Present on XOrg >= 1.16.3, DRI2 on 
>>>>> older
>>>>> +                * servers, as older servers have DRI3/Present bugs 
>>>>> affecting
>>>>> +                * nouveau.
>>>>> +                */
>>>>> +               ret = xf86ReturnOptValBool(pNv->Options, OPTION_DRI3,
>>>>> +                                          XORG_VERSION_CURRENT >=
>>>>> +                                          
>>>>> XORG_VERSION_NUMERIC(1,16,3,0,0));
>>>>> +               if (ret && !nouveau_dri3_screen_init(pScreen))
>>>>>                         return FALSE;
>>>>>
>>>>>                 if (!nouveau_exa_init(pScreen))
>>>>> --
>>>>> 1.9.1
>>>>>
>>>>> _______________________________________________
>>>>> Nouveau mailing list
>>>>> Nouveau@lists.freedesktop.org
>>>>> http://lists.freedesktop.org/mailman/listinfo/nouveau
>>>> _______________________________________________
>>>> Nouveau mailing list
>>>> Nouveau@lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/nouveau
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to