Bug 85910 - Massive graphical corruption on wide multihead display
Summary: Massive graphical corruption on wide multihead display
Status: NEEDINFO
Alias: None
Product: xorg
Classification: Unclassified
Component: Driver/intel (show other bugs)
Version: unspecified
Hardware: Other All
: medium normal
Assignee: Chris Wilson
QA Contact: Intel GFX Bugs mailing list
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-11-05 10:06 UTC by Adam Nielsen
Modified: 2014-11-06 07:19 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments
xrandr --verbose output when corrupt (12.14 KB, text/plain)
2014-11-05 13:31 UTC, Adam Nielsen
no flags Details
xorg log when corruption is present (45.31 KB, text/plain)
2014-11-05 13:32 UTC, Adam Nielsen
no flags Details
xorg log when everything is fine (45.42 KB, text/plain)
2014-11-05 13:34 UTC, Adam Nielsen
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Adam Nielsen 2014-11-05 10:06:18 UTC
Three monitors, set up as three screens with Xinerama enabled, left to right:

 - 2560x1600 normal rotation
 - 1600x1200 left rotation
 - 1600x1200 left rotation

If one of the 1600x1200 screens is rotated back to normal orientation, everything continues to work fine.  But if *both* are rotated back to normal, everything goes haywire.

When typing into a window parts of the screen will alternate between normal and black, sometimes the whole screen will go black except for the last few letters typed in a terminal, using a menu can make all three monitors flash between grey and black over the whole screen, etc.  The mouse cursor is the only thing that behaves normally the whole time.

Putting one of the screens back to 'left' rotation immediately makes everything return to normal and all graphical corruption disappear.

This bug happens 100% of the time, and it doesn't matter whether the arrangement is handled via xorg.conf or via xrandr, both methods are able to produce (and then fix) the corruption by rotating the various screens.

It does not appear to be an issue with the overall X desktop size, because the problem still happens if the origin of the screens is moved to overlap another screen, reducing the size of the full X display.  When there is corruption, it affects all three displays (it is not limited to the ones being rotated.)

Here is a sample config:

Section "Device"
	Identifier "d_intel"
	Driver "intel"

	Option "monitor-DP1"   "m_dell_3008wfp"
	Option "monitor-HDMI1" "m_dell_2001fp"
	Option "monitor-HDMI3" "m_dell_2007fp"
	Option "monitor-VGA1"  "none"
EndSection

Section "Monitor"
	Identifier "m_dell_3008wfp"

	Option "PreferredMode" "2560x1600"
	Option "Enable" "true"
	Option "Rotate" "normal"
	Option "Primary" "true"
EndSection

Section "Monitor"
	Identifier "m_dell_2001fp"

	Option "PreferredMode" "1600x1200"
	Option "Enable" "true"
#	Option "Rotate" "left"  # Corruption if both rotations are off
	Option "RightOf" "m_dell_3008wfp"
EndSection

Section "Monitor"
	Identifier "m_dell_2007fp"

	Option "PreferredMode" "1600x1200"
	Option "Enable" "true"
#	Option "Rotate" "left"  # Corruption if both rotations are off
#	Option "RightOf" "m_dell_2001fp"
	Option "Position" "2560 0"
EndSection

Section "Screen"
	Identifier "s_intel_1"
	Device "d_intel"
	Monitor "m_dell_3008wfp"
EndSection

Section "Screen"
	Identifier "s_intel_2"
	Device "d_intel"
	Monitor "m_dell_2001fp"
EndSection

Section "Screen"
	Identifier "s_intel_3"
	Device "d_intel"
	Monitor "m_dell_2007fp"
EndSection

Section "ServerLayout"
	Identifier   "l_intel"

	Screen "s_intel_1"
	Screen "s_intel_2"
	Screen "s_intel_3"
EndSection
Comment 1 Chris Wilson 2014-11-05 10:09:33 UTC
Please attach Xorg.0.log and the output of xrandr --verbose in the corrupt setup. What software configuration are you using, i.e. desktop environment and compositor (window manager)?
Comment 2 Adam Nielsen 2014-11-05 13:31:15 UTC
Created attachment 108955 [details]
xrandr --verbose output when corrupt

The screen flickered between normal and grey at each keypress when I typed the xrandr command
Comment 3 Adam Nielsen 2014-11-05 13:32:41 UTC
Created attachment 108957 [details]
xorg log when corruption is present
Comment 4 Adam Nielsen 2014-11-05 13:34:21 UTC
Created attachment 108958 [details]
xorg log when everything is fine

Only difference between this and the corrupted log is that here one screen is in "rotate left" mode.  When all screens are in landscape the corruption is present.
Comment 5 Adam Nielsen 2014-11-05 13:43:17 UTC
Ohh you just reminded me I am using the "compton" compositor.  If I kill that then everything is fine.

For the record I'm using the "awesome" window manager and without compton running, everything is fine.  Looks like it may not be a bug in the driver after all!

Sorry for the noise.
Comment 6 Chris Wilson 2014-11-05 17:34:00 UTC
iirc, compton offers various methods for its compositors, are they all affected?
Comment 7 Adam Nielsen 2014-11-06 01:17:34 UTC
The --glx-swap-method takes parameters 0 through 6, and 0, 4 and 6 do actually work.  But 1, 2, 3, and 5 cause corruption.  I believe 2 is double-buffer and 3 is triple-buffer.  Including or omitting the --paint-on-overlay option has no effect.

It looks in many ways like old buffers aren't being erased, because the corruption can be anything from what was displayed previously on one screen suddenly appearing in the middle of another screen, or the contents of one screen being drawn on another but if the screen's width is different then there is a stair-stepping effect.  This is in units of say eight pixels high, as the image is drawn across the display and when the horizontal edge of the image is reached, it keeps drawing from the next row.  Looks just like when you load an image file with the wrong width and a little bit of the next row gets drawn on the end of the previous row.
Comment 8 Chris Wilson 2014-11-06 07:19:06 UTC
You have to disable glx-no-rebind-pixmap, which requires

commit e3a15d5f94d70d9925ac092286bce1d9c139f281
Author: Richard Grenville <pyxlcy@gmail.com>
Date:   Fri Apr 5 21:05:19 2013 +0800

    Improvement: GLX: Cache region contents & --glx-no-rebind-pixmap

as it is broken by design. Or just not use compton, it doesn't do anything that the ddx cannot do itself with Option "TearFree" (and TearFree also works with rotation etc).


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct.