Mir lacks a direct rendering ("bypass") mode
Bug #1109963 reported by
Daniel van Vugt
This bug affects 11 people
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
Critical
|
Daniel van Vugt | ||
mir (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Mir lacks a direct rendering mode.
Direct rendering means when a surface is full screen, the app is allowed to render directly to the framebuffer and bypass the compositor. This is a critical requirement for gaming performance. We did this in Compiz and it's the reason why Ubuntu went from just about the slowest distro for gaming in 12.10 to the fastest in recent benchmarks of 13.04. (In compiz, it's known as "Unredirected Fullscreen Windows").
Related branches
lp:~vanvugt/mir/bypass
- PS Jenkins bot (community): Approve (continuous-integration)
- Robert Ancell: Needs Fixing
- Alan Griffiths: Approve
- Daniel van Vugt: Abstain
- Alexandros Frantzis (community): Approve
- kevin gunn (community): Approve
-
Diff: 1377 lines (+981/-13)27 files modifiedinclude/platform/mir/graphics/buffer.h (+1/-0)
include/platform/mir/graphics/display_buffer.h (+6/-0)
include/server/mir/compositor/basic_display_buffer_compositor.h (+1/-1)
include/test/mir_test_doubles/mock_buffer.h (+2/-0)
include/test/mir_test_doubles/mock_compositing_criteria.h (+0/-1)
include/test/mir_test_doubles/mock_display_buffer.h (+1/-0)
include/test/mir_test_doubles/null_display_buffer.h (+1/-0)
include/test/mir_test_doubles/stub_buffer.h (+2/-0)
include/test/mir_test_doubles/stub_compositing_criteria.h (+71/-0)
src/server/compositor/CMakeLists.txt (+1/-0)
src/server/compositor/bypass.cpp (+118/-0)
src/server/compositor/bypass.h (+64/-0)
src/server/compositor/default_display_buffer_compositor.cpp (+49/-0)
src/server/compositor/default_display_buffer_compositor.h (+2/-0)
src/server/compositor/temporary_buffers.cpp (+5/-0)
src/server/compositor/temporary_buffers.h (+1/-0)
src/server/graphics/android/buffer.cpp (+5/-0)
src/server/graphics/android/buffer.h (+1/-0)
src/server/graphics/android/gpu_hwc_android_display_buffer_factory.cpp (+5/-0)
src/server/graphics/gbm/gbm_buffer.cpp (+13/-2)
src/server/graphics/gbm/gbm_buffer.h (+9/-0)
src/server/graphics/gbm/gbm_buffer_allocator.cpp (+20/-1)
src/server/graphics/gbm/gbm_display_buffer.cpp (+48/-8)
src/server/graphics/gbm/gbm_display_buffer.h (+5/-0)
tests/unit-tests/compositor/CMakeLists.txt (+1/-0)
tests/unit-tests/compositor/test_bypass.cpp (+258/-0)
tests/unit-tests/compositor/test_default_display_buffer_compositor.cpp (+291/-0)
Changed in mir: | |
status: | New → Triaged |
information type: | Proprietary → Public |
Changed in mir: | |
assignee: | nobody → Kevin DuBois (kdub) |
milestone: | none → 0.0.4 |
status: | Triaged → In Progress |
Changed in mir: | |
status: | In Progress → Triaged |
assignee: | Kevin DuBois (kdub) → nobody |
summary: |
- Mir lacks a direct rendering mode + Mir lacks a direct rendering ("bypass") mode |
Changed in mir: | |
milestone: | 0.0.4 → 0.0.5 |
Changed in mir: | |
milestone: | 0.0.5 → 0.0.6 |
Changed in mir: | |
assignee: | nobody → Daniel van Vugt (vanvugt) |
Changed in mir: | |
status: | Triaged → In Progress |
Changed in mir: | |
milestone: | 0.0.6 → 0.0.7 |
Changed in mir: | |
importance: | High → Critical |
Changed in mir: | |
milestone: | 0.0.7 → 0.0.8 |
Changed in mir: | |
milestone: | 0.0.8 → 0.0.9 |
Changed in mir: | |
milestone: | 0.0.9 → 0.0.10 |
Changed in mir: | |
milestone: | 0.0.10 → 0.0.11 |
Changed in mir: | |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
The really fancy part is how GLX implements this with multiple monitors. You can have a single framebuffer for all your monitors and yet one of them could be rendered directly bypassing the compositor if it's covered by a fullscreen window. How this was achieved is documented in the paper "System Support for OpenGL Direct Rendering (1995)": http:// citeseerx. ist.psu. edu/viewdoc/ summary? doi=10. 1.1.47. 4979