guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ATI radeon + modesetting


From: Andy Wingo
Subject: ATI radeon + modesetting
Date: Thu, 09 Nov 2017 09:47:33 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux)

Hi,

I just upgraded my desktop machine for the first time in about 3
months.  It has this graphics card from about 5 years ago:

   01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] 
Turks PRO [Radeon HD 7570]

After the upgrade, I was experiencing horrible tearing and corrupted
graphics.  (I do install the binary firware blobs, for what that's
worth, but that wasn't the source of the problem.)  This reminded me of
something I had experienced in the past with Intel on laptops, though
with less intense effects:

  https://bugs.freedesktop.org/show_bug.cgi?id=101620

The ultimate problem in that case was that when running an
OpenGL-enabled composited window manager like gnome-shell, some updates
would not be synchronized to the display.  There were various things you
could do to ungarble the display on the application level, but it was
very irritating.  The origin of the problem is that the synchronization
facilities exposed by OpenGL / GLX weren't playing well with the
acceleration architecture in the Intel xorg driver.  To explain this,
some background follows.

Historically there were different acceleration paths for 2D and 3D
graphics on Linux/X.  Some graphics people work to accelerate 3D, and
some do 2D.  If you have an intel card you might remember XAA, EXA, UXA,
SNA, etc; those are all 2d acceleration paths.  Now these days there is
convergence to accelerate 2D in terms of 3D -- i.e. translate 2D
operations to 3D operations, as much as possible.  Then you just need to
have one good generic 3d acceleration backend.

The new "modesetting" xorg driver is just that: a generic xorg graphics
driver incorporating a generic 2D-in-terms-of-OpenGL acceleration
architecture called "glamor".  The modesetting xorg driver needs basic
facilities from the kernel to get the card into the right mode, then it
can hook into the card-specific support for OpenGL/etc provided by Mesa.
One of these kernel facilities is called "modesetting", hence the name
of the driver.  Glamor and the modesetting driver are now shipped as
part of the X server itself, not as separate modules.

Switching from the Intel driver to the modesetting driver was thus a
switch from a separate 2D and 3D accel path to a unified path.
Additionally, the 2d accel path in the intel driver was not very well
maintained.  There had been no release of xf86-video-intel for a couple
years; distros that used that driver (a dwindling number; Debian
switched over last year) used Git snapshots.  The "SNA" acceleration
architecture that the Intel devs came up with was indeed fast, but had
some problems that couldn't be resolved related to buffer
synchronization.  Normally SNA worked fine but for some reason emacs
under a composited WM exhibited corruption, so in guix we switched back
to UXA, an earlier 2D accel architecture, but that was quite slow.  So
in c68c201fdd429140da1c606861c9296b9cb01265, we switched over to prefer
the modesetting driver for Intel cards that are recent enough to have
enough OpenGL support for the glamor pipeline to be usable.

Recalling all of this history, I thought that perhaps a switch to
modesetting could fix my radeon problems as well, and indeed, voilà,
this patch fixes it:

--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -117,7 +117,7 @@ Section \"Files\"
   FontPath \"" font-adobe75dpi "/share/fonts/X11/75dpi\"
   ModulePath \"" xf86-video-vesa "/lib/xorg/modules/drivers\"
   ModulePath \"" xf86-video-fbdev "/lib/xorg/modules/drivers\"
-  ModulePath \"" xf86-video-ati "/lib/xorg/modules/drivers\"
+  # ModulePath \"" xf86-video-ati "/lib/xorg/modules/drivers\"
   ModulePath \"" xf86-video-cirrus "/lib/xorg/modules/drivers\"
   ModulePath \"" xf86-video-intel "/lib/xorg/modules/drivers\"
   ModulePath \"" xf86-video-mach64 "/lib/xorg/modules/drivers\"

Removing the ATI driver from the X server makes modesetting the "best"
available driver; from Xorg.0.log:

  [   465.481] (==) Matched ati as autoconfigured driver 0
  [   465.483] (==) Matched ati as autoconfigured driver 1
  [   465.485] (==) Matched modesetting as autoconfigured driver 2
  [   465.487] (==) Matched fbdev as autoconfigured driver 3
  [   465.489] (==) Matched vesa as autoconfigured driver 4
  [   465.491] (==) Assigned the driver to the xf86ConfigLayout
  [   465.491] (II) LoadModule: "ati"
  [   465.494] (WW) Warning, couldn't open module ati
  [   465.494] (II) UnloadModule: "ati"
  [   465.494] (II) Unloading ati
  [   465.498] (EE) Failed to load module "ati" (module does not exist, 0)
  [   465.498] (II) LoadModule: "modesetting"
  [   465.500] (II) Loading 
/gnu/store/2ka3fa3rkxglhn88pqfv8gpcw0ai8fjk-xorg-server-1.19.5/lib/xorg/modules/drivers/modesetting_drv.so
  [   465.502] (II) Module modesetting: vendor="X.Org Foundation"
  [   465.502]    compiled for 1.19.5, module version = 1.19.5
  [   465.504]    Module class: X.Org Video Driver
  [   465.504]    ABI class: X.Org Video Driver, version 23.0

I think I would like to apply this patch to Guix.  My only concern would
be that perhaps there are people using older radeon cards that don't
support Glamor; dunno.  I do see bugs around this area that suggest that
the radeon driver is also slipping into disrepair, e.g.:

  https://bugs.freedesktop.org/show_bug.cgi?id=102054

But considering that the ATI driver was only added to the default
modules a year ago in 3126fd8820e8c30e27ef978d66dced8763d04905, before
our Xorg server configuration included the paths to the modesetting
driver, perhaps the risk is low.  Any thoughts?

Andy



reply via email to

[Prev in Thread] Current Thread [Next in Thread]