Mir

Merge lp:~alan-griffiths/mir/split-mesa into lp:mir

Proposed by Alan Griffiths
Status: Merged
Approved by: Alan Griffiths
Approved revision: no longer in the source branch.
Merged at revision: 4169
Proposed branch: lp:~alan-griffiths/mir/split-mesa
Merge into: lp:mir
Diff against target: 738 lines (+342/-61)
21 files modified
include/platform/mir/graphics/platform_authentication.h (+12/-0)
include/renderers/gl/mir/renderer/gl/egl_platform.h (+2/-2)
src/platforms/mesa/server/CMakeLists.txt (+2/-0)
src/platforms/mesa/server/drm_native_platform.cpp (+9/-0)
src/platforms/mesa/server/drm_native_platform.h (+12/-2)
src/platforms/mesa/server/gbm_platform.cpp (+88/-0)
src/platforms/mesa/server/gbm_platform.h (+65/-0)
src/platforms/mesa/server/kms/CMakeLists.txt (+0/-1)
src/platforms/mesa/server/kms/guest_platform.cpp (+43/-33)
src/platforms/mesa/server/kms/guest_platform.h (+10/-2)
src/platforms/mesa/server/kms/platform.cpp (+4/-3)
src/platforms/mesa/server/kms/platform.h (+2/-2)
src/platforms/mesa/server/kms/platform_symbols.cpp (+38/-0)
src/platforms/mesa/server/nested_authentication.cpp (+0/-1)
src/platforms/mesa/server/x11/graphics/graphics.cpp (+45/-5)
src/platforms/mesa/server/x11/graphics/guest_platform.cpp (+3/-3)
src/platforms/mesa/server/x11/graphics/guest_platform.h (+2/-2)
src/platforms/mesa/server/x11/graphics/platform.cpp (+2/-2)
src/platforms/mesa/server/x11/graphics/platform.h (+1/-1)
src/server/graphics/nested/platform.h (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_nested_authentication.cpp (+1/-1)
To merge this branch: bzr merge lp:~alan-griffiths/mir/split-mesa
Reviewer Review Type Date Requested Status
Mir CI Bot continuous-integration Approve
Andreas Pokorny (community) Approve
Daniel van Vugt Abstain
Cemil Azizoglu Pending
Chris Halse Rogers Pending
Review via email: mp+323901@code.launchpad.net

This proposal supersedes a proposal from 2017-03-27.

Commit message

prepare the mesa-kms and mesa-x11 platforms for splitting mg::Platform into rendering and display components. both of these platforms share the same GBMPlatform for buffer allocation.

Description of the change

prepare the mesa-kms and mesa-x11 platforms for splitting mg::Platform into rendering and display components. both of these platforms share the same GBMPlatform for buffer allocation.

To post a comment you must log in.
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:4096
https://mir-jenkins.ubuntu.com/job/mir-ci/3252/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4379
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4466
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4456
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4456
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4456
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4411
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4411/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4411
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4411/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4411
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4411/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4411
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4411/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4411
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4411/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4411
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4411/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3252/rebuild

review: Approve (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:4097
https://mir-jenkins.ubuntu.com/job/mir-ci/3257/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4385/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4474
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4464
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4464
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4464
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4417
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4417/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4417
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4417/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4417
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4417/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4417/console
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4417/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4417
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4417/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4417
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4417/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3257/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Chris Halse Rogers (raof) wrote : Posted in a previous version of this proposal

Hrm.

+mir::UniqueModulePtr<mir::graphics::RenderingPlatform> create_rendering_platform(
+ std::shared_ptr<mir::options::Option> const& options,
+ std::shared_ptr<mir::graphics::PlatformAuthentication> const& platform_authentication)

Where did this create_rendering_platform() signature come from? I thought we were going to dynamic_cast<> the DisplayPlatform?

Is there an urgent need for this MP to land, or can we fix the base API first?

(There are other issues, like the entirely unnecessary auth_fd(), but that's pre-existing)

review: Needs Information
Revision history for this message
Kevin DuBois (kdub) wrote : Posted in a previous version of this proposal

create_rendering_platform needs an update so mg::PlatformAuthentication is not used. This landed before the dynamic_cast<> plan was adopted. This will be updated in capstone branch, when I change src/server/graphics after changing all the src/platforms.

Revision history for this message
Kevin DuBois (kdub) wrote : Posted in a previous version of this proposal

> Is there an urgent need for this MP to land, or can we fix the base API first?
>
> (There are other issues, like the entirely unnecessary auth_fd(), but that's
> pre-existing)

Sure, all for additional cleanups. I'm trying to avoid scope creep while splitting out the display and rendering bits at the moment. So I'd rather that further cleanups come later (and be based on the new split system)

Revision history for this message
Cemil Azizoglu (cemil-azizoglu) wrote : Posted in a previous version of this proposal

ok by me

review: Approve
Revision history for this message
Kevin DuBois (kdub) wrote : Posted in a previous version of this proposal

^intermittent testflinger failure

Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:4098
https://mir-jenkins.ubuntu.com/job/mir-ci/3282/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4431
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4523
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4513
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4513
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4513
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4463
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4463/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4463
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4463/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4463
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4463/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4463
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4463/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4463
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4463/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4463
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4463/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3282/rebuild

review: Approve (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:4099
https://mir-jenkins.ubuntu.com/job/mir-ci/3298/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4460
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4575
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4565
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4565
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4565
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4565
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4492
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4492/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4492
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4492/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4492
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4492/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4492
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4492/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4492
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4492/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4492
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4492/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3298/rebuild

review: Approve (continuous-integration)
Revision history for this message
Chris Halse Rogers (raof) wrote : Posted in a previous version of this proposal

OK, on the assumption that the dynamic_cast<> cleanup is coming in a later branch.

review: Approve
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Autolanding.
More details in the following jenkins job:
https://mir-jenkins.ubuntu.com/job/mir-autolanding/1265/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4475/console
    None: https://mir-jenkins.ubuntu.com/job/generic-land-mp/1344/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4590
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4579
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4579
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4579
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4579
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4506
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4506/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4506
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4506/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4506/console
    ABORTED: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4506/console
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4506/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4506
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4506/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4506
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4506/artifact/output/*zip*/output.zip

review: Needs Fixing (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:4099
https://mir-jenkins.ubuntu.com/job/mir-ci/3348/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4522
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4640
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4629
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4629
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4629
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4629
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4553
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4553/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4553
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4553/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4553
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4553/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4553
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4553/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4553
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4553/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4553
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4553/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3348/rebuild

review: Approve (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Autolanding.
More details in the following jenkins job:
https://mir-jenkins.ubuntu.com/job/mir-autolanding/1276/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4526/console
    None: https://mir-jenkins.ubuntu.com/job/generic-land-mp/1356/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4644
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4633
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4633
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4633
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4633
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4557
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4557/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4557
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4557/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4557/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4557
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4557/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4557
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4557/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4557
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4557/artifact/output/*zip*/output.zip

review: Needs Fixing (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:4099
https://mir-jenkins.ubuntu.com/job/mir-ci/3352/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4529
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4647
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4636
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4636
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4636
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4636
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4560
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4560/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4560
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4560/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4560
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4560/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4560
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4560/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4560
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4560/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4560
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4560/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3352/rebuild

review: Approve (continuous-integration)
Revision history for this message
Alberto Aguirre (albaguirre) wrote : Posted in a previous version of this proposal

Looks like with LTO enabled:

03:40:09 ../../../../../../../src/platforms/mesa/server/gbm_platform.h:52:26: error: ���egl_native_display��� violates the C++ One Definition Rule [-Werror=odr]
03:40:09 ../../../../../src/platforms/mesa/server/gbm_platform.cpp:85:22: note: ���egl_native_display��� was previously declared here
03:40:09 lto1: all warnings being treated as errors

Looks like an issue with different definitions of EGLNativeDisplayType ?

Revision history for this message
Daniel van Vugt (vanvugt) wrote : Posted in a previous version of this proposal

Yeah that's an old problem (with EGL itself). Last time it happened the answer was to just ensure all our code used void* for EGLNative*

Revision history for this message
Mir CI Bot (mir-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:4100
https://mir-jenkins.ubuntu.com/job/mir-ci/3354/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4532
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4650
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4639
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4639
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4639
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4639
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4563
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4563/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4563
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4563/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4563
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4563/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4563
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4563/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4563
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4563/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4563
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4563/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3354/rebuild

review: Approve (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote : Posted in a previous version of this proposal

Oh, actually, further to Alberto's comments, that does need fixing:

+ EGLNativeDisplayType egl_native_display() const override;

because the definition of EGLNativeDisplayType can change profoundly depending on where it is included and what the assumed EGL platform is (decided a pre-processing time). Hence it fails the one-definition-rule and will occasionally cause build failures.

A good compromise I think is to write code that assumes EGLNativeDisplayType is always going to be compatible with a pointer. So please change EGLNativeDisplayType to use MirEGLNativeDisplayType (which is currently defined in mir_toolkit/client_types.h). Although it's better if we never need to return it from a function at all...

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

PASSED: Continuous integration, rev:4167
https://mir-jenkins.ubuntu.com/job/mir-ci/3393/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4611
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4740
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4729
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4729
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4643
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4643/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4643
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4643/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4643
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4643/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4643
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4643/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4643
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4643/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3393/rebuild

review: Approve (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Thanks for fixing EGLNativeDisplayType, but I just realized my suggestion was partially wrong. MirEGLNativeDisplayType is specifically for Mir clients, whereas in this proposal it's for the server graphics platform.

Each graphics platform is apparently free to typedef EGLNativeDisplayType to whatever they like (?). But that's not ABI-friendly (or API friendly, hence ODR).

EGL itself doesn't set a good example, requiring it to be passed by value regardless of the actual typedef:
https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglGetDisplay.xhtml

Still the right answer judging by /usr/include/EGL/eglplatform.h would be to assume the typedef is pointer-compatible. Only 'MirEGLNativeDisplayType' is the wrong name to give it...

We need a new typedef, similar to what I did in mock_egl.h to solve the same ODR problem there:

    typedef void* AnyNativeType;
    MOCK_METHOD1(eglGetDisplay, EGLDisplay(AnyNativeType));

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

Try something like

  typedef void* MirServerEGLNativeDisplayType;

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

Note there is a requirement that the definition of EGLNativeDisplayType can take an integer:

/usr/include/EGL/egl.h:#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)

So that's something at least :P

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> Note there is a requirement that the definition of EGLNativeDisplayType can
> take an integer:
>
> /usr/include/EGL/egl.h:#define EGL_DEFAULT_DISPLAY
> ((EGLNativeDisplayType)0)
>
> So that's something at least :P

LOL A C style cast doesn't impose many constraints.

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

FAILED: Continuous integration, rev:4168
https://mir-jenkins.ubuntu.com/job/mir-ci/3395/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4613/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4742
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4731
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4731
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4645
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4645/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4645
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4645/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4645
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4645/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4645
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4645/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4645/console

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3395/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

^ Seems unrelated. Logged as lp:1690358

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

PASSED: Continuous integration, rev:4168
https://mir-jenkins.ubuntu.com/job/mir-ci/3397/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4615
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4744
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4733
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4733
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4647
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4647/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4647
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4647/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4647
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4647/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4647
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4647/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4647
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4647/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3397/rebuild

review: Approve (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Ta. I am no longer concerned about this, but also have not reviewed it in detail.

review: Abstain
Revision history for this message
Andreas Pokorny (andreas-pokorny) wrote :

Yes straight forward - and I have no opinion on the EGL typedefs

review: Approve
Revision history for this message
Mir CI Bot (mir-ci-bot) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'include/platform/mir/graphics/platform_authentication.h'
--- include/platform/mir/graphics/platform_authentication.h 2017-04-28 03:49:54 +0000
+++ include/platform/mir/graphics/platform_authentication.h 2017-05-12 10:00:59 +0000
@@ -21,6 +21,7 @@
2121
22#include "mir/optional_value.h"22#include "mir/optional_value.h"
23#include "mir/fd.h"23#include "mir/fd.h"
24#include "mir/module_deleter.h"
24#include <memory>25#include <memory>
25#include <vector>26#include <vector>
2627
@@ -75,6 +76,17 @@
75 PlatformAuthentication& operator=(PlatformAuthentication const&) = delete;76 PlatformAuthentication& operator=(PlatformAuthentication const&) = delete;
76};77};
7778
79class PlatformAuthenticationFactory
80{
81public:
82 virtual ~PlatformAuthenticationFactory() = default;
83 virtual UniqueModulePtr<PlatformAuthentication> create_platform_authentication() = 0;
84protected:
85 PlatformAuthenticationFactory() = default;
86 PlatformAuthenticationFactory(PlatformAuthenticationFactory const&) = delete;
87 PlatformAuthenticationFactory& operator=(PlatformAuthenticationFactory const&) = delete;
88};
89
78}90}
79}91}
8092
8193
=== modified file 'include/renderers/gl/mir/renderer/gl/egl_platform.h'
--- include/renderers/gl/mir/renderer/gl/egl_platform.h 2017-03-15 11:22:17 +0000
+++ include/renderers/gl/mir/renderer/gl/egl_platform.h 2017-05-12 10:00:59 +0000
@@ -19,7 +19,7 @@
19#ifndef MIR_RENDERER_GL_EGL_PLATFORM_H_19#ifndef MIR_RENDERER_GL_EGL_PLATFORM_H_
20#define MIR_RENDERER_GL_EGL_PLATFORM_H_20#define MIR_RENDERER_GL_EGL_PLATFORM_H_
2121
22#include <EGL/egl.h>22typedef void* MirServerEGLNativeDisplayType;
2323
24namespace mir24namespace mir
25{25{
@@ -32,7 +32,7 @@
32{32{
33public:33public:
34 virtual ~EGLPlatform() = default;34 virtual ~EGLPlatform() = default;
35 virtual EGLNativeDisplayType egl_native_display() const = 0;35 virtual MirServerEGLNativeDisplayType egl_native_display() const = 0;
3636
37protected:37protected:
38 EGLPlatform() = default;38 EGLPlatform() = default;
3939
=== modified file 'src/platforms/mesa/server/CMakeLists.txt'
--- src/platforms/mesa/server/CMakeLists.txt 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/CMakeLists.txt 2017-05-12 10:00:59 +0000
@@ -19,6 +19,8 @@
19 gbm_buffer.cpp19 gbm_buffer.cpp
20 ipc_operations.cpp20 ipc_operations.cpp
21 software_buffer.cpp21 software_buffer.cpp
22 gbm_platform.cpp
23 nested_authentication.cpp
22 drm_native_platform.cpp24 drm_native_platform.cpp
23)25)
2426
2527
=== modified file 'src/platforms/mesa/server/drm_native_platform.cpp'
--- src/platforms/mesa/server/drm_native_platform.cpp 2017-03-23 17:18:29 +0000
+++ src/platforms/mesa/server/drm_native_platform.cpp 2017-05-12 10:00:59 +0000
@@ -77,3 +77,12 @@
77{77{
78 return {mir::Fd(IntOwnedFd{drm.fd})};78 return {mir::Fd(IntOwnedFd{drm.fd})};
79}79}
80
81mgm::DRMNativePlatformAuthFactory::DRMNativePlatformAuthFactory(helpers::DRMHelper& drm) : drm(drm)
82{
83}
84
85mir::UniqueModulePtr<mg::PlatformAuthentication> mgm::DRMNativePlatformAuthFactory::create_platform_authentication()
86{
87 return make_module_ptr<mgm::DRMNativePlatform>(drm);
88}
8089
=== modified file 'src/platforms/mesa/server/drm_native_platform.h'
--- src/platforms/mesa/server/drm_native_platform.h 2017-03-23 17:18:29 +0000
+++ src/platforms/mesa/server/drm_native_platform.h 2017-05-12 10:00:59 +0000
@@ -32,8 +32,18 @@
32{32{
33class DRMHelper;33class DRMHelper;
34}34}
35class DRMNativePlatform : public graphics::NativeDisplayPlatform,35
36 public graphics::PlatformAuthentication36class DRMNativePlatformAuthFactory : public graphics::NativeDisplayPlatform,
37 public graphics::PlatformAuthenticationFactory
38{
39public:
40 DRMNativePlatformAuthFactory(helpers::DRMHelper&);
41 UniqueModulePtr<PlatformAuthentication> create_platform_authentication() override;
42private:
43 helpers::DRMHelper& drm;
44};
45
46class DRMNativePlatform : public graphics::PlatformAuthentication
37{47{
38public:48public:
39 DRMNativePlatform(helpers::DRMHelper&);49 DRMNativePlatform(helpers::DRMHelper&);
4050
=== added file 'src/platforms/mesa/server/gbm_platform.cpp'
--- src/platforms/mesa/server/gbm_platform.cpp 1970-01-01 00:00:00 +0000
+++ src/platforms/mesa/server/gbm_platform.cpp 2017-05-12 10:00:59 +0000
@@ -0,0 +1,88 @@
1/*
2 * Copyright © 2017 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Kevin DuBois <kevin.dubois@canonical.com>
17 */
18
19#include "gbm_platform.h"
20#include "mir/graphics/platform_authentication.h"
21#include "buffer_allocator.h"
22#include "ipc_operations.h"
23#include "nested_authentication.h"
24#include <boost/throw_exception.hpp>
25
26namespace mg = mir::graphics;
27namespace mgm = mir::graphics::mesa;
28
29mgm::GBMPlatform::GBMPlatform(
30 BypassOption bypass_option,
31 BufferImportMethod import_method,
32 std::shared_ptr<mg::PlatformAuthentication> const& platform_authentication) :
33 bypass_option(bypass_option),
34 import_method(import_method),
35 platform_authentication(platform_authentication),
36 gbm{std::make_shared<mgm::helpers::GBMHelper>()},
37 auth{std::make_shared<mgm::NestedAuthentication>(platform_authentication)}
38{
39 auto master = platform_authentication->drm_fd();
40 auto auth = platform_authentication->auth_extension();
41 if (master.is_set())
42 {
43 gbm->setup(master.value());
44 }
45 else if (auth.is_set())
46 {
47 gbm->setup(auth.value()->auth_fd());
48 }
49 else
50 {
51 BOOST_THROW_EXCEPTION(std::logic_error("no authentication fd to make gbm buffers"));
52 }
53}
54
55mgm::GBMPlatform::GBMPlatform(
56 BypassOption bypass_option,
57 BufferImportMethod import_method,
58 std::shared_ptr<mir::udev::Context> const& udev,
59 std::shared_ptr<mgm::helpers::DRMHelper> const& drm) :
60 bypass_option(bypass_option),
61 import_method(import_method),
62 udev(udev),
63 drm(drm),
64 gbm{std::make_shared<mgm::helpers::GBMHelper>()},
65 auth{drm}
66{
67 gbm->setup(*drm);
68}
69
70mir::UniqueModulePtr<mg::GraphicBufferAllocator> mgm::GBMPlatform::create_buffer_allocator()
71{
72 return make_module_ptr<mgm::BufferAllocator>(gbm->device, bypass_option, import_method);
73}
74
75mir::UniqueModulePtr<mg::PlatformIpcOperations> mgm::GBMPlatform::make_ipc_operations() const
76{
77 return make_module_ptr<mg::mesa::IpcOperations>(auth);
78}
79
80mg::NativeRenderingPlatform* mgm::GBMPlatform::native_rendering_platform()
81{
82 return this;
83}
84
85MirServerEGLNativeDisplayType mgm::GBMPlatform::egl_native_display() const
86{
87 return gbm->device;
88}
089
=== added file 'src/platforms/mesa/server/gbm_platform.h'
--- src/platforms/mesa/server/gbm_platform.h 1970-01-01 00:00:00 +0000
+++ src/platforms/mesa/server/gbm_platform.h 2017-05-12 10:00:59 +0000
@@ -0,0 +1,65 @@
1/*
2 * Copyright © 2017 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Kevin DuBois <kevin.dubois@canonical.com>
17 */
18
19#ifndef MIR_GRAPHICS_MESA_GBM_PLATFORM_H_
20#define MIR_GRAPHICS_MESA_GBM_PLATFORM_H_
21
22#include "mir/graphics/platform.h"
23#include "display_helpers.h"
24#include "platform_common.h"
25#include "mir/renderer/gl/egl_platform.h"
26#include "buffer_allocator.h"
27
28namespace mir
29{
30namespace graphics
31{
32namespace mesa
33{
34class GBMPlatform : public graphics::RenderingPlatform,
35 public graphics::NativeRenderingPlatform,
36 public renderer::gl::EGLPlatform
37{
38public:
39 GBMPlatform(
40 BypassOption option,
41 BufferImportMethod import_method,
42 std::shared_ptr<PlatformAuthentication> const& platform_authentication);
43 GBMPlatform(
44 BypassOption bypass_option,
45 BufferImportMethod import_method,
46 std::shared_ptr<mir::udev::Context> const& udev,
47 std::shared_ptr<helpers::DRMHelper> const& drm);
48
49 UniqueModulePtr<GraphicBufferAllocator> create_buffer_allocator() override;
50 UniqueModulePtr<PlatformIpcOperations> make_ipc_operations() const override;
51 NativeRenderingPlatform* native_rendering_platform() override;
52 MirServerEGLNativeDisplayType egl_native_display() const override;
53private:
54 BypassOption const bypass_option;
55 BufferImportMethod const import_method;
56 std::shared_ptr<graphics::PlatformAuthentication> const platform_authentication;
57 std::shared_ptr<mir::udev::Context> udev;
58 std::shared_ptr<graphics::mesa::helpers::DRMHelper> drm;
59 std::shared_ptr<helpers::GBMHelper> const gbm;
60 std::shared_ptr<DRMAuthentication> const auth;
61};
62}
63}
64}
65#endif /* MIR_GRAPHICS_MESA_GBM_PLATFORM_H_ */
066
=== modified file 'src/platforms/mesa/server/kms/CMakeLists.txt'
--- src/platforms/mesa/server/kms/CMakeLists.txt 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/kms/CMakeLists.txt 2017-05-12 10:00:59 +0000
@@ -33,7 +33,6 @@
33 page_flipper.h33 page_flipper.h
34 kms_page_flipper.cpp34 kms_page_flipper.cpp
35 linux_virtual_terminal.cpp35 linux_virtual_terminal.cpp
36 nested_authentication.cpp
37 platform.cpp36 platform.cpp
38 kms_display_configuration.h37 kms_display_configuration.h
39 real_kms_display_configuration.cpp38 real_kms_display_configuration.cpp
4039
=== modified file 'src/platforms/mesa/server/kms/guest_platform.cpp'
--- src/platforms/mesa/server/kms/guest_platform.cpp 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/kms/guest_platform.cpp 2017-05-12 10:00:59 +0000
@@ -53,42 +53,52 @@
53 else53 else
54 BOOST_THROW_EXCEPTION(std::runtime_error("Nested Mir failed to set the gbm device."));54 BOOST_THROW_EXCEPTION(std::runtime_error("Nested Mir failed to set the gbm device."));
55}55}
5656}
57struct AuthenticationWrapper : mg::NativeDisplayPlatform,57
58 mg::PlatformAuthentication58mgm::GuestPlatform::NestedAuthFactory::NestedAuthFactory(
59{59 std::shared_ptr<mg::PlatformAuthentication> const& auth) :
60 AuthenticationWrapper(std::shared_ptr<PlatformAuthentication> const& auth) :60 auth(auth)
61 auth(auth)61{
62 {62}
63 }63
6464mir::UniqueModulePtr<mg::PlatformAuthentication>
65 mir::optional_value<std::shared_ptr<mg::MesaAuthExtension>> auth_extension() override65mgm::GuestPlatform::NestedAuthFactory::create_platform_authentication()
66 {66{
67 return auth->auth_extension();67 struct AuthenticationWrapper : mg::PlatformAuthentication
68 }68 {
6969 AuthenticationWrapper(std::shared_ptr<PlatformAuthentication> const& auth) :
70 mir::optional_value<std::shared_ptr<mg::SetGbmExtension>> set_gbm_extension() override70 auth(auth)
71 {71 {
72 return auth->set_gbm_extension();72 }
73 }73
7474 mir::optional_value<std::shared_ptr<mg::MesaAuthExtension>> auth_extension() override
75 mg::PlatformOperationMessage platform_operation(75 {
76 unsigned int op, mg::PlatformOperationMessage const& msg) override76 return auth->auth_extension();
77 {77 }
78 return auth->platform_operation(op, msg);78
79 }79 mir::optional_value<std::shared_ptr<mg::SetGbmExtension>> set_gbm_extension() override
80 mir::optional_value<mir::Fd> drm_fd() override80 {
81 {81 return auth->set_gbm_extension();
82 return auth->drm_fd();82 }
83 }83
84 std::shared_ptr<mg::PlatformAuthentication> const auth;84 mg::PlatformOperationMessage platform_operation(
85};85 unsigned int op, mg::PlatformOperationMessage const& msg) override
86 {
87 return auth->platform_operation(op, msg);
88 }
89 mir::optional_value<mir::Fd> drm_fd() override
90 {
91 return auth->drm_fd();
92 }
93 std::shared_ptr<mg::PlatformAuthentication> const auth;
94 };
95 return make_module_ptr<AuthenticationWrapper>(auth);
86}96}
8797
88mgm::GuestPlatform::GuestPlatform(98mgm::GuestPlatform::GuestPlatform(
89 std::shared_ptr<mg::PlatformAuthentication> const& platform_authentication) :99 std::shared_ptr<mg::PlatformAuthentication> const& platform_authentication) :
90 platform_authentication{platform_authentication},100 platform_authentication{platform_authentication},
91 auth(std::make_shared<AuthenticationWrapper>(platform_authentication))101 auth_factory{platform_authentication}
92{102{
93 auto ext = platform_authentication->auth_extension();103 auto ext = platform_authentication->auth_extension();
94 if (!ext.is_set())104 if (!ext.is_set())
@@ -117,7 +127,7 @@
117127
118mg::NativeDisplayPlatform* mgm::GuestPlatform::native_display_platform()128mg::NativeDisplayPlatform* mgm::GuestPlatform::native_display_platform()
119{129{
120 return auth.get();130 return &auth_factory;
121}131}
122132
123mg::NativeRenderingPlatform* mgm::GuestPlatform::native_rendering_platform()133mg::NativeRenderingPlatform* mgm::GuestPlatform::native_rendering_platform()
@@ -125,7 +135,7 @@
125 return this;135 return this;
126}136}
127137
128EGLNativeDisplayType mgm::GuestPlatform::egl_native_display() const138MirEGLNativeDisplayType mgm::GuestPlatform::egl_native_display() const
129{139{
130 return gbm.device;140 return gbm.device;
131}141}
132142
=== modified file 'src/platforms/mesa/server/kms/guest_platform.h'
--- src/platforms/mesa/server/kms/guest_platform.h 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/kms/guest_platform.h 2017-05-12 10:00:59 +0000
@@ -22,6 +22,7 @@
22#define MIR_GRAPHICS_MESA_GUEST_PLATFORM_H_22#define MIR_GRAPHICS_MESA_GUEST_PLATFORM_H_
2323
24#include "mir/graphics/platform.h"24#include "mir/graphics/platform.h"
25#include "mir/graphics/platform_authentication.h"
25#include "mir/graphics/platform_ipc_package.h"26#include "mir/graphics/platform_ipc_package.h"
26#include "mir/renderer/gl/egl_platform.h"27#include "mir/renderer/gl/egl_platform.h"
27#include "display_helpers.h"28#include "display_helpers.h"
@@ -51,11 +52,18 @@
51 std::vector<ExtensionDescription> extensions() const override;52 std::vector<ExtensionDescription> extensions() const override;
5253
53 NativeRenderingPlatform* native_rendering_platform() override;54 NativeRenderingPlatform* native_rendering_platform() override;
54 EGLNativeDisplayType egl_native_display() const override;55 MirServerEGLNativeDisplayType egl_native_display() const override;
5556
56private:57private:
57 std::shared_ptr<graphics::PlatformAuthentication> const platform_authentication;58 std::shared_ptr<graphics::PlatformAuthentication> const platform_authentication;
58 std::shared_ptr<graphics::NativeDisplayPlatform> auth;59
60 struct NestedAuthFactory : graphics::NativeDisplayPlatform,
61 graphics::PlatformAuthenticationFactory
62 {
63 NestedAuthFactory(std::shared_ptr<graphics::PlatformAuthentication> const&);
64 UniqueModulePtr<graphics::PlatformAuthentication> create_platform_authentication() override;
65 std::shared_ptr<graphics::PlatformAuthentication> const auth;
66 } auth_factory;
59 helpers::GBMHelper gbm;67 helpers::GBMHelper gbm;
60};68};
61}69}
6270
=== modified file 'src/platforms/mesa/server/kms/platform.cpp'
--- src/platforms/mesa/server/kms/platform.cpp 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/kms/platform.cpp 2017-05-12 10:00:59 +0000
@@ -26,6 +26,7 @@
26#include "mir/graphics/platform_operation_message.h"26#include "mir/graphics/platform_operation_message.h"
27#include "mir/graphics/platform_authentication.h"27#include "mir/graphics/platform_authentication.h"
28#include "mir/graphics/native_buffer.h"28#include "mir/graphics/native_buffer.h"
29#include "mir/graphics/platform_authentication.h"
29#include "mir/emergency_cleanup_registry.h"30#include "mir/emergency_cleanup_registry.h"
30#include "mir/udev/wrapper.h"31#include "mir/udev/wrapper.h"
31#include "mesa_extensions.h"32#include "mesa_extensions.h"
@@ -83,7 +84,7 @@
83 }84 }
84 }));85 }));
8586
86 native_platform = std::make_unique<mgm::DRMNativePlatform>(*drm.front());87 auth_factory = std::make_unique<DRMNativePlatformAuthFactory>(*drm.front());
87}88}
8889
89mir::UniqueModulePtr<mg::GraphicBufferAllocator> mgm::Platform::create_buffer_allocator()90mir::UniqueModulePtr<mg::GraphicBufferAllocator> mgm::Platform::create_buffer_allocator()
@@ -106,7 +107,7 @@
106107
107mg::NativeDisplayPlatform* mgm::Platform::native_display_platform()108mg::NativeDisplayPlatform* mgm::Platform::native_display_platform()
108{109{
109 return native_platform.get();110 return auth_factory.get();
110}111}
111112
112mir::UniqueModulePtr<mg::PlatformIpcOperations> mgm::Platform::make_ipc_operations() const113mir::UniqueModulePtr<mg::PlatformIpcOperations> mgm::Platform::make_ipc_operations() const
@@ -119,7 +120,7 @@
119 return this;120 return this;
120}121}
121122
122EGLNativeDisplayType mgm::Platform::egl_native_display() const123MirServerEGLNativeDisplayType mgm::Platform::egl_native_display() const
123{124{
124 return gbm->device;125 return gbm->device;
125}126}
126127
=== modified file 'src/platforms/mesa/server/kms/platform.h'
--- src/platforms/mesa/server/kms/platform.h 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/kms/platform.h 2017-05-12 10:00:59 +0000
@@ -56,7 +56,7 @@
56 UniqueModulePtr<PlatformIpcOperations> make_ipc_operations() const override;56 UniqueModulePtr<PlatformIpcOperations> make_ipc_operations() const override;
5757
58 NativeRenderingPlatform* native_rendering_platform() override;58 NativeRenderingPlatform* native_rendering_platform() override;
59 EGLNativeDisplayType egl_native_display() const override;59 MirServerEGLNativeDisplayType egl_native_display() const override;
6060
61 std::shared_ptr<mir::udev::Context> udev;61 std::shared_ptr<mir::udev::Context> udev;
62 std::vector<std::shared_ptr<helpers::DRMHelper>> const drm;62 std::vector<std::shared_ptr<helpers::DRMHelper>> const drm;
@@ -68,7 +68,7 @@
68 BypassOption bypass_option() const;68 BypassOption bypass_option() const;
69private:69private:
70 BypassOption const bypass_option_;70 BypassOption const bypass_option_;
71 std::unique_ptr<DRMNativePlatform> native_platform;71 std::unique_ptr<DRMNativePlatformAuthFactory> auth_factory;
72};72};
7373
74}74}
7575
=== modified file 'src/platforms/mesa/server/kms/platform_symbols.cpp'
--- src/platforms/mesa/server/kms/platform_symbols.cpp 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/kms/platform_symbols.cpp 2017-05-12 10:00:59 +0000
@@ -17,6 +17,7 @@
17 */17 */
1818
19#include "platform.h"19#include "platform.h"
20#include "gbm_platform.h"
20#include "guest_platform.h"21#include "guest_platform.h"
21#include "linux_virtual_terminal.h"22#include "linux_virtual_terminal.h"
22#include "mir/options/program_option.h"23#include "mir/options/program_option.h"
@@ -251,3 +252,40 @@
251 mir::assert_entry_point_signature<mg::CreateGuestPlatform>(&create_guest_platform);252 mir::assert_entry_point_signature<mg::CreateGuestPlatform>(&create_guest_platform);
252 return mir::make_module_ptr<mgm::GuestPlatform>(platform_authentication);253 return mir::make_module_ptr<mgm::GuestPlatform>(platform_authentication);
253}254}
255
256mir::UniqueModulePtr<mir::graphics::DisplayPlatform> create_display_platform(
257 std::shared_ptr<mo::Option> const& options,
258 std::shared_ptr<mir::EmergencyCleanupRegistry> const& emergency_cleanup_registry,
259 std::shared_ptr<mg::DisplayReport> const& report,
260 std::shared_ptr<mir::logging::Logger> const&)
261{
262 mir::assert_entry_point_signature<mg::CreateDisplayPlatform>(&create_display_platform);
263 // ensure mesa finds the mesa mir-platform symbols
264 auto real_fops = std::make_shared<RealVTFileOperations>();
265 auto real_pops = std::unique_ptr<RealPosixProcessOperations>(new RealPosixProcessOperations{});
266 auto vt = std::make_shared<mgm::LinuxVirtualTerminal>(
267 real_fops,
268 std::move(real_pops),
269 options->get<int>(vt_option_name),
270 report);
271
272 auto bypass_option = mgm::BypassOption::allowed;
273 if (!options->get<bool>(bypass_option_name))
274 bypass_option = mgm::BypassOption::prohibited;
275
276 return mir::make_module_ptr<mgm::Platform>(
277 report, vt, *emergency_cleanup_registry, bypass_option);
278}
279
280mir::UniqueModulePtr<mir::graphics::RenderingPlatform> create_rendering_platform(
281 std::shared_ptr<mir::options::Option> const& options,
282 std::shared_ptr<mir::graphics::PlatformAuthentication> const& platform_authentication)
283{
284 mir::assert_entry_point_signature<mg::CreateRenderingPlatform>(&create_rendering_platform);
285
286 auto bypass_option = mgm::BypassOption::allowed;
287 if (!options->get<bool>(bypass_option_name))
288 bypass_option = mgm::BypassOption::prohibited;
289 return mir::make_module_ptr<mgm::GBMPlatform>(
290 bypass_option, mgm::BufferImportMethod::gbm_native_pixmap, platform_authentication);
291}
254292
=== renamed file 'src/platforms/mesa/server/kms/nested_authentication.cpp' => 'src/platforms/mesa/server/nested_authentication.cpp'
--- src/platforms/mesa/server/kms/nested_authentication.cpp 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/nested_authentication.cpp 2017-05-12 10:00:59 +0000
@@ -21,7 +21,6 @@
21#include "nested_authentication.h"21#include "nested_authentication.h"
2222
23#include "mir_toolkit/mesa/platform_operation.h"23#include "mir_toolkit/mesa/platform_operation.h"
24#include "mir_toolkit/extensions/mesa_drm_auth.h"
2524
26#include <boost/exception/errinfo_errno.hpp>25#include <boost/exception/errinfo_errno.hpp>
27#include <boost/throw_exception.hpp>26#include <boost/throw_exception.hpp>
2827
=== renamed file 'src/platforms/mesa/server/kms/nested_authentication.h' => 'src/platforms/mesa/server/nested_authentication.h'
=== modified file 'src/platforms/mesa/server/x11/graphics/graphics.cpp'
--- src/platforms/mesa/server/x11/graphics/graphics.cpp 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/x11/graphics/graphics.cpp 2017-05-12 10:00:59 +0000
@@ -19,6 +19,8 @@
19#include "mir/graphics/display_report.h"19#include "mir/graphics/display_report.h"
20#include "mir/options/option.h"20#include "mir/options/option.h"
21#include "platform.h"21#include "platform.h"
22#include "gbm_platform.h"
23#include "platform_common.h"
22#include "guest_platform.h"24#include "guest_platform.h"
23#include "../X11_resources.h"25#include "../X11_resources.h"
24#include "mir/module_deleter.h"26#include "mir/module_deleter.h"
@@ -29,6 +31,7 @@
2931
30namespace mo = mir::options;32namespace mo = mir::options;
31namespace mg = mir::graphics;33namespace mg = mir::graphics;
34namespace mgm = mir::graphics::mesa;
32namespace mx = mir::X;35namespace mx = mir::X;
33namespace mgx = mg::X;36namespace mgx = mg::X;
34namespace geom = mir::geometry;37namespace geom = mir::geometry;
@@ -56,11 +59,12 @@
56 BOOST_THROW_EXCEPTION(std::runtime_error("Malformed display size option"));59 BOOST_THROW_EXCEPTION(std::runtime_error("Malformed display size option"));
5760
58 return mir::make_module_ptr<mgx::Platform>(61 return mir::make_module_ptr<mgx::Platform>(
59 x11_resources.get_conn(),62 x11_resources.get_conn(),
60 geom::Size{std::stoi(display_dims_str.substr(0, pos)),63 geom::Size{
61 std::stoi(display_dims_str.substr(pos+1, display_dims_str.find(':')))},64 std::stoi(display_dims_str.substr(0, pos)),
62 report65 std::stoi(display_dims_str.substr(pos+1, display_dims_str.find(':')))},
63 );66 report
67 );
64}68}
6569
66mir::UniqueModulePtr<mg::Platform> create_guest_platform(70mir::UniqueModulePtr<mg::Platform> create_guest_platform(
@@ -117,3 +121,39 @@
117 mir::assert_entry_point_signature<mg::DescribeModule>(&describe_graphics_module);121 mir::assert_entry_point_signature<mg::DescribeModule>(&describe_graphics_module);
118 return &description;122 return &description;
119}123}
124
125mir::UniqueModulePtr<mir::graphics::DisplayPlatform> create_display_platform(
126 std::shared_ptr<mo::Option> const& options,
127 std::shared_ptr<mir::EmergencyCleanupRegistry> const&,
128 std::shared_ptr<mg::DisplayReport> const& report,
129 std::shared_ptr<mir::logging::Logger> const&)
130{
131 mir::assert_entry_point_signature<mg::CreateDisplayPlatform>(&create_display_platform);
132
133 if (!x11_resources.get_conn())
134 BOOST_THROW_EXCEPTION(std::runtime_error("Need valid x11 display"));
135
136 auto display_dims_str = options->get<std::string>(x11_displays_option_name);
137 auto pos = display_dims_str.find('x');
138 if (pos == std::string::npos)
139 BOOST_THROW_EXCEPTION(std::runtime_error("Malformed display size option"));
140
141 return mir::make_module_ptr<mgx::Platform>(
142 x11_resources.get_conn(),
143 geom::Size{std::stoi(display_dims_str.substr(0, pos)),
144 std::stoi(display_dims_str.substr(pos+1, display_dims_str.find(':')))},
145 report
146 );
147}
148
149mir::UniqueModulePtr<mir::graphics::RenderingPlatform> create_rendering_platform(
150 std::shared_ptr<mir::options::Option> const&,
151 std::shared_ptr<mir::graphics::PlatformAuthentication> const&)
152{
153 mir::assert_entry_point_signature<mg::CreateRenderingPlatform>(&create_rendering_platform);
154 auto udev = std::make_shared<mir::udev::Context>();
155 auto drm = std::make_shared<mgm::helpers::DRMHelper>(mgm::helpers::DRMNodeToUse::render);
156 drm->setup(udev);
157 return mir::make_module_ptr<mgm::GBMPlatform>(
158 mgm::BypassOption::prohibited, mgm::BufferImportMethod::dma_buf, udev, drm);
159}
120160
=== modified file 'src/platforms/mesa/server/x11/graphics/guest_platform.cpp'
--- src/platforms/mesa/server/x11/graphics/guest_platform.cpp 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/x11/graphics/guest_platform.cpp 2017-05-12 10:00:59 +0000
@@ -35,7 +35,7 @@
35{35{
36 drm->setup(udev);36 drm->setup(udev);
37 gbm.setup(*drm);37 gbm.setup(*drm);
38 native_platform = std::make_unique<mgm::DRMNativePlatform>(*drm);38 auth_factory = std::make_unique<mgm::DRMNativePlatformAuthFactory>(*drm);
39}39}
4040
41mir::UniqueModulePtr<mg::GraphicBufferAllocator> mgx::GuestPlatform::create_buffer_allocator()41mir::UniqueModulePtr<mg::GraphicBufferAllocator> mgx::GuestPlatform::create_buffer_allocator()
@@ -60,7 +60,7 @@
6060
61mg::NativeDisplayPlatform* mgx::GuestPlatform::native_display_platform()61mg::NativeDisplayPlatform* mgx::GuestPlatform::native_display_platform()
62{62{
63 return native_platform.get();63 return auth_factory.get();
64}64}
6565
66mg::NativeRenderingPlatform* mgx::GuestPlatform::native_rendering_platform()66mg::NativeRenderingPlatform* mgx::GuestPlatform::native_rendering_platform()
@@ -68,7 +68,7 @@
68 return this;68 return this;
69}69}
7070
71EGLNativeDisplayType mgx::GuestPlatform::egl_native_display() const71MirServerEGLNativeDisplayType mgx::GuestPlatform::egl_native_display() const
72{72{
73 return gbm.device;73 return gbm.device;
74}74}
7575
=== modified file 'src/platforms/mesa/server/x11/graphics/guest_platform.h'
--- src/platforms/mesa/server/x11/graphics/guest_platform.h 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/x11/graphics/guest_platform.h 2017-05-12 10:00:59 +0000
@@ -50,13 +50,13 @@
50 std::vector<ExtensionDescription> extensions() const override;50 std::vector<ExtensionDescription> extensions() const override;
5151
52 NativeRenderingPlatform* native_rendering_platform() override;52 NativeRenderingPlatform* native_rendering_platform() override;
53 EGLNativeDisplayType egl_native_display() const override;53 MirServerEGLNativeDisplayType egl_native_display() const override;
5454
55private:55private:
56 std::shared_ptr<mir::udev::Context> udev;56 std::shared_ptr<mir::udev::Context> udev;
57 std::shared_ptr<graphics::mesa::helpers::DRMHelper> const drm;57 std::shared_ptr<graphics::mesa::helpers::DRMHelper> const drm;
58 graphics::mesa::helpers::GBMHelper gbm;58 graphics::mesa::helpers::GBMHelper gbm;
59 std::unique_ptr<graphics::mesa::DRMNativePlatform> native_platform;59 std::unique_ptr<mesa::DRMNativePlatformAuthFactory> auth_factory;
60};60};
6161
62}62}
6363
=== modified file 'src/platforms/mesa/server/x11/graphics/platform.cpp'
--- src/platforms/mesa/server/x11/graphics/platform.cpp 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/x11/graphics/platform.cpp 2017-05-12 10:00:59 +0000
@@ -41,7 +41,7 @@
4141
42 drm->setup(udev);42 drm->setup(udev);
43 gbm.setup(*drm);43 gbm.setup(*drm);
44 native_platform = std::make_unique<mgm::DRMNativePlatform>(*drm);44 auth_factory = std::make_unique<mgm::DRMNativePlatformAuthFactory>(*drm);
45}45}
4646
47mir::UniqueModulePtr<mg::GraphicBufferAllocator> mgx::Platform::create_buffer_allocator()47mir::UniqueModulePtr<mg::GraphicBufferAllocator> mgx::Platform::create_buffer_allocator()
@@ -59,7 +59,7 @@
5959
60mg::NativeDisplayPlatform* mgx::Platform::native_display_platform()60mg::NativeDisplayPlatform* mgx::Platform::native_display_platform()
61{61{
62 return native_platform.get();62 return auth_factory.get();
63}63}
6464
65mir::UniqueModulePtr<mg::PlatformIpcOperations> mgx::Platform::make_ipc_operations() const65mir::UniqueModulePtr<mg::PlatformIpcOperations> mgx::Platform::make_ipc_operations() const
6666
=== modified file 'src/platforms/mesa/server/x11/graphics/platform.h'
--- src/platforms/mesa/server/x11/graphics/platform.h 2017-04-28 03:49:54 +0000
+++ src/platforms/mesa/server/x11/graphics/platform.h 2017-05-12 10:00:59 +0000
@@ -66,7 +66,7 @@
66 std::shared_ptr<DisplayReport> const report;66 std::shared_ptr<DisplayReport> const report;
67 mesa::helpers::GBMHelper gbm;67 mesa::helpers::GBMHelper gbm;
68 mir::geometry::Size const size;68 mir::geometry::Size const size;
69 std::unique_ptr<mesa::DRMNativePlatform> native_platform;69 std::unique_ptr<mesa::DRMNativePlatformAuthFactory> auth_factory;
70};70};
7171
72}72}
7373
=== modified file 'src/server/graphics/nested/platform.h'
--- src/server/graphics/nested/platform.h 2017-04-28 03:49:54 +0000
+++ src/server/graphics/nested/platform.h 2017-05-12 10:00:59 +0000
@@ -54,7 +54,7 @@
54 NativeDisplayPlatform* native_display_platform() override;54 NativeDisplayPlatform* native_display_platform() override;
55 UniqueModulePtr<PlatformIpcOperations> make_ipc_operations() const override;55 UniqueModulePtr<PlatformIpcOperations> make_ipc_operations() const override;
56 NativeRenderingPlatform* native_rendering_platform() override;56 NativeRenderingPlatform* native_rendering_platform() override;
57 EGLNativeDisplayType egl_native_display() const override;57 MirServerEGLNativeDisplayType egl_native_display() const override;
58 std::vector<mir::ExtensionDescription> extensions() const override;58 std::vector<mir::ExtensionDescription> extensions() const override;
59private:59private:
60 std::shared_ptr<mir::SharedLibrary> const library; 60 std::shared_ptr<mir::SharedLibrary> const library;
6161
=== modified file 'tests/unit-tests/platforms/mesa/kms/test_nested_authentication.cpp'
--- tests/unit-tests/platforms/mesa/kms/test_nested_authentication.cpp 2017-04-28 03:49:54 +0000
+++ tests/unit-tests/platforms/mesa/kms/test_nested_authentication.cpp 2017-05-12 10:00:59 +0000
@@ -18,7 +18,7 @@
1818
19#include "mir/graphics/platform_authentication.h"19#include "mir/graphics/platform_authentication.h"
20#include "mir/graphics/platform_operation_message.h"20#include "mir/graphics/platform_operation_message.h"
21#include "src/platforms/mesa/server/kms/nested_authentication.h"21#include "src/platforms/mesa/server/nested_authentication.h"
22#include "mir_toolkit/mesa/platform_operation.h"22#include "mir_toolkit/mesa/platform_operation.h"
23#include "mir/test/doubles/mock_drm.h"23#include "mir/test/doubles/mock_drm.h"
24#include "mir/test/doubles/mock_platform_authentication.h"24#include "mir/test/doubles/mock_platform_authentication.h"

Subscribers

People subscribed via source and target branches