diff options
| -rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.h | 2 | ||||
| -rw-r--r-- | src/core/hle/service/vi/display/vi_display.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/vi/display/vi_display.h | 2 | ||||
| -rw-r--r-- | src/core/hle/service/vi/layer/vi_layer.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/service/vi/layer/vi_layer.h | 31 |
6 files changed, 43 insertions, 10 deletions
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index 6cc31050f..95bb55bbb 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp | |||
| @@ -91,7 +91,7 @@ std::optional<u32> NVFlinger::FindBufferQueueId(u64 display_id, u64 layer_id) co | |||
| 91 | return {}; | 91 | return {}; |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | return layer->buffer_queue->GetId(); | 94 | return layer->GetBufferQueue().GetId(); |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | Kernel::SharedPtr<Kernel::ReadableEvent> NVFlinger::FindVsyncEvent(u64 display_id) const { | 97 | Kernel::SharedPtr<Kernel::ReadableEvent> NVFlinger::FindVsyncEvent(u64 display_id) const { |
| @@ -167,10 +167,10 @@ void NVFlinger::Compose() { | |||
| 167 | 167 | ||
| 168 | // TODO(Subv): Support more than 1 layer. | 168 | // TODO(Subv): Support more than 1 layer. |
| 169 | VI::Layer& layer = display.GetLayer(0); | 169 | VI::Layer& layer = display.GetLayer(0); |
| 170 | auto& buffer_queue = layer.buffer_queue; | 170 | auto& buffer_queue = layer.GetBufferQueue(); |
| 171 | 171 | ||
| 172 | // Search for a queued buffer and acquire it | 172 | // Search for a queued buffer and acquire it |
| 173 | auto buffer = buffer_queue->AcquireBuffer(); | 173 | auto buffer = buffer_queue.AcquireBuffer(); |
| 174 | 174 | ||
| 175 | MicroProfileFlip(); | 175 | MicroProfileFlip(); |
| 176 | 176 | ||
| @@ -195,7 +195,7 @@ void NVFlinger::Compose() { | |||
| 195 | igbp_buffer.width, igbp_buffer.height, igbp_buffer.stride, | 195 | igbp_buffer.width, igbp_buffer.height, igbp_buffer.stride, |
| 196 | buffer->get().transform, buffer->get().crop_rect); | 196 | buffer->get().transform, buffer->get().crop_rect); |
| 197 | 197 | ||
| 198 | buffer_queue->ReleaseBuffer(buffer->get().slot); | 198 | buffer_queue.ReleaseBuffer(buffer->get().slot); |
| 199 | } | 199 | } |
| 200 | } | 200 | } |
| 201 | 201 | ||
diff --git a/src/core/hle/service/nvflinger/nvflinger.h b/src/core/hle/service/nvflinger/nvflinger.h index 4741b1363..f9458745a 100644 --- a/src/core/hle/service/nvflinger/nvflinger.h +++ b/src/core/hle/service/nvflinger/nvflinger.h | |||
| @@ -29,7 +29,7 @@ class Module; | |||
| 29 | 29 | ||
| 30 | namespace Service::VI { | 30 | namespace Service::VI { |
| 31 | class Display; | 31 | class Display; |
| 32 | struct Layer; | 32 | class Layer; |
| 33 | } // namespace Service::VI | 33 | } // namespace Service::VI |
| 34 | 34 | ||
| 35 | namespace Service::NVFlinger { | 35 | namespace Service::NVFlinger { |
diff --git a/src/core/hle/service/vi/display/vi_display.cpp b/src/core/hle/service/vi/display/vi_display.cpp index 4d77c3353..9c0afd152 100644 --- a/src/core/hle/service/vi/display/vi_display.cpp +++ b/src/core/hle/service/vi/display/vi_display.cpp | |||
| @@ -48,7 +48,7 @@ void Display::CreateLayer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> buffer | |||
| 48 | 48 | ||
| 49 | Layer* Display::FindLayer(u64 id) { | 49 | Layer* Display::FindLayer(u64 id) { |
| 50 | const auto itr = std::find_if(layers.begin(), layers.end(), | 50 | const auto itr = std::find_if(layers.begin(), layers.end(), |
| 51 | [id](const VI::Layer& layer) { return layer.id == id; }); | 51 | [id](const VI::Layer& layer) { return layer.GetID() == id; }); |
| 52 | 52 | ||
| 53 | if (itr == layers.end()) { | 53 | if (itr == layers.end()) { |
| 54 | return nullptr; | 54 | return nullptr; |
| @@ -59,7 +59,7 @@ Layer* Display::FindLayer(u64 id) { | |||
| 59 | 59 | ||
| 60 | const Layer* Display::FindLayer(u64 id) const { | 60 | const Layer* Display::FindLayer(u64 id) const { |
| 61 | const auto itr = std::find_if(layers.begin(), layers.end(), | 61 | const auto itr = std::find_if(layers.begin(), layers.end(), |
| 62 | [id](const VI::Layer& layer) { return layer.id == id; }); | 62 | [id](const VI::Layer& layer) { return layer.GetID() == id; }); |
| 63 | 63 | ||
| 64 | if (itr == layers.end()) { | 64 | if (itr == layers.end()) { |
| 65 | return nullptr; | 65 | return nullptr; |
diff --git a/src/core/hle/service/vi/display/vi_display.h b/src/core/hle/service/vi/display/vi_display.h index 22b831592..8948102bc 100644 --- a/src/core/hle/service/vi/display/vi_display.h +++ b/src/core/hle/service/vi/display/vi_display.h | |||
| @@ -16,7 +16,7 @@ class BufferQueue; | |||
| 16 | 16 | ||
| 17 | namespace Service::VI { | 17 | namespace Service::VI { |
| 18 | 18 | ||
| 19 | struct Layer; | 19 | class Layer; |
| 20 | 20 | ||
| 21 | /// Represents a single display type | 21 | /// Represents a single display type |
| 22 | class Display { | 22 | class Display { |
diff --git a/src/core/hle/service/vi/layer/vi_layer.cpp b/src/core/hle/service/vi/layer/vi_layer.cpp index 3a83e5b95..48f4c57cb 100644 --- a/src/core/hle/service/vi/layer/vi_layer.cpp +++ b/src/core/hle/service/vi/layer/vi_layer.cpp | |||
| @@ -2,12 +2,16 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include "common/assert.h" | ||
| 5 | #include "core/hle/service/vi/layer/vi_layer.h" | 6 | #include "core/hle/service/vi/layer/vi_layer.h" |
| 6 | 7 | ||
| 7 | namespace Service::VI { | 8 | namespace Service::VI { |
| 8 | 9 | ||
| 9 | Layer::Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue) | 10 | Layer::Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue) |
| 10 | : id{id}, buffer_queue{std::move(queue)} {} | 11 | : id{id}, buffer_queue{std::move(queue)} |
| 12 | { | ||
| 13 | ASSERT_MSG(buffer_queue != nullptr, "buffer_queue may not be null."); | ||
| 14 | } | ||
| 11 | 15 | ||
| 12 | Layer::~Layer() = default; | 16 | Layer::~Layer() = default; |
| 13 | 17 | ||
diff --git a/src/core/hle/service/vi/layer/vi_layer.h b/src/core/hle/service/vi/layer/vi_layer.h index df328e09f..dd4f7e596 100644 --- a/src/core/hle/service/vi/layer/vi_layer.h +++ b/src/core/hle/service/vi/layer/vi_layer.h | |||
| @@ -14,10 +14,39 @@ class BufferQueue; | |||
| 14 | 14 | ||
| 15 | namespace Service::VI { | 15 | namespace Service::VI { |
| 16 | 16 | ||
| 17 | struct Layer { | 17 | /// Represents a single display layer. |
| 18 | class Layer { | ||
| 19 | public: | ||
| 20 | /// Constructs a layer with a given ID and buffer queue. | ||
| 21 | /// | ||
| 22 | /// @param id The ID to assign to this layer. | ||
| 23 | /// @param queue The buffer queue for this layer to use. | ||
| 24 | /// | ||
| 18 | Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue); | 25 | Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue); |
| 19 | ~Layer(); | 26 | ~Layer(); |
| 20 | 27 | ||
| 28 | Layer(const Layer&) = delete; | ||
| 29 | Layer& operator=(const Layer&) = delete; | ||
| 30 | |||
| 31 | Layer(Layer&&) = default; | ||
| 32 | Layer& operator=(Layer&&) = default; | ||
| 33 | |||
| 34 | /// Gets the ID for this layer. | ||
| 35 | u64 GetID() const { | ||
| 36 | return id; | ||
| 37 | } | ||
| 38 | |||
| 39 | /// Gets a reference to the buffer queue this layer is using. | ||
| 40 | NVFlinger::BufferQueue& GetBufferQueue() { | ||
| 41 | return *buffer_queue; | ||
| 42 | } | ||
| 43 | |||
| 44 | /// Gets a const reference to the buffer queue this layer is using. | ||
| 45 | const NVFlinger::BufferQueue& GetBufferQueue() const { | ||
| 46 | return *buffer_queue; | ||
| 47 | } | ||
| 48 | |||
| 49 | private: | ||
| 21 | u64 id; | 50 | u64 id; |
| 22 | std::shared_ptr<NVFlinger::BufferQueue> buffer_queue; | 51 | std::shared_ptr<NVFlinger::BufferQueue> buffer_queue; |
| 23 | }; | 52 | }; |