summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Lioncash2019-02-21 10:56:20 -0500
committerGravatar Lioncash2019-02-21 12:13:09 -0500
commitfd15730767860659bdb58e8cd33074530a708295 (patch)
treeb5225c8d0e1f8e60e373b7affb01c3d2e8f35ccc /src
parentservice/nvflinger: Move display specifics over to vi_display (diff)
downloadyuzu-fd15730767860659bdb58e8cd33074530a708295.tar.gz
yuzu-fd15730767860659bdb58e8cd33074530a708295.tar.xz
yuzu-fd15730767860659bdb58e8cd33074530a708295.zip
service/vi/vi_layer: Convert Layer struct into a class
Like the previous changes made to the Display struct, this prepares the Layer struct for changes to its interface. Given Layer will be given more invariants in the future, we convert it into a class to better signify that.
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};