[regression] unity8 rendering artifacts

Bug #1317260 reported by Alberto Aguirre on 2014-05-07
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Fix Released
Alberto Aguirre
mir (Ubuntu)

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:
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/screencasts (LP: #1301210). Fixes: https://bugs.launchpad.net/bugs/1301210.

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

Daniel van Vugt (vanvugt) wrote :

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.

Changed in mir:
status: New → In Progress
summary: - unity8 rendering artifacts
+ [regression] unity8 rendering artifacts
tags: added: regression
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir/devel at revision None, scheduled for release in mir, milestone Unknown

Changed in mir:
status: In Progress → Fix Committed
Launchpad Janitor (janitor) wrote :
Download full text (7.2 KiB)

This bug was fixed in the package mir - 0.2.0+14.10.20140605-0ubuntu1

mir (0.2.0+14.10.20140605-0ubuntu1) utopic; urgency=medium

  [ Daniel van Vugt ]
  * New upstream release 0.2.0 (https://launchpad.net/mir/+milestone/0.2.0)
    - mirclient ABI unchanged, still at 7. Clients do not need rebuilding.
    - mirserver ABI bumped to 20. Shells need rebuilding.
      . Cursor::set_image() parameters changed.
      . Display::the_cursor() renamed to Display::create_hardware_cursor()
      . Platform::create_display() requires a new parameter; gl_program_factory
      . Renderable::buffer() no longer accepts any parameter at all. Multi-
        monitor frame sync is guaranteed in other ways now.
      . Scene::generate_renderable_list() renamed to renderable_list_for(id)
        where id is an opaque compositor ID of your choosing.
      . Scene::set_change_callback() replaced by the more generic:
        add_observer() and remove_observer() functions.
      . Added default implementation for SceneObserver.
      . SessionCreator renamed to ConnectionCreator.
      . ConnectedSessions renamed to Connections.
      . ProtobufSessionCreator renamed to ProtobufConnectionCreator.
      . SessionAuthorizer: pid_t parameters replaced by SessionCredentials.
      . Massive architectural changes to Input-everything.
      . Surface no longer implements Renderable, but emits one via
      . Pass the full renderable list to Renderer::render().
      . Graceful handling of exceptions thrown from server threads.
      . Clarify size position interfaces in the Surface classes.
      . Plumbing for trusted sessions.
      . Allow posting and managing custom main-loop actions.
      . Timer extension.
      . Identify client process when client connects to Mir not when socket
      . Use the ServerActionQueue for display config.
      . Recomposition signal moved to the MultiThreadedCompositor.
      . Make timer service replaceable.
      . Clarify assumptions about how many buffers a client can fill without
      . Introduce EmergencyCleanup interface.
    - Demo shell enhancements:
      . You can now change graphics modes on the fly using Ctrl+Alt+(-/=).
        To reset to the preferred mode use Ctrl+Alt+0.
      . The above mode changing as well as existing screen rotation keys
        (Ctrl+Alt+arrows) are now per-display; only applied to the monitor
        the mouse pointer is on.
      . New shell controls documented.
    - A new testing category, performance test, was introduced. It currently
      runs glmark2-es2 and compares the result to a minimum threshold.
    - MIR_VERSION_MINOR is tied to MIRSERVER_ABI in the sense that a change
      in the former now requires dependent projects that a rebuild is
    - SwitchingBundle was replaced by BufferQueue.
    - Expand credentials to include uid/gid for session authorizer.
    - Bypass control is now Mesa-specific and tied to the command line options.
      So the environment variable MIR_BYPASS has changed to MIR_SERVER_BYPASS.
    - Ongoing architectural changes in the compositor/renderer logic to


Changed in mir (Ubuntu):
status: New → Fix Released
Changed in mir:
status: Fix Committed → Fix Released
Changed in mir (Ubuntu):
importance: Undecided → Critical
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers