A long-standing bug in RENDER has been that the combination of repeating pictures and transforms don't work. A patch for this was originally supplied in: http://lists.freedesktop.org/archives/cairo/2004-September/001839.html (pipermail has eaten the message, sadly). These patches were later merged into the xserver tree, and mostly then found there way into xorg. However, there is one fix from the patch that got lost - handling the repeat in fbComposite makes no sense when the repeat is in the source and the source is transformed; we're handling it when fetching from the source. I'll attach that.
Created attachment 3208 [details] GPG Key for Sami Wagiaalla The patch I've attached is pulled from a diff between the xserver and xorg copies of fb/.
fb in the current monolith won't build with this patch applied: "fbpict.c", line 1238: undefined symbol: srcTransform "fbpict.c", line 1240: undefined symbol: maskTransform
Ah, sorry, didn't notice those variables were xserver additions that does a better job merging up between the two trees. (unfortunately, I don't have a building copy of xorg to to test on at the moment)
Created attachment 3210 [details] GPG Key for Andrew Cowie Here's a more careful merge that takes care of merging the other changes that Dave Reveman put into fbComposite() when he added the fix (you could do something simpler to get my patch to compile and work, but I think it is important to reduce xserver/xorg divergence for fb/) Note that with this patch, *both* xserver and xorg have unecessary checks: && (pSrc->filter != PictFilterConvolution) && (!pMask || pMask->filter != PictFilterConvolution)) Unnecessary because earlier we have: + if (pSrc->filter == PictFilterConvolution) + srcTransform = TRUE + if (pMask->filter == PictFilterConvolution) + maskTransform = TRUE; That needs to be fixed in both trees simultaneously so I did *not* fix it in this patch. Again, the goal here is to keep divergence to a minimum.
Reopening from NEEDINFO.
Previously attached patch lost in bugzilla disk death.
The original patch was something like (pseudo-patch): compose_data.op = op; compose_data.src = pSrc; compose_data.mask = pMask; compose_data.dest = pDst; if (width > SCANLINE_BUFFER_LENGTH) scanline_buffer = (CARD32 *) malloc(width * 3 * sizeof(CARD32)); + if (pSrc->transform) + srcRepeat = 0; + if (pMask && pMask->transform) + maskRepeat = 0 n = REGION_NUM_RECTS (®ion); pbox = REGION_RECTS (®ion); I have no recollection of what else I merged in the later patch.
Sorry about the phenomenal bug spam, guys. Adding xorg-team@ to the QA contact so bugs don't get lost in future.
Owen Taylor Do you still experience this issue with newer soft ? Please check the status of your issue.
This code got moved to pixman, and (as far as I can tell from a quick read) this no longer applies.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.