[enhancement] Add support for full OpenGL compositing

Bug #1420581 reported by Daniel van Vugt
This bug affects 4 people
Affects Status Importance Assigned to Milestone
Canonical System Image
Fix Released
Daniel van Vugt
Fix Released
Daniel van Vugt
mir (Ubuntu)
Fix Released

Bug Description

[enhancement] Add support for full OpenGL compositing.

libmirserver/platform presently is only compiled to use the "ES" subset of OpenGL. This works for mobile devices and many desktop use cases but not all.

There are a few pending reasons to compile for full OpenGL on desktop (and/or switch at runtime!):

1. Qt only understands full OpenGL on desktop. Presently we use a hack that makes it call ES functions pretending to be full OpenGL, but this hack will fail when we support non-Mesa desktop drivers.

2. Proprietary desktop drivers sometimes don't support ES.

3. Proprietary desktop drivers often (last I checked) perform better with full OpenGL. Not sure why, probably just driver maturity.

4. There is evidence (bug 1420574) that ES doesn't work at all on some older chipsets and regular OpenGL is required.

Tags: enhancement

Related branches

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

On point #4 it's worth noting that such older chipsets possibly also don't have hardware shaders. But we could at least make basic Mir viable for them by writing an OpenGL 1.x renderer.

description: updated
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Before anyone bothers with this we'd need to find out if EGL 1.4 or some extension can be used to replace GL_OES_EGL_image. Without such a replacement, we can't render clients :)

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

I mean can't "composite" clients.

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

libepoxy is a nice solution for this kind of thing. It lets you write the code once and choose between full GL or ES later.

Changed in mir:
assignee: nobody → Daniel van Vugt (vanvugt)
Changed in mir:
milestone: none → 0.24.0
status: Triaged → In Progress
Revision history for this message
Emanuele Antonio Faraone (emanueleant03) wrote :

It would also be possible with vulkan?

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

This bug has nothing to do with Vulkan. And we have no immediate plan to support shells written in Vulkan yet. Eventually, just not soon.

Please discuss Vulkan in bug 1539896 instead.

Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

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

Changed in mir:
status: In Progress → Fix Committed
Changed in canonical-devices-system-image:
status: New → Fix Committed
importance: Undecided → Medium
milestone: none → 13
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (5.7 KiB)

This bug was fixed in the package mir - 0.24.0+16.10.20160815.3-0ubuntu1

mir (0.24.0+16.10.20160815.3-0ubuntu1) yakkety; urgency=medium

  * New upstream release 0.24.0 (https://launchpad.net/mir/+milestone/0.24.0)
    - ABI summary:
      . mirclient ABI unchanged at 9
      . mirserver ABI bumped to 41
      . mircommon ABI unchanged at 6
      . mirplatform ABI bumped to 12
      . mirprotobuf ABI unchanged at 3
      . mirplatformgraphics ABI bumped to 10
      . mirclientplatform ABI unchanged at 5
      . mirinputplatform ABI unchanged at 5
    - Enhancements:
      . Added a new tool 'mirvanity' which can use a high speed video camera
        to measure client-to-screen latency.
      . Added (build-time) support for desktop full OpenGL servers (disabled
        by default in favor of GLESv2).
      . Introduced new buffer semantics (NBS) and enabled it by default.
      . Avoided using libmirserver in mir_demo_standalone_render_overlays,
        making bringup traces less cluttered.
      . Removed TilingWindowManager from example servers.
      . Added two new mir_*_performance_test tools that are run as part of
      . Added pointer confinement to the client API.
      . Added new platform supporting software EGLStreams.
      . Added an input platform that the nested server can use.
      . Allow configuration of the application_not_responding_detector
      . Handle server-side keymapping using XKBMapper.
      . Remove the offscreen display.
      . Add callback option to notify shells that the server is about to stop.
      . Add logging for ANativeWindow events on Android.
    - Bugs fixed:
      . usage of std:call_once in mirclient causes TLS collisions with some
        android devices (LP: #1599867)
      . AltGr not working on external keyboards (LP: #1565236)
      . [regression] unity8 fails to start when built with 0.24 series (lp:mir)
        (LP: #1597717)
      . CI failure in MirSurfaceVisibilityEvent.exposed_received_when_surface_
        raised_over_occluding_surface [called twice - over-saturated and active]
        (LP: #1556045)
      . package-built mir_demo_server does not start on device (LP: #1577357)
      . During surface creation, first stream in spec becomes default stream.
        (LP: #1577967)
      . mouse is getting stuck on a phantom edge (LP: #1580774)
      . [testsfail] in MirSurfaceVisibilityEvent.exposed_received_when_surface_
        raised_over_occluding_surface [never called] (LP: #1581385)
      . [enhancement] Add support for full OpenGL compositing (LP: #1420581)
      . [testsfail] ServerSignal.terminate_handler_is_called_for_SIGINT|SIGTERM
        (LP: #1570353)
      . [testsfail] ClientLatency.triple_buffered_client_has_less_than_two_
        frames_latency (LP: #1576690)
      . [testsfail] NestedServer.when_monitor_plugged_in_client_is_notified_of_
        new_display_configuration (LP: #1576760)
      . mir server crashed in what(): drmModeMoveCursor failed (returned -13)
        (LP: #1579630)
      . mirtest-dev is hard to use as the objects used are compiled with LTO
        (LP: #1583536)
      . [testsfail] ClientLogging.repo...


Changed in mir (Ubuntu):
status: New → Fix Released
Changed in mir:
status: Fix Committed → Fix Released
Changed in canonical-devices-system-image:
assignee: nobody → Daniel van Vugt (vanvugt)
Changed in canonical-devices-system-image:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers