Mir

Merge lp:~alan-griffiths/mir/a-surface-for-each-output into lp:~mir-team/mir/trunk

Proposed by Alan Griffiths
Status: Merged
Approved by: Alan Griffiths
Approved revision: no longer in the source branch.
Merged at revision: 992
Proposed branch: lp:~alan-griffiths/mir/a-surface-for-each-output
Merge into: lp:~mir-team/mir/trunk
Prerequisite: lp:~afrantzis/mir/place-surface-in-output
Diff against target: 87 lines (+16/-11)
2 files modified
src/server/graphics/nested/nested_display.cpp (+13/-8)
src/server/graphics/nested/nested_display.h (+3/-3)
To merge this branch: bzr merge lp:~alan-griffiths/mir/a-surface-for-each-output
Reviewer Review Type Date Requested Status
Alexandros Frantzis (community) Approve
Eleni Maria Stea (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+181095@code.launchpad.net

Commit message

graphics: hard-wire nested Mir to create an output for every host output

Description of the change

graphics: hard-wire nested Mir to create an output for every host output

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Eleni Maria Stea (hikiko) wrote :

It looks good :)

review: Approve
Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

Looks good as an intermediate step.

Note that for proper mirrored mode support we will need to detect overlapping outputs and only use a single surface for them. The OverlappingOutputGrouping utility class used by the GBM backend for a similar purpose could help with this.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/server/graphics/nested/nested_display.cpp'
2--- src/server/graphics/nested/nested_display.cpp 2013-08-20 16:34:28 +0000
3+++ src/server/graphics/nested/nested_display.cpp 2013-08-20 16:34:28 +0000
4@@ -22,7 +22,6 @@
5
6 #include "mir/geometry/rectangle.h"
7
8-#include <cstring>
9 #include <boost/throw_exception.hpp>
10 #include <stdexcept>
11
12@@ -54,21 +53,25 @@
13 MirDisplayConfigHandle operator=(MirDisplayConfigHandle const&) = delete;
14 };
15
16-std::shared_ptr<mgn::detail::NestedOutput> make_one_output(MirConnection* connection)
17+auto configure_outputs(MirConnection* connection)
18+-> std::unordered_map<uint32_t, std::shared_ptr<mgn::detail::NestedOutput>>
19 {
20 MirDisplayConfigHandle display_config{connection};
21
22- // TODO we may have multiple displays which implies multiple surfaces
23- // TODO as a POC just use the first active display
24+ std::unordered_map<uint32_t, std::shared_ptr<mgn::detail::NestedOutput>> result;
25+
26 for (decltype(display_config->num_outputs) i = 0; i != display_config->num_outputs; ++i)
27 {
28 auto const egl_display_info = display_config->outputs+i;
29
30 if (egl_display_info->used)
31- return std::make_shared<mgn::detail::NestedOutput>(connection, egl_display_info);
32+ {
33+ result[egl_display_info->output_id] =
34+ std::make_shared<mgn::detail::NestedOutput>(connection, egl_display_info);
35+ }
36 }
37
38- BOOST_THROW_EXCEPTION(std::runtime_error("Nested Mir needs at least one display"));
39+ return result;
40 }
41
42 EGLint const egl_attribs[] = {
43@@ -100,7 +103,7 @@
44 int(egl_display_mode->vertical_resolution),
45 egl_display_format,
46 mir_buffer_usage_hardware,
47- mir_display_output_id_invalid
48+ egl_display_info->output_id
49 };
50
51 mir_surface = mir_connection_create_surface_sync(connection, &request_params);
52@@ -184,8 +187,10 @@
53
54 mgn::NestedDisplay::NestedDisplay(MirConnection* connection, std::shared_ptr<mg::DisplayReport> const& display_report) :
55 display_report{display_report},
56- one_output{make_one_output(connection)}
57+ outputs{configure_outputs(connection)}
58 {
59+ if (outputs.empty())
60+ BOOST_THROW_EXCEPTION(std::runtime_error("Nested Mir needs at least one output for display"));
61 }
62
63 mgn::NestedDisplay::~NestedDisplay() noexcept
64
65=== modified file 'src/server/graphics/nested/nested_display.h'
66--- src/server/graphics/nested/nested_display.h 2013-08-19 16:58:41 +0000
67+++ src/server/graphics/nested/nested_display.h 2013-08-20 16:34:28 +0000
68@@ -26,6 +26,8 @@
69
70 #include <EGL/egl.h>
71
72+#include <unordered_map>
73+
74 namespace mir
75 {
76 namespace geometry
77@@ -125,9 +127,7 @@
78
79 private:
80 std::shared_ptr<DisplayReport> const display_report;
81-
82- // TODO support multiple outputs
83- std::shared_ptr<detail::NestedOutput> const one_output;
84+ std::unordered_map<uint32_t, std::shared_ptr<detail::NestedOutput>> outputs;
85 };
86
87 }

Subscribers

People subscribed via source and target branches