[Openchrome-devel] Possible incorrect composite repeat rendering
Daniel Drake
dsd at laptop.org
Tue Oct 30 08:56:16 PDT 2012
Hi,
I think I saw mentioned that EXA is disabled at the moment?
Anyway, I presume that is only temporary.
While working on the chrome driver I found a bug that (at least
looking at the code) looks like it would also affect openchrome.
The issue can be seen with icons in the GNOME fallback system tray -
they partially repeat outside their bounds. It can also be seen with a
small test app at http://dev.laptop.org/ticket/12138
The problem is that EXA asks us to work outside of the coordinates of
the source pixmap. The current driver/hardware behaviour here is
tiling: the out-of-bounds coordinate is wrapped into the bounds of the
source pixmap and that pixel value is used.
By some random messing around I found that textureModesT/textureModesS
controls what the hardware does w.r.t. out-of-bounds pixel accesses,
and actually the constant values for that field map exactly to the
pSrcPicture->repeat values from the render spec
==========
9. Source and Mask Transformations
When fetching pixels from the source or mask pictures, Render provides four
options for pixel values which fall outside the drawable (this includes
pixels within a window geometry obscured by other windows).
+ None. Missing values are replaced with transparent.
+ Pad. Replace missing pixels with the nearest available
pixel. Where multiple pixels are equidistant, select
those with smallest Y and then smallest X coordinates
+ Normal. Select the pixel which would appear were the
drawable tiled to enclose the missing coordinate. If
the tiling doesn't cover the coordinate, use the
selected Constant or Nearest mode.
* Reflect. Select the pixel which would appear were the
drawable tiled to enclose the missing coordinate in such a
way that tiles in even numbered columns are reflected in the Y
axis, and tiles in even numbered rows are reflected in the X
axis. Tiles that in both an even numbered row and an even
numbered column are reflected in both axes.
==========
The chrome fix is here:
http://dev.laptop.org/git/users/jnettlet/xf86-video-chrome/commit/?id=6704c70744372dc8e62b8fa700f93fab2ac9504d
which can probably be applied to openchrome as well without much trouble.
Thanks
Daniel
More information about the Openchrome-devel
mailing list