diff options
author | Lioncash <mathew1800@gmail.com> | 2019-02-21 16:43:26 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-02-21 18:13:04 +0100 |
commit | fa4dc2cf427ddb464d73d532ba941513828b9b7a (patch) | |
tree | de8750cdf516af224c1dae2283e7213e5e088d1d /src/core/hle/service/vi/display/vi_display.cpp | |
parent | Merge pull request #2125 from ReinUsesLisp/fixup-glstate (diff) | |
download | yuzu-fa4dc2cf427ddb464d73d532ba941513828b9b7a.tar yuzu-fa4dc2cf427ddb464d73d532ba941513828b9b7a.tar.gz yuzu-fa4dc2cf427ddb464d73d532ba941513828b9b7a.tar.bz2 yuzu-fa4dc2cf427ddb464d73d532ba941513828b9b7a.tar.lz yuzu-fa4dc2cf427ddb464d73d532ba941513828b9b7a.tar.xz yuzu-fa4dc2cf427ddb464d73d532ba941513828b9b7a.tar.zst yuzu-fa4dc2cf427ddb464d73d532ba941513828b9b7a.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/service/vi/display/vi_display.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/core/hle/service/vi/display/vi_display.cpp b/src/core/hle/service/vi/display/vi_display.cpp index a108e468f..4d77c3353 100644 --- a/src/core/hle/service/vi/display/vi_display.cpp +++ b/src/core/hle/service/vi/display/vi_display.cpp @@ -2,8 +2,12 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include <algorithm> +#include <utility> + #include <fmt/format.h> +#include "common/assert.h" #include "core/core.h" #include "core/hle/kernel/readable_event.h" #include "core/hle/service/vi/display/vi_display.h" @@ -19,4 +23,49 @@ Display::Display(u64 id, std::string name) : id{id}, name{std::move(name)} { Display::~Display() = default; +Layer& Display::GetLayer(std::size_t index) { + return layers.at(index); +} + +const Layer& Display::GetLayer(std::size_t index) const { + return layers.at(index); +} + +Kernel::SharedPtr<Kernel::ReadableEvent> Display::GetVSyncEvent() const { + return vsync_event.readable; +} + +void Display::SignalVSyncEvent() { + vsync_event.writable->Signal(); +} + +void Display::CreateLayer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> buffer_queue) { + // TODO(Subv): Support more than 1 layer. + ASSERT_MSG(layers.empty(), "Only one layer is supported per display at the moment"); + + layers.emplace_back(id, std::move(buffer_queue)); +} + +Layer* Display::FindLayer(u64 id) { + const auto itr = std::find_if(layers.begin(), layers.end(), + [id](const VI::Layer& layer) { return layer.id == id; }); + + if (itr == layers.end()) { + return nullptr; + } + + return &*itr; +} + +const Layer* Display::FindLayer(u64 id) const { + const auto itr = std::find_if(layers.begin(), layers.end(), + [id](const VI::Layer& layer) { return layer.id == id; }); + + if (itr == layers.end()) { + return nullptr; + } + + return &*itr; +} + } // namespace Service::VI |