diff options
author | Chloe Marcec <dmarcecguzman@gmail.com> | 2021-03-30 11:37:40 +0200 |
---|---|---|
committer | Chloe Marcec <dmarcecguzman@gmail.com> | 2021-03-30 11:37:40 +0200 |
commit | bf1c1788cab4740d8c46c30ad8a97021b2e858f9 (patch) | |
tree | 3d3228a9369adcfe1db58c698b4ba84e86376300 /src | |
parent | Merge pull request #6109 from german77/gestureID (diff) | |
download | yuzu-bf1c1788cab4740d8c46c30ad8a97021b2e858f9.tar yuzu-bf1c1788cab4740d8c46c30ad8a97021b2e858f9.tar.gz yuzu-bf1c1788cab4740d8c46c30ad8a97021b2e858f9.tar.bz2 yuzu-bf1c1788cab4740d8c46c30ad8a97021b2e858f9.tar.lz yuzu-bf1c1788cab4740d8c46c30ad8a97021b2e858f9.tar.xz yuzu-bf1c1788cab4740d8c46c30ad8a97021b2e858f9.tar.zst yuzu-bf1c1788cab4740d8c46c30ad8a97021b2e858f9.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp | 10 | ||||
-rw-r--r-- | src/video_core/gpu.cpp | 13 | ||||
-rw-r--r-- | src/video_core/gpu.h | 3 |
3 files changed, 15 insertions, 11 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp index c8031970b..4e58b9b80 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp @@ -32,11 +32,6 @@ NvResult nvhost_nvdec::Ioctl1(DeviceFD fd, Ioctl command, const std::vector<u8>& case 0x9: return MapBuffer(input, output); case 0xa: { - if (command.length == 0x1c) { - LOG_INFO(Service_NVDRV, "NVDEC video stream ended"); - Tegra::ChCommandHeaderList cmdlist{{0xDEADB33F}}; - system.GPU().PushCommandBuffer(cmdlist); - } return UnmapBuffer(input, output); } default: @@ -70,6 +65,9 @@ NvResult nvhost_nvdec::Ioctl3(DeviceFD fd, Ioctl command, const std::vector<u8>& } void nvhost_nvdec::OnOpen(DeviceFD fd) {} -void nvhost_nvdec::OnClose(DeviceFD fd) {} + +void nvhost_nvdec::OnClose(DeviceFD fd) { + system.GPU().ClearCommandBuffer(); +} } // namespace Service::Nvidia::Devices diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index c61f44619..811e248a3 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp @@ -480,11 +480,7 @@ void GPU::PushCommandBuffer(Tegra::ChCommandHeaderList& entries) { if (!use_nvdec) { return; } - // This condition fires when a video stream ends, clear all intermediary data - if (entries[0].raw == 0xDEADB33F) { - cdma_pusher.reset(); - return; - } + if (!cdma_pusher) { cdma_pusher = std::make_unique<Tegra::CDmaPusher>(*this); } @@ -496,6 +492,13 @@ void GPU::PushCommandBuffer(Tegra::ChCommandHeaderList& entries) { cdma_pusher->ProcessEntries(std::move(entries)); } +void GPU::ClearCommandBuffer() { + // This condition fires when a video stream ends, clear all intermediary data + if (cdma_pusher) { + cdma_pusher.reset(); + } +} + void GPU::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { gpu_thread.SwapBuffers(framebuffer); } diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h index b2ee45496..d40982a54 100644 --- a/src/video_core/gpu.h +++ b/src/video_core/gpu.h @@ -324,6 +324,9 @@ public: /// Push GPU command buffer entries to be processed void PushCommandBuffer(Tegra::ChCommandHeaderList& entries); + /// Frees the CDMAPusher to free up resources + void ClearCommandBuffer(); + /// Swap buffers (render frame) void SwapBuffers(const Tegra::FramebufferConfig* framebuffer); |