A scaled (not panned or clipped) mirror/clone mode is desired
Bug #1639226 reported by
Gerry Boland
This bug affects 4 people
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
High
|
Daniel van Vugt |
Bug Description
Unity8 wants the ability to configure the displays to clone mode.
That is, unity8 has a single surface, which then USC composites on all displays - scaling the surface so that unity8 is fullscreen (or with minimal black borders) on all displays.
Currently all Unity8 can do is configure all displays to view position (0,0), so that all displays render the surface at that position. But for displays of differing resolution, that surface can be clipped/bordered. This is not ideal.
Related branches
lp://staging/~vanvugt/mir/displaybuffer-transform
- Mir CI Bot: Approve (continuous-integration)
- Daniel van Vugt: Approve
- Cemil Azizoglu (community): Approve
- Alan Griffiths: Approve
-
Diff: 960 lines (+174/-210)29 files modifiedinclude/platform/mir/graphics/display_buffer.h (+9/-20)
include/renderer/mir/renderer/renderer.h (+2/-2)
include/test/mir/test/doubles/null_display_buffer.h (+1/-2)
playground/demo-shell/demo_compositor.cpp (+1/-1)
src/include/platform/mir/graphics/transformation.h (+52/-0)
src/platforms/android/server/display_buffer.cpp (+8/-15)
src/platforms/android/server/display_buffer.h (+2/-2)
src/platforms/eglstream-kms/server/display.cpp (+3/-8)
src/platforms/mesa/server/kms/display_buffer.cpp (+9/-13)
src/platforms/mesa/server/kms/display_buffer.h (+2/-3)
src/platforms/mesa/server/x11/graphics/display_buffer.cpp (+6/-8)
src/platforms/mesa/server/x11/graphics/display_buffer.h (+2/-2)
src/renderers/gl/renderer.cpp (+3/-58)
src/renderers/gl/renderer.h (+1/-3)
src/server/compositor/default_display_buffer_compositor.cpp (+1/-1)
src/server/compositor/screencast_display_buffer.cpp (+6/-9)
src/server/compositor/screencast_display_buffer.h (+2/-4)
src/server/graphics/nested/display_buffer.cpp (+3/-12)
src/server/graphics/nested/display_buffer.h (+1/-2)
tests/include/mir/test/doubles/mock_display_buffer.h (+1/-2)
tests/include/mir/test/doubles/mock_renderer.h (+1/-1)
tests/include/mir/test/doubles/stub_renderer.h (+1/-1)
tests/unit-tests/compositor/test_default_display_buffer_compositor.cpp (+21/-26)
tests/unit-tests/compositor/test_screencast_display_buffer.cpp (+3/-1)
tests/unit-tests/platforms/android/server/test_display.cpp (+11/-4)
tests/unit-tests/platforms/android/server/test_display_buffer.cpp (+14/-6)
tests/unit-tests/platforms/android/server/test_display_group.cpp (+1/-2)
tests/unit-tests/platforms/mesa/kms/test_display.cpp (+3/-1)
tests/unit-tests/platforms/mesa/kms/test_display_buffer.cpp (+4/-1)
lp://staging/~vanvugt/mir/simplify-hw-cursor-construction
- Mir CI Bot: Approve (continuous-integration)
- Daniel van Vugt: Approve
- Chris Halse Rogers: Approve
-
Diff: 775 lines (+119/-98)29 files modifieddebian/control (+6/-8)
debian/mir-platform-graphics-android13.install (+1/-1)
debian/mir-platform-graphics-mesa-kms13.install (+1/-1)
debian/mir-platform-graphics-mesa-x13.install (+1/-1)
include/platform/mir/graphics/display.h (+1/-2)
include/test/mir/test/doubles/null_display.h (+1/-1)
src/platforms/CMakeLists.txt (+2/-2)
src/platforms/android/server/display.cpp (+1/-1)
src/platforms/android/server/display.h (+1/-1)
src/platforms/eglstream-kms/server/display.cpp (+1/-2)
src/platforms/eglstream-kms/server/display.h (+1/-1)
src/platforms/mesa/server/kms/cursor.cpp (+14/-11)
src/platforms/mesa/server/kms/cursor.h (+2/-2)
src/platforms/mesa/server/kms/display.cpp (+2/-3)
src/platforms/mesa/server/kms/display.h (+1/-1)
src/platforms/mesa/server/kms/kms_output.h (+2/-2)
src/platforms/mesa/server/kms/real_kms_output.cpp (+11/-5)
src/platforms/mesa/server/kms/real_kms_output.h (+2/-2)
src/platforms/mesa/server/x11/graphics/display.cpp (+1/-1)
src/platforms/mesa/server/x11/graphics/display.h (+1/-1)
src/server/graphics/default_configuration.cpp (+17/-17)
src/server/graphics/nested/cursor.cpp (+0/-1)
src/server/graphics/nested/display.cpp (+2/-2)
src/server/graphics/nested/display.h (+1/-1)
tests/include/mir/test/doubles/mock_display.h (+1/-1)
tests/mir_test_framework/stubbed_graphics_platform.cpp (+2/-2)
tests/unit-tests/platforms/mesa/kms/mock_kms_output.h (+2/-2)
tests/unit-tests/platforms/mesa/kms/test_cursor.cpp (+38/-22)
tests/unit-tests/platforms/nested/test_nested_cursor.cpp (+3/-1)
lp://staging/~vanvugt/mir/black-bars
- Brandon Schaefer (community): Approve
- Mir CI Bot: Approve (continuous-integration)
-
Diff: 157 lines (+132/-0)2 files modifiedsrc/renderers/gl/renderer.cpp (+31/-0)
tests/unit-tests/renderers/gl/test_gl_renderer.cpp (+101/-0)
lp://staging/~vanvugt/mir/set-logical-size
- Mir CI Bot: Approve (continuous-integration)
- Alan Griffiths: Approve
-
Diff: 749 lines (+273/-7)23 files modifiedinclude/client/mir_toolkit/mir_display_configuration.h (+23/-0)
include/platform/mir/graphics/display_configuration.h (+4/-0)
src/client/display_configuration_api.cpp (+20/-0)
src/client/symbols.map (+2/-0)
src/platform/graphics/display_configuration.cpp (+29/-3)
src/platforms/mesa/server/kms/real_kms_display_configuration.cpp (+1/-0)
src/platforms/mesa/server/x11/graphics/display_configuration.cpp (+1/-0)
src/protobuf/mir_protobuf.proto (+7/-0)
src/server/frontend/protobuf_buffer_packer.cpp (+1/-0)
src/server/frontend/session_mediator.cpp (+14/-0)
src/server/graphics/nested/nested_display_configuration.cpp (+9/-1)
src/server/graphics/offscreen/display_configuration.cpp (+1/-0)
src/utils/out.c (+19/-0)
tests/acceptance-tests/test_latency.cpp (+1/-0)
tests/acceptance-tests/test_new_display_configuration.cpp (+57/-0)
tests/mir_test/display_config_matchers.cpp (+27/-2)
tests/mir_test_doubles/stub_display_configuration.cpp (+4/-0)
tests/unit-tests/graphics/test_default_display_configuration_policy.cpp (+4/-1)
tests/unit-tests/graphics/test_display_configuration.cpp (+28/-0)
tests/unit-tests/graphics/test_overlapping_output_grouping.cpp (+1/-0)
tests/unit-tests/platforms/mesa/kms/test_cursor.cpp (+3/-0)
tests/unit-tests/platforms/mesa/kms/test_display_configuration.cpp (+9/-0)
tests/unit-tests/platforms/nested/mir_display_configuration_builder.cpp (+8/-0)
lp://staging/~vanvugt/mir/get-logical-size
- Mir CI Bot: Approve (continuous-integration)
- Daniel van Vugt: Approve
- Brandon Schaefer (community): Approve
- Andreas Pokorny (community): Approve
-
Diff: 162 lines (+67/-14)7 files modifiedinclude/client/mir_toolkit/mir_display_configuration.h (+22/-0)
src/client/display_configuration_api.cpp (+10/-0)
src/client/symbols.map (+2/-0)
src/protobuf/mir_protobuf.proto (+2/-0)
src/server/frontend/protobuf_buffer_packer.cpp (+4/-0)
src/utils/out.c (+3/-14)
tests/acceptance-tests/test_new_display_configuration.cpp (+24/-0)
lp://staging/~vanvugt/mir/fix-1672269
- Mir CI Bot: Approve (continuous-integration)
- Alan Griffiths: Approve
- Alexandros Frantzis (community): Approve
-
Diff: 111 lines (+65/-1)3 files modifiedsrc/renderers/gl/renderer.cpp (+12/-1)
src/renderers/gl/renderer.h (+2/-0)
tests/unit-tests/renderers/gl/test_gl_renderer.cpp (+51/-0)
lp://staging/~vanvugt/mir/more-mesa-displaybuffer-transform
- Alberto Aguirre (community): Approve
- Alexandros Frantzis (community): Abstain
- Mir CI Bot: Approve (continuous-integration)
-
Diff: 354 lines (+47/-53)4 files modifiedsrc/platforms/mesa/server/kms/display.cpp (+15/-8)
src/platforms/mesa/server/kms/display_buffer.cpp (+7/-20)
src/platforms/mesa/server/kms/display_buffer.h (+3/-3)
tests/unit-tests/platforms/mesa/kms/test_display_buffer.cpp (+22/-22)
lp://staging/~vanvugt/mir/generalise-X-DisplayBuffer-transform
- Alexandros Frantzis (community): Approve
- Mir CI Bot: Approve (continuous-integration)
-
Diff: 136 lines (+21/-25)3 files modifiedsrc/platforms/mesa/server/x11/graphics/display.cpp (+5/-2)
src/platforms/mesa/server/x11/graphics/display_buffer.cpp (+12/-18)
src/platforms/mesa/server/x11/graphics/display_buffer.h (+4/-5)
lp://staging/~vanvugt/mir/transform-eglstream-kms-DisplayBuffer
- Chris Halse Rogers: Approve
- Kevin DuBois (community): Approve
- Mir CI Bot: Approve (continuous-integration)
-
Diff: 38 lines (+5/-2)1 file modifiedsrc/platforms/eglstream-kms/server/display.cpp (+5/-2)
lp://staging/~vanvugt/mir/generalise-android-DisplayBuffer-transform
- Kevin DuBois (community): Approve
- Mir CI Bot: Approve (continuous-integration)
-
Diff: 294 lines (+36/-33)8 files modifiedsrc/platforms/android/server/configurable_display_buffer.h (+1/-1)
src/platforms/android/server/display.cpp (+6/-3)
src/platforms/android/server/display_buffer.cpp (+6/-6)
src/platforms/android/server/display_buffer.h (+2/-3)
src/platforms/android/server/display_group.cpp (+2/-2)
src/platforms/android/server/display_group.h (+2/-1)
tests/unit-tests/platforms/android/server/test_display_buffer.cpp (+16/-16)
tests/unit-tests/platforms/android/server/test_display_group.cpp (+1/-1)
lp://staging/~vanvugt/mir/simplify-android-DisplayBuffer-view-area
- Mir CI Bot: Approve (continuous-integration)
- Alan Griffiths: Approve
-
Diff: 385 lines (+54/-56)9 files modifiedsrc/platforms/android/server/configurable_display_buffer.h (+1/-1)
src/platforms/android/server/display.cpp (+3/-9)
src/platforms/android/server/display.h (+0/-1)
src/platforms/android/server/display_buffer.cpp (+8/-16)
src/platforms/android/server/display_buffer.h (+3/-3)
src/platforms/android/server/display_group.cpp (+2/-2)
src/platforms/android/server/display_group.h (+1/-1)
tests/unit-tests/platforms/android/server/test_display_buffer.cpp (+35/-22)
tests/unit-tests/platforms/android/server/test_display_group.cpp (+1/-1)
lp://staging/~vanvugt/mir/output-transformation
- Alberto Aguirre (community): Approve
- Mir CI Bot: Approve (continuous-integration)
-
Diff: 160 lines (+36/-13)7 files modifiedinclude/platform/mir/graphics/display_configuration.h (+12/-0)
src/platform/graphics/display_configuration.cpp (+6/-0)
src/platform/graphics/overlapping_output_grouping.cpp (+2/-2)
src/platform/symbols.map (+7/-0)
src/platforms/eglstream-kms/server/display.cpp (+1/-1)
src/platforms/mesa/server/kms/display.cpp (+5/-9)
src/platforms/mesa/server/x11/graphics/display.cpp (+3/-1)
summary: |
- Mirror mode desired + Mirror/clone mode desired |
Changed in mir: | |
assignee: | nobody → Daniel van Vugt (vanvugt) |
Changed in mir: | |
milestone: | none → 1.0.0 |
Changed in mir: | |
status: | Triaged → In Progress |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | In Progress → Fix Committed |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | In Progress → Fix Committed |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | In Progress → Fix Committed |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
milestone: | 0.27.0 → 0.28.0 |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | In Progress → Fix Committed |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | In Progress → Fix Committed |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | In Progress → Fix Committed |
Changed in mir: | |
status: | Fix Committed → In Progress |
Changed in mir: | |
status: | In Progress → Fix Committed |
Changed in mir: | |
milestone: | 0.28.0 → 0.27.0 |
Changed in mir: | |
milestone: | 0.28.0 → 0.27.0 |
Changed in mir: | |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
A couple of things:
(1) The title suggests Mir doesn't have a clone mode, but it does and has done for years.
(2) The suggested solution of scaling is probably significantly more work (and possibly less desirable) than another solution I was thinking about...
We could simply solve the clipping bug on displays of lower resolution by panning that display to follow the hardware cursor when it touches the edge of the screen. That's how Xorg has handled it traditionally and it's rather nice. Only problem is the prerequisite to that is for Unity8 to start using USC's hardware cursor. Panning has the extra advantage of us being able to do it without having to GL re-composite the smaller display (hence I figured that will be more work).