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.
This commit is contained in:
parent
fa4dc2cf42
commit
fd15730767
6 changed files with 43 additions and 10 deletions
|
@ -91,7 +91,7 @@ std::optional<u32> NVFlinger::FindBufferQueueId(u64 display_id, u64 layer_id) co
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
return layer->buffer_queue->GetId();
|
return layer->GetBufferQueue().GetId();
|
||||||
}
|
}
|
||||||
|
|
||||||
Kernel::SharedPtr<Kernel::ReadableEvent> NVFlinger::FindVsyncEvent(u64 display_id) const {
|
Kernel::SharedPtr<Kernel::ReadableEvent> NVFlinger::FindVsyncEvent(u64 display_id) const {
|
||||||
|
@ -167,10 +167,10 @@ void NVFlinger::Compose() {
|
||||||
|
|
||||||
// TODO(Subv): Support more than 1 layer.
|
// TODO(Subv): Support more than 1 layer.
|
||||||
VI::Layer& layer = display.GetLayer(0);
|
VI::Layer& layer = display.GetLayer(0);
|
||||||
auto& buffer_queue = layer.buffer_queue;
|
auto& buffer_queue = layer.GetBufferQueue();
|
||||||
|
|
||||||
// Search for a queued buffer and acquire it
|
// Search for a queued buffer and acquire it
|
||||||
auto buffer = buffer_queue->AcquireBuffer();
|
auto buffer = buffer_queue.AcquireBuffer();
|
||||||
|
|
||||||
MicroProfileFlip();
|
MicroProfileFlip();
|
||||||
|
|
||||||
|
@ -195,7 +195,7 @@ void NVFlinger::Compose() {
|
||||||
igbp_buffer.width, igbp_buffer.height, igbp_buffer.stride,
|
igbp_buffer.width, igbp_buffer.height, igbp_buffer.stride,
|
||||||
buffer->get().transform, buffer->get().crop_rect);
|
buffer->get().transform, buffer->get().crop_rect);
|
||||||
|
|
||||||
buffer_queue->ReleaseBuffer(buffer->get().slot);
|
buffer_queue.ReleaseBuffer(buffer->get().slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ class Module;
|
||||||
|
|
||||||
namespace Service::VI {
|
namespace Service::VI {
|
||||||
class Display;
|
class Display;
|
||||||
struct Layer;
|
class Layer;
|
||||||
} // namespace Service::VI
|
} // namespace Service::VI
|
||||||
|
|
||||||
namespace Service::NVFlinger {
|
namespace Service::NVFlinger {
|
||||||
|
|
|
@ -48,7 +48,7 @@ void Display::CreateLayer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> buffer
|
||||||
|
|
||||||
Layer* Display::FindLayer(u64 id) {
|
Layer* Display::FindLayer(u64 id) {
|
||||||
const auto itr = std::find_if(layers.begin(), layers.end(),
|
const auto itr = std::find_if(layers.begin(), layers.end(),
|
||||||
[id](const VI::Layer& layer) { return layer.id == id; });
|
[id](const VI::Layer& layer) { return layer.GetID() == id; });
|
||||||
|
|
||||||
if (itr == layers.end()) {
|
if (itr == layers.end()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -59,7 +59,7 @@ Layer* Display::FindLayer(u64 id) {
|
||||||
|
|
||||||
const Layer* Display::FindLayer(u64 id) const {
|
const Layer* Display::FindLayer(u64 id) const {
|
||||||
const auto itr = std::find_if(layers.begin(), layers.end(),
|
const auto itr = std::find_if(layers.begin(), layers.end(),
|
||||||
[id](const VI::Layer& layer) { return layer.id == id; });
|
[id](const VI::Layer& layer) { return layer.GetID() == id; });
|
||||||
|
|
||||||
if (itr == layers.end()) {
|
if (itr == layers.end()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
|
@ -16,7 +16,7 @@ class BufferQueue;
|
||||||
|
|
||||||
namespace Service::VI {
|
namespace Service::VI {
|
||||||
|
|
||||||
struct Layer;
|
class Layer;
|
||||||
|
|
||||||
/// Represents a single display type
|
/// Represents a single display type
|
||||||
class Display {
|
class Display {
|
||||||
|
|
|
@ -2,12 +2,16 @@
|
||||||
// Licensed under GPLv2 or any later version
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "common/assert.h"
|
||||||
#include "core/hle/service/vi/layer/vi_layer.h"
|
#include "core/hle/service/vi/layer/vi_layer.h"
|
||||||
|
|
||||||
namespace Service::VI {
|
namespace Service::VI {
|
||||||
|
|
||||||
Layer::Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue)
|
Layer::Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue)
|
||||||
: id{id}, buffer_queue{std::move(queue)} {}
|
: id{id}, buffer_queue{std::move(queue)}
|
||||||
|
{
|
||||||
|
ASSERT_MSG(buffer_queue != nullptr, "buffer_queue may not be null.");
|
||||||
|
}
|
||||||
|
|
||||||
Layer::~Layer() = default;
|
Layer::~Layer() = default;
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,39 @@ class BufferQueue;
|
||||||
|
|
||||||
namespace Service::VI {
|
namespace Service::VI {
|
||||||
|
|
||||||
struct Layer {
|
/// Represents a single display layer.
|
||||||
|
class Layer {
|
||||||
|
public:
|
||||||
|
/// Constructs a layer with a given ID and buffer queue.
|
||||||
|
///
|
||||||
|
/// @param id The ID to assign to this layer.
|
||||||
|
/// @param queue The buffer queue for this layer to use.
|
||||||
|
///
|
||||||
Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue);
|
Layer(u64 id, std::shared_ptr<NVFlinger::BufferQueue> queue);
|
||||||
~Layer();
|
~Layer();
|
||||||
|
|
||||||
|
Layer(const Layer&) = delete;
|
||||||
|
Layer& operator=(const Layer&) = delete;
|
||||||
|
|
||||||
|
Layer(Layer&&) = default;
|
||||||
|
Layer& operator=(Layer&&) = default;
|
||||||
|
|
||||||
|
/// Gets the ID for this layer.
|
||||||
|
u64 GetID() const {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Gets a reference to the buffer queue this layer is using.
|
||||||
|
NVFlinger::BufferQueue& GetBufferQueue() {
|
||||||
|
return *buffer_queue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Gets a const reference to the buffer queue this layer is using.
|
||||||
|
const NVFlinger::BufferQueue& GetBufferQueue() const {
|
||||||
|
return *buffer_queue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
u64 id;
|
u64 id;
|
||||||
std::shared_ptr<NVFlinger::BufferQueue> buffer_queue;
|
std::shared_ptr<NVFlinger::BufferQueue> buffer_queue;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue