Bug 94568

Summary: glamor: wrong offset with ARGB
Product: xorg Reporter: Olivier Fourdan <fourdan>
Component: Server/Acceleration/glamorAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED FIXED QA Contact: Xorg Project Team <xorg-team>
Severity: normal    
Priority: medium    
Version: unspecified   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
Reproducer program
none
Expected result
none
Actual result
none
Possible fix
none
[xserver,RFC,v2] glamor: fix wrong offset on composite rectangles none

Description Olivier Fourdan 2016-03-16 09:59:56 UTC
Created attachment 122340 [details]
Reproducer program

Description:

When enabling glamor acceleration wit hthe modesettings driver, the ARGB surface seems to be painted at (0,0) even though the window is elsewhere.

How reproducible:

100% reproducible

Steps to reproduce:

1. Enable modesetting with glamor acceleration
2. Save and build the attached reproducer

   $ gcc -o cairoframe -g cairoframe.c $(pkg-config --libs --cflags cairo x11)

3. Run the reproducer:

   $ ./cairoframe

Actual result:

The semi-transparent area is placed in (0,0) instead of the window location, leaving part of the window unpainted

Expected result:

The semi-transparent area matches the window location

Additional data:

If relevant, this is on Intel Haswell-ULT Integrated Graphics Controller

The same issue does not occur if glamor accel is not used with modesettings (AccelMethod "None") or when using the intel driver.
Comment 1 Olivier Fourdan 2016-03-16 10:01:03 UTC
Created attachment 122341 [details]
Expected result

This is the expected result, as seen when disabling glamor accel or using intel driver
Comment 2 Olivier Fourdan 2016-03-16 10:01:37 UTC
Created attachment 122342 [details]
Actual result

This is the actual result with modesettings and glamor
Comment 3 Olivier Fourdan 2016-03-16 10:33:54 UTC
This issue is also present in 1.18.2
Comment 4 Olivier Fourdan 2016-03-17 08:28:49 UTC
glamor debug logs captured with the given reproducer:

source pixmap 0x12b65b0 (100 100) mask(0 0) dest(0 0) width 400 height 300 
first clipped when compositing.
[mi] num: 1 size: 0
[mi] extents: 0 0 400 300
[mi] 0 0 400 300 
[mi] 
clipped (100 100) (0 0) (0 0) width 400 height 300 
dest 0 0 
dest(0,0) source(0 0) mask (0 -5408), width 400 height 300 
finish rendering.
glamor_composite_rectangles(op=3, b31159b3 x 1 [(0, 0)x(400, 300) ...])
glamor_composite_rectangles: converted to op 3
_pixman_region_init_clipped_rectangles: nrects=1, region=(100, 100), (500, 400) x 1
glamor_composite_rectangles: drawable extents (100, 100),(500, 400) x 1
glamor_composite_rectangles: clipped extents (100, 100),(500, 400) x 1
glamor_composite_rectangles: pixmap +(-100, -100) extents (0, 0),(400, 300)
clipped (0 0) (0 0) (0 0) width 400 height 300 
dest 0 0 
dest(-100,-100) source(-100 22006) mask (32513 -97), width 400 height 300 
finish rendering.
glamor_composite_rectangles(op=1, ff1980ff x 4 [(0, 0)x(400, 2) ...])
glamor_composite_rectangles: converted to op 1
_pixman_region_init_clipped_rectangles: nrects=4, region=(100, 100), (500, 400) x 4
glamor_composite_rectangles: drawable extents (100, 100),(500, 400) x 4
glamor_composite_rectangles: clipped extents (100, 100),(500, 400) x 4
glamor_composite_rectangles: pixmap +(-100, -100) extents (0, 0),(400, 300)
Comment 5 Olivier Fourdan 2016-03-17 08:43:28 UTC
Created attachment 122364 [details] [review]
Possible fix

That patch fixes the issue for me.
Comment 6 Olivier Fourdan 2016-03-17 08:56:56 UTC
Created attachment 122365 [details] [review]
[xserver,RFC,v2] glamor: fix wrong offset on composite rectangles

https://patchwork.freedesktop.org/patch/77243/

Note: I am not entirely confident with this patch, it fixes the issue for me but I am definitely not certain it's correct...
Comment 7 Olivier Fourdan 2017-06-06 12:58:51 UTC
The patch has landed some time ago, closing.

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.