[regression] unity8 rendering artifacts
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
Critical
|
Alberto Aguirre | ||
mir (Ubuntu) |
Fix Released
|
Critical
|
Unassigned |
Bug Description
Running unity8 in nested mode using the latest mir devel tip (r1607) has artifacts (pockets of black regions) in nexus 4 and nexus 7 (2013). Nexus 10 just renders black.
Bisection points to this commit:
"
r1581:
Ensure the alpha component (if any) of the frame buffer is never changed
during compositing. Otherwise you could end up with translucent pixels which
produce incorrect looking screenshots/
Approved by Robert Carr, Kevin DuBois, Alan Griffiths, Alberto Aguirre, PS Jenkins bot.
"
The issue is that in a nested scenario:
- the nested display allocates a surface with the output format of the main server
- The nested compositor (unity-mir in this case) no longer writes the alpha channel (GLRenderer masks alpha channel).
- The alpha values are uninitialized in that surface.
- The system compositor then blends the nested server surface taking it's alpha component into account; since that surface alpha channel is uninitialized some regions in the surface may be completely transparent so the black background is visible instead.
Related branches
- Alan Griffiths: Approve
- Daniel van Vugt: Approve
- PS Jenkins bot (community): Approve (continuous-integration)
-
Diff: 56 lines (+13/-0)4 files modifiedinclude/test/mir_test_doubles/mock_gl.h (+1/-0)
src/server/compositor/gl_renderer.cpp (+4/-0)
tests/mir_test_doubles/mock_gl.cpp (+6/-0)
tests/unit-tests/compositor/test_gl_renderer.cpp (+2/-0)
- Daniel van Vugt: Needs Fixing
- PS Jenkins bot (community): Approve (continuous-integration)
-
Diff: 135 lines (+46/-9)7 files modifiedexamples/demo-shell/demo_renderer.cpp (+0/-4)
include/test/mir_test_doubles/mock_gl.h (+1/-0)
src/server/compositor/gl_renderer.cpp (+0/-4)
src/server/compositor/screencast_display_buffer.cpp (+18/-0)
tests/mir_test_doubles/mock_gl.cpp (+6/-0)
tests/unit-tests/compositor/test_gl_renderer.cpp (+0/-1)
tests/unit-tests/compositor/test_screencast_display_buffer.cpp (+21/-0)
summary: |
- unity8 rendering artifacts + [regression] unity8 rendering artifacts |
tags: | added: regression |
Changed in mir: | |
status: | Fix Committed → Fix Released |
Changed in mir (Ubuntu): | |
importance: | Undecided → Critical |
I suggest this perhaps should not be fixed. If we have any nested servers utilizing the alpha channel that's an unacceptable performance hit on anything other than high-end hardware.