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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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
<[email protected]> 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 <[email protected]>
---
  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
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau
_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau
_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to