[krillin] overlays are not displayed onscreen in some positions

Bug #1378326 reported by Kevin DuBois
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Fix Released
Kevin DuBois
mir (Ubuntu)

Bug Description

Some positioning of overlays causes the driver to accept the layer as an overlay, and then not display it onscreen. This only affects the "'stable device'", and seems to be a driver problem.

How to reproduce:
1) Position a 500x500 window at 0,0
2) Position a 400x400 window at 0,0

The appearance of the smaller window will cause the first to disappear, when on other devices, both are displayed with the smaller window on top of the larger window. The driver accepts one of the layers as an overlay, and then fails to display it.

Related branches

description: updated
Revision history for this message
Kevin DuBois (kdub) wrote :

This always happens when the driver rejects part of the list, and accepts the other part.

 # | Type |
 0 | OVERLAY |
 1 | GL_RENDER |
 2 | FB_TARGET |

The gl-rendered layer is displayed, but the overlay layer is not.

summary: - overlays are not displayed onscreen in some positions
+ [krillin] overlays are not displayed onscreen in some positions
tags: added: krillin
Revision history for this message
Kevin DuBois (kdub) wrote :

The decision to accept or reject a particular buffer seems based on stride and position. If all are accepted as overlays, or if all are rejected and drawn with GL, then we don't see a problem. If part of the list is accepted and part is rejected, then the driver does not display the buffers that it has accepted. Still digging down in the driver.

Revision history for this message
Kevin DuBois (kdub) wrote :

So after a fair amount of digging into the kernel, it seems that when the composition mode is mixed, the buffer that corresponds to the fb target ends up as the top layer in the display processor controller. If I dig down and force this layer to be 50% alpha by modifying the right register, I can see the other client rendering underneath.

Kevin DuBois (kdub)
Changed in mir:
status: New → In Progress
assignee: nobody → Kevin DuBois (kdub)
Revision history for this message
Kevin DuBois (kdub) wrote :

So, on this device the 'overlays' are actually 'underlays' in that the fb target layer is always presented as the top-most layer, and the overlays make it to the screen by being alpha-blended with the topmost layer. Mir was clearing this using glClearColor(0.0, 0.0, 0.0, 1.0), and so the fb target layer was blocking the underlays from appearing beneath. We should clear with glClearColor(0.0, 0.0, 0.0, 0.0) in the fallback renderer instead.

Changed in mir:
milestone: none → 0.9.0
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir at revision None, scheduled for release in mir, milestone 0.9.0

Changed in mir:
status: In Progress → Fix Committed
Changed in mir (Ubuntu):
importance: Undecided → High
status: New → Triaged
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package mir - 0.9.0+15.04.20141125-0ubuntu1

mir (0.9.0+15.04.20141125-0ubuntu1) vivid; urgency=medium

  [ Alberto Aguirre ]
  * New upstream release 0.9.0 (https://launchpad.net/mir/+milestone/0.9.0)
    - Enhancements:
      . New simpler API to configure and run a mir server.
      . The event loop is now based on GLib's main loop library instead of
      . For Android platforms, the server now sends buffer fence fds to its
        clients instead of potentially stalling the compositor thread waiting
        for them to be signalled.
      . New client debug interface to translate from surface to screen
    - ABI summary: Servers need rebuilding, but clients do not;
      . Mirclient ABI unchanged at 8
      . Mircommon ABI bumped to 3
      . Mirplatform ABI bumped to 4
      . Mirserver ABI bumped to 27
    - Bug fixes:
      . Add a debug interface to translate from surface to screen coordinates
        (LP: #1346633)
      . Ensure a buffer requested by a surface is not delivered
        after the surface is deleted (LP: #1376324)
      . Overlays are not displayed onscreen in some positions (LP: #1378326)
      . Server aborts when an exception is thrown from the main thread
        (LP: #1378740)
      . Fix race causing lost alarm notifications (LP: #1381925)
      . Avoid lifecycle notifications racing with connection release
        (LP: #1386646)
      . Improve error checking and reporting for the client library
       (LP: #1390388)
      . Mir demo-shell now detects power button using proper Linux scan codes
       (LP: #1303817)
      . A prompt session with an invalid application pid should be an error
        (LP: #1377968)
      . When XDG_RUNTIME_DIR is defined but pointing to a non-existing
        directory use "/tmp" (LP: #1304873)
      . [regression] demo-shell bypass is not used on fullscreen surfaces if
        there are windowed surfaces behind (LP: #1378706)
      . Mir upgrade through dist-upgrade installs incorrect platform
        (LP: #1378995)
      . Fix Mir progressbar example using internal glibc defines(LP: #239272)
      . Stop the default_lifecycle_event_handler raising SIGHUP while
        disconnecting (LP: #1386185)
      . [regression] Mir fails to build with MIR_ENABLE_TESTS=OFF (LP: #1388539)
      . [regression] mir_demo_server_basic does not start (LP: #1391923)

  [ Ubuntu daily release ]
  * New rebuild forced
 -- Ubuntu daily release <email address hidden> Tue, 25 Nov 2014 17:49:24 +0000

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

Duplicates of this bug

Other bug subscribers