diff options
author | bunnei <bunneidev@gmail.com> | 2020-12-17 06:09:06 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2020-12-29 06:33:34 +0100 |
commit | 6433b1dfd67f4c4f0c4b2e3742dc437a0d1e906e (patch) | |
tree | d2a9a23be1a80d9351f99d7feb7978f3c2237882 /src/core/hle/service/nvflinger/nvflinger.cpp | |
parent | hle: service: Ensure system is powered on before writing IPC result. (diff) | |
download | yuzu-6433b1dfd67f4c4f0c4b2e3742dc437a0d1e906e.tar yuzu-6433b1dfd67f4c4f0c4b2e3742dc437a0d1e906e.tar.gz yuzu-6433b1dfd67f4c4f0c4b2e3742dc437a0d1e906e.tar.bz2 yuzu-6433b1dfd67f4c4f0c4b2e3742dc437a0d1e906e.tar.lz yuzu-6433b1dfd67f4c4f0c4b2e3742dc437a0d1e906e.tar.xz yuzu-6433b1dfd67f4c4f0c4b2e3742dc437a0d1e906e.tar.zst yuzu-6433b1dfd67f4c4f0c4b2e3742dc437a0d1e906e.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index a7a679df1..4b3581949 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp @@ -88,6 +88,10 @@ NVFlinger::NVFlinger(Core::System& system) : system(system) { } NVFlinger::~NVFlinger() { + for (auto& buffer_queue : buffer_queues) { + buffer_queue->Disconnect(); + } + if (system.IsMulticore()) { is_running = false; wait_event->Set(); @@ -132,8 +136,9 @@ std::optional<u64> NVFlinger::CreateLayer(u64 display_id) { const u64 layer_id = next_layer_id++; const u32 buffer_queue_id = next_buffer_queue_id++; - buffer_queues.emplace_back(system.Kernel(), buffer_queue_id, layer_id); - display->CreateLayer(layer_id, buffer_queues.back()); + buffer_queues.emplace_back( + std::make_unique<BufferQueue>(system.Kernel(), buffer_queue_id, layer_id)); + display->CreateLayer(layer_id, *buffer_queues.back()); return layer_id; } @@ -170,13 +175,13 @@ std::shared_ptr<Kernel::ReadableEvent> NVFlinger::FindVsyncEvent(u64 display_id) BufferQueue* NVFlinger::FindBufferQueue(u32 id) { const auto guard = Lock(); const auto itr = std::find_if(buffer_queues.begin(), buffer_queues.end(), - [id](const auto& queue) { return queue.GetId() == id; }); + [id](const auto& queue) { return queue->GetId() == id; }); if (itr == buffer_queues.end()) { return nullptr; } - return &*itr; + return itr->get(); } VI::Display* NVFlinger::FindDisplay(u64 display_id) { |