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
=== modified file 'src/server/graphics/nested/nested_display.cpp'
--- src/server/graphics/nested/nested_display.cpp 2013-08-20 16:34:28 +0000
+++ src/server/graphics/nested/nested_display.cpp 2013-08-20 16:34:28 +0000
@@ -22,7 +22,6 @@
2222
23#include "mir/geometry/rectangle.h"23#include "mir/geometry/rectangle.h"
2424
25#include <cstring>
26#include <boost/throw_exception.hpp>25#include <boost/throw_exception.hpp>
27#include <stdexcept>26#include <stdexcept>
2827
@@ -54,21 +53,25 @@
54 MirDisplayConfigHandle operator=(MirDisplayConfigHandle const&) = delete;53 MirDisplayConfigHandle operator=(MirDisplayConfigHandle const&) = delete;
55};54};
5655
57std::shared_ptr<mgn::detail::NestedOutput> make_one_output(MirConnection* connection)56auto configure_outputs(MirConnection* connection)
57-> std::unordered_map<uint32_t, std::shared_ptr<mgn::detail::NestedOutput>>
58{58{
59 MirDisplayConfigHandle display_config{connection};59 MirDisplayConfigHandle display_config{connection};
6060
61 // TODO we may have multiple displays which implies multiple surfaces61 std::unordered_map<uint32_t, std::shared_ptr<mgn::detail::NestedOutput>> result;
62 // TODO as a POC just use the first active display62
63 for (decltype(display_config->num_outputs) i = 0; i != display_config->num_outputs; ++i)63 for (decltype(display_config->num_outputs) i = 0; i != display_config->num_outputs; ++i)
64 {64 {
65 auto const egl_display_info = display_config->outputs+i;65 auto const egl_display_info = display_config->outputs+i;
6666
67 if (egl_display_info->used)67 if (egl_display_info->used)
68 return std::make_shared<mgn::detail::NestedOutput>(connection, egl_display_info);68 {
69 result[egl_display_info->output_id] =
70 std::make_shared<mgn::detail::NestedOutput>(connection, egl_display_info);
71 }
69 }72 }
7073
71 BOOST_THROW_EXCEPTION(std::runtime_error("Nested Mir needs at least one display"));74 return result;
72}75}
7376
74EGLint const egl_attribs[] = {77EGLint const egl_attribs[] = {
@@ -100,7 +103,7 @@
100 int(egl_display_mode->vertical_resolution),103 int(egl_display_mode->vertical_resolution),
101 egl_display_format,104 egl_display_format,
102 mir_buffer_usage_hardware,105 mir_buffer_usage_hardware,
103 mir_display_output_id_invalid106 egl_display_info->output_id
104 };107 };
105108
106 mir_surface = mir_connection_create_surface_sync(connection, &request_params);109 mir_surface = mir_connection_create_surface_sync(connection, &request_params);
@@ -184,8 +187,10 @@
184187
185mgn::NestedDisplay::NestedDisplay(MirConnection* connection, std::shared_ptr<mg::DisplayReport> const& display_report) :188mgn::NestedDisplay::NestedDisplay(MirConnection* connection, std::shared_ptr<mg::DisplayReport> const& display_report) :
186 display_report{display_report},189 display_report{display_report},
187 one_output{make_one_output(connection)}190 outputs{configure_outputs(connection)}
188{191{
192 if (outputs.empty())
193 BOOST_THROW_EXCEPTION(std::runtime_error("Nested Mir needs at least one output for display"));
189}194}
190195
191mgn::NestedDisplay::~NestedDisplay() noexcept196mgn::NestedDisplay::~NestedDisplay() noexcept
192197
=== modified file 'src/server/graphics/nested/nested_display.h'
--- src/server/graphics/nested/nested_display.h 2013-08-19 16:58:41 +0000
+++ src/server/graphics/nested/nested_display.h 2013-08-20 16:34:28 +0000
@@ -26,6 +26,8 @@
2626
27#include <EGL/egl.h>27#include <EGL/egl.h>
2828
29#include <unordered_map>
30
29namespace mir31namespace mir
30{32{
31namespace geometry33namespace geometry
@@ -125,9 +127,7 @@
125127
126private:128private:
127 std::shared_ptr<DisplayReport> const display_report;129 std::shared_ptr<DisplayReport> const display_report;
128130 std::unordered_map<uint32_t, std::shared_ptr<detail::NestedOutput>> outputs;
129 // TODO support multiple outputs
130 std::shared_ptr<detail::NestedOutput> const one_output;
131};131};
132132
133}133}

Subscribers

People subscribed via source and target branches