Here's an example of what happens with DRI3:
https://bugs.freedesktop.org/show_bug.cgi?id=91445

I'm not equipped to figure out why.

On Mon, Jul 13, 2015 at 11:43 PM, Mario Kleiner
<mario.kleiner...@gmail.com> wrote:
> On 07/07/2015 09:51 PM, Ilia Mirkin wrote:
>>
>> 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.)
>
>
> What are the remaining known trouble spots wrt. sync? It seems to work
> pretty well at least for single gpu + unredirected fullscreen windows (==
> kms page flipping can be used for Presents. That's the use case i usually
> test very obsessively, as it matters very much for my type of applications,
> but other than that i only lightly "test" it via regular desktop use, so
> maybe that's were problems remain?
>
> We can disable it by default on exa - intel and amd/radeon drivers also
> disable by default. However, on gpus >= maxwell only glamor accel is
> supported and glamor on nouveau is either dri3/present or no hw accel at all
> afaics.
>
> Btw. there are also a few patches made by Chris Wilson floating on the
> mailing list since around january, some are reviewed and tested by myself,
> but not included in xorg master. Might be good for people to have a look at
> them and maybe get them into xorg 1.18?
>
>>
>> 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).
>
>
> I can change that to allow selection between "2" and "3" - at least for exa,
> on glamor the parameter "2" would either need to get ignored or it would
> completely disable hw acceleration. I went for consistency with the ati ddx
> because i found the intel variant too confusing. I think it changed multiple
> times during the last year.
>
> thanks,
> -mario
>
>>>
>>> -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