Mario Kleiner
2015-Jul-14 03:43 UTC
[Nouveau] [PATCH] Add Option "DRI3" to allow to disable DRI3 under EXA.
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.velikov at 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 <imirkin at 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.velikov at 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 <imirkin at 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.de at 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.de at 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 at lists.freedesktop.org >>>>>> http://lists.freedesktop.org/mailman/listinfo/nouveau >>>>> _______________________________________________ >>>>> Nouveau mailing list >>>>> Nouveau at lists.freedesktop.org >>>>> http://lists.freedesktop.org/mailman/listinfo/nouveau
Ilia Mirkin
2015-Jul-14 15:26 UTC
[Nouveau] [PATCH] Add Option "DRI3" to allow to disable DRI3 under EXA.
On Mon, Jul 13, 2015 at 11:43 PM, Mario Kleiner <mario.kleiner.de at 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?Adam is the one who actually understands it... I was just asking questions and the answer was "that's broken". A user was using DRI3 with EXA (nouveau DDX), and was seeing render fail in the form of stale things on the screen. The nouveau DDX does a lot of "implicit" sync stuff... it just emits commands into a pushbuf without kicking it. However the libdrm code has cleverness to kick out any pushbufs if you do a nouveau_bo_wait and that bo has been referenced. HOWEVER if you have a pixmap and you share it using the fd thing, and another process makes a (shared) bo out of it, and then does a nouveau_bo_wait, that in no way will cause the DDX to kick its pushbuf. Apparently there's some sort of sync thing that's supposed to happen, but that's entirely unimplemented for DRI3. Unfortunately I can't provide more details than that, as my knowledge of X internals is quite limited. Some sort of DRI drawable or GLX drawable or ... something. I have no proof that this is the cause of the issue the user was seeing, in fact it's just as likely to be something else. However this seems like a pretty significant issue to me.> > 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.You probably saw my patches to just remove glamor from nouveau :) That integration doesn't support DRI2, which in turn means no core contexts (due to lack of GLX_ARB_create_context_profile), and a slew of other issues. Seemed easier to just tell people to go use modesetting, which gets all of these things right(er).> > 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?I would not oppose the reviewing of Chris's patches ;) However I'm in no position to evaluate them myself.> >> >> On Sat, Jul 4, 2015 at 3:03 PM, Emil Velikov <emil.l.velikov at 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.Bleargh. The ati ddx option name is much newer. Has it seen a release yet? It'd be really nice to get all the DDX's to just agree on something, instead of having different-but-similar options which confuse everyone. -ilia
Mario Kleiner
2015-Jul-14 19:00 UTC
[Nouveau] [PATCH] Add Option "DRI3" to allow to disable DRI3 under EXA.
On 07/14/2015 05:26 PM, Ilia Mirkin wrote:> On Mon, Jul 13, 2015 at 11:43 PM, Mario Kleiner > <mario.kleiner.de at 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? > > Adam is the one who actually understands it... I was just asking > questions and the answer was "that's broken". A user was using DRI3 > with EXA (nouveau DDX), and was seeing render fail in the form of > stale things on the screen. The nouveau DDX does a lot of "implicit" > sync stuff... it just emits commands into a pushbuf without kicking > it. However the libdrm code has cleverness to kick out any pushbufs if > you do a nouveau_bo_wait and that bo has been referenced. > > HOWEVER if you have a pixmap and you share it using the fd thing, and > another process makes a (shared) bo out of it, and then does a > nouveau_bo_wait, that in no way will cause the DDX to kick its > pushbuf. Apparently there's some sort of sync thing that's supposed toAlthough then i'd expect the other process to hang in nouveau_bo_wait? There probably isn't a specific fdo bug for this?> happen, but that's entirely unimplemented for DRI3. Unfortunately I > can't provide more details than that, as my knowledge of X internals > is quite limited. Some sort of DRI drawable or GLX drawable or ... > something. > > I have no proof that this is the cause of the issue the user was > seeing, in fact it's just as likely to be something else. However this > seems like a pretty significant issue to me. >Ok, thanks for the explanation. But would this problem then be limited to exa + nouveau? glamor uses opengl and thereby mesa's and i think mesa gets sync right afaik, at least in the glx/dri3 backend. Didn't look at egl backend though. At least i didn't see any such corruption? I'll change the patch to default to DRI 2 then for exa, and glamor will ignore the DRI parameter anyway and stick to DRI3.>> >> 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. > > You probably saw my patches to just remove glamor from nouveau :) That > integration doesn't support DRI2, which in turn means no core contexts > (due to lack of GLX_ARB_create_context_profile), and a slew of other > issues. Seemed easier to just tell people to go use modesetting, which > gets all of these things right(er). >Hm, a total removal would at least make me and my users rather unhappy atm., as without glamor no hw accel at all on >= maxwell. modesetting and nouveau are not on par feature-wise atm. E.g., modesetting as of the next xorg 1.18 server only provides pageflipping via dri3/present and without pageflipping it is game over for many of my use cases on nouveau-kms. Also modesetting currently completely lacks ZaphodHeads support. Without ZaphodHeads i can't have a page-flipped fullscreen window on one subset of outputs and a regular desktop on another subset, something that is needed for neuroscience/medical/vr applications. So i'd rather like to preserve the choice of glamor. What makes glamor + dri2 difficult to support in nouveau vs. other drivers?>> >> 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? > > I would not oppose the reviewing of Chris's patches ;) However I'm in > no position to evaluate them myself. > >> >>> >>> On Sat, Jul 4, 2015 at 3:03 PM, Emil Velikov <emil.l.velikov at 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. > > Bleargh. The ati ddx option name is much newer. Has it seen a release > yet? It'd be really nice to get all the DDX's to just agree on > something, instead of having different-but-similar options which > confuse everyone. >No release tagged yet, so one could still change it. -mario> -ilia >
Ilia Mirkin
2015-Jul-24 15:40 UTC
[Nouveau] [PATCH] Add Option "DRI3" to allow to disable DRI3 under EXA.
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.de at 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.velikov at 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 <imirkin at 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.velikov at 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 <imirkin at 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.de at 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.de at 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 at lists.freedesktop.org >>>>>>> http://lists.freedesktop.org/mailman/listinfo/nouveau >>>>>> >>>>>> _______________________________________________ >>>>>> Nouveau mailing list >>>>>> Nouveau at lists.freedesktop.org >>>>>> http://lists.freedesktop.org/mailman/listinfo/nouveau