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