summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.cpp8
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.h2
-rw-r--r--src/core/hle/service/vi/display/vi_display.cpp4
-rw-r--r--src/core/hle/service/vi/display/vi_display.h2
-rw-r--r--src/core/hle/service/vi/layer/vi_layer.cpp6
-rw-r--r--src/core/hle/service/vi/layer/vi_layer.h31
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
97Kernel::SharedPtr<Kernel::ReadableEvent> NVFlinger::FindVsyncEvent(u64 display_id) const { 97Kernel::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
30namespace Service::VI { 30namespace Service::VI {
31class Display; 31class Display;
32struct Layer; 32class Layer;
33} // namespace Service::VI 33} // namespace Service::VI
34 34
35namespace Service::NVFlinger { 35namespace 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
49Layer* Display::FindLayer(u64 id) { 49Layer* 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
60const Layer* Display::FindLayer(u64 id) const { 60const 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
17namespace Service::VI { 17namespace Service::VI {
18 18
19struct Layer; 19class Layer;
20 20
21/// Represents a single display type 21/// Represents a single display type
22class Display { 22class 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
7namespace Service::VI { 8namespace Service::VI {
8 9
9Layer::Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue) 10Layer::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
12Layer::~Layer() = default; 16Layer::~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
15namespace Service::VI { 15namespace Service::VI {
16 16
17struct Layer { 17/// Represents a single display layer.
18class Layer {
19public:
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
49private:
21 u64 id; 50 u64 id;
22 std::shared_ptr<NVFlinger::BufferQueue> buffer_queue; 51 std::shared_ptr<NVFlinger::BufferQueue> buffer_queue;
23}; 52};