Bug 28098

Summary: Compiz renders shadows wrong, garbage line of pixels along left and top edge of windows
Product: xorg Reporter: Brian Rogers <brian>
Component: Driver/intelAssignee: Chris Wilson <chris>
Status: RESOLVED FIXED QA Contact: Xorg Project Team <xorg-team>
Severity: normal    
Priority: medium    
Version: git   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
screenshot of the problem
none
screenshot with adjusted x and y offsets none

Description Brian Rogers 2010-05-13 23:53:21 UTC
Created attachment 35645 [details]
screenshot of the problem

On my i965 laptop with a recent update from xorg-edgers, I get a fine line of black pixels to the left of each window, and a few stray black pixels above each window. These artifacts are one pixel wide and a small space away from the edges of the window. They are partially transparent.

There is also no shadow effect around the windows, so it looks like the garbage pixels are a failed attempt by Compiz to render shadows.

The stray pixels don't show up in all bad versions (at least not all the time), but after noticing that shadows were missing, I was able to bisect down to the first commit that didn't draw shadows:

commit a7b800513fcc94e063dfd68d2f63b6bab7fae47d
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed Apr 14 21:14:34 2010 +0100

    uxa: Extract sub-region from in-memory buffers.
    
    If the buffer is too large or not suitable for a GPU operation, we
    currently fallback and perform the composite on the CPU. An alternative
    is too extract the small region out of the source (as usually the
    sample extents are much smaller than the actual surface size) and try
    the composite with the new surface.
    
    The effect is particularly noticeable on pathological websites that use
    very large background images. For example, http://www.woodtv.com/ uses a
    1299x15000 pattern that is obscured by another opaque pattern.
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Comment 1 Chris Wilson 2010-05-14 17:24:27 UTC
Haven't yet reproduced this, there is a possibility that I accidentally fixed it whilst on a rendercheck spree...

Brian would you be so kind as to check whether master has regressed any further?
Comment 2 Brian Rogers 2010-05-14 17:40:20 UTC
Problem still exists as of 9c3da71349bcfeabae08f1572cf602c357bf7641. I don't see any changes...
Comment 3 Brian Rogers 2010-05-14 20:31:59 UTC
Created attachment 35666 [details]
screenshot with adjusted x and y offsets

Chris, are you getting properly drawn soft-shadows?

There are two components to this bug:

1. the stray lines of pixels
2. the lack of soft-shadows

That second problem isn't as obvious, but it's the thing to look for since the first problem doesn't show up with all settings. If I change the shadow radius under "window decoration" in ccsm, the stray lines can be greatly diminished or go away with some settings.

If I change the x and y shadow offsets from their defaults of 1, I can see that the "direct" part of the shadow that's supposed to be of highest opacity shows up correctly, and it's the soft border around that that's not drawn correctly. Here's a screenshot of that.
Comment 4 Chris Wilson 2010-05-15 01:15:53 UTC
Nope, not yet, still battling with a broken mutter. :(

* decides to reinstall and add a Ubuntu and Rawhide partition for punishment

Anyway, looks like there are two bugs here. The first is using a blit for a repeat mode of convolution. The second I'm is using a blit and accessing outside of the source bounds. Fixing the first is fairly easy but hides the second, so lets fix that first.

commit ef95899f5b21453daeabf81a3015b22456d21fec
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Sat May 15 09:02:07 2010 +0100

    uxa: Check the w-scaling component is 1 for an translation matrix
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

commit 58b089febceca1e915607bb723ee658aaa9dbed3
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Sat May 15 09:11:46 2010 +0100

    uxa: Avoid using blits when with PictFilterConvolution
    
    References:
    
      Bug 28098 Compiz renders shadows wrong, garbage line of pixels along left
                and top edge of windows
      https://bugs.freedesktop.org/show_bug.cgi?id=28098
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

However, there still may be an issue with uxa_acquire_drawable() - that's the bit responsible for converting an unhandled source (like convolution filters) into a texture.
Comment 5 Brian Rogers 2010-05-15 03:27:20 UTC
It all looks correct now. No lines, and soft shadows are back. Fixed!

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.