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