summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp10
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h3
2 files changed, 11 insertions, 2 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp
index fe83423d5..2ec1ad3e9 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp
@@ -47,15 +47,21 @@ std::size_t WriteVectors(std::vector<u8>& dst, const std::vector<T>& src, std::s
47} // Anonymous namespace 47} // Anonymous namespace
48 48
49std::unordered_map<DeviceFD, u32> nvhost_nvdec_common::fd_to_id{}; 49std::unordered_map<DeviceFD, u32> nvhost_nvdec_common::fd_to_id{};
50std::deque<u32> nvhost_nvdec_common::syncpts_accumulated{};
50 51
51nvhost_nvdec_common::nvhost_nvdec_common(Core::System& system_, NvCore::Container& core_, 52nvhost_nvdec_common::nvhost_nvdec_common(Core::System& system_, NvCore::Container& core_,
52 NvCore::ChannelType channel_type_) 53 NvCore::ChannelType channel_type_)
53 : nvdevice{system_}, core{core_}, syncpoint_manager{core.GetSyncpointManager()}, 54 : nvdevice{system_}, core{core_}, syncpoint_manager{core.GetSyncpointManager()},
54 nvmap{core.GetNvMapFile()}, channel_type{channel_type_} { 55 nvmap{core.GetNvMapFile()}, channel_type{channel_type_} {
55 channel_syncpoint = syncpoint_manager.AllocateSyncpoint(false); 56 if (syncpts_accumulated.empty()) {
57 channel_syncpoint = syncpoint_manager.AllocateSyncpoint(false);
58 } else {
59 channel_syncpoint = syncpts_accumulated.front();
60 syncpts_accumulated.pop_front();
61 }
56} 62}
57nvhost_nvdec_common::~nvhost_nvdec_common() { 63nvhost_nvdec_common::~nvhost_nvdec_common() {
58 syncpoint_manager.FreeSyncpoint(channel_syncpoint); 64 syncpts_accumulated.push_back(channel_syncpoint);
59} 65}
60 66
61NvResult nvhost_nvdec_common::SetNVMAPfd(const std::vector<u8>& input) { 67NvResult nvhost_nvdec_common::SetNVMAPfd(const std::vector<u8>& input) {
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h
index 4046b0e13..93990bb9b 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h
+++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h
@@ -3,6 +3,7 @@
3 3
4#pragma once 4#pragma once
5 5
6#include <deque>
6#include <vector> 7#include <vector>
7#include "common/common_types.h" 8#include "common/common_types.h"
8#include "common/swap.h" 9#include "common/swap.h"
@@ -127,6 +128,8 @@ protected:
127 NvCore::NvMap& nvmap; 128 NvCore::NvMap& nvmap;
128 NvCore::ChannelType channel_type; 129 NvCore::ChannelType channel_type;
129 std::array<u32, MaxSyncPoints> device_syncpoints{}; 130 std::array<u32, MaxSyncPoints> device_syncpoints{};
131
132 static std::deque<u32> syncpts_accumulated;
130}; 133};
131}; // namespace Devices 134}; // namespace Devices
132} // namespace Service::Nvidia 135} // namespace Service::Nvidia