There is garbage on screen with some stretched XRender pictures with radeon
driver and enabled EXAPixmaps, see for example MSEide without xorg.conf
MSEgui uses stretched one pixel width or height pixmaps in order to draw linear
If you add Option "EXAPixmaps" "off" in Section "Device" of xorg.conf display is OK but performance falls.
Same problem using NOUVEAU driver. I can't figure out how disable EXAPixmaps for nouveau driver.
Created attachment 86093 [details]
Created attachment 86094 [details]
Image showing the issue
Created attachment 86095 [details]
Showing the issue with default MSEide options
Comment on attachment 86094 [details]
Image showing the issue
Running MSEide with -ns option (No skin)
Using Debian stable, testing, sid, Ubuntu 12.04.... Really this happens since KMS was used IIRC. In fact using radeon.modeset=0 fixes it for some ATI cards
MSEgui renders dirty regions first on a pixmap which will be copied to screen by xcopyarea() after completed rendering.
It seems the problems with current radeon driver are independent if there are stretched xrender pictures or not.
Created attachment 86142 [details]
Test program screenshot
Created attachment 86143 [details]
Attached test program. Press Alt+ArrowDown,Esc.
The project is here:
The same issue using nouveau driver can be solved disabling acceleration.
Option "NoAccel" "on"
Using radeon, only EXAPixmaps off is required.
Disabling radeon's EXAPixmaps also mostly disables hardware acceleration.
Intel driver is not affected because doesn't use EXA.
IIRC using XAA instead of EXA is working fine too so all is pointing to EXA.
Created attachment 97945 [details]
I have same bug.
Created attachment 106606 [details]
Created attachment 106608 [details]
Test not OK
We could simplify the testcase:
Running the program in debugger and moving the window shows an image like the attachment "Test not OK".
MSEgui draws the button glyph by a xfillrectangle() with the glyph bitmap as stipple mask. It seems that if there follows an immediate xdrawlines() which touches the xfillrectangle() area the distortion happens. Example:
xdrawlines() with ((x:24;y:25),(x:130;y:25),(x:130;y:50)) -> distorted,
xdrawlines() with ((x:24;y:25),(x:80;y:25),(x:80;y:50)) -> OK.
Also "xflush(); sleep(10ms);" or "xsync()" between xfillrectangle() and
xdrawlines() prevents the distortion.