diff options
| author | 2021-04-16 23:14:44 -0700 | |
|---|---|---|
| committer | 2021-04-16 23:14:44 -0700 | |
| commit | 9ad77ba6d388c93b8f2258d6faab8b68342742ff (patch) | |
| tree | d7f9fe69b8ed0504f7285d000d6c5e7c570870c3 /src/video_core | |
| parent | Merge pull request #6133 from Morph1984/project-eleuthia (diff) | |
| parent | Address issues (diff) | |
| download | yuzu-9ad77ba6d388c93b8f2258d6faab8b68342742ff.tar.gz yuzu-9ad77ba6d388c93b8f2258d6faab8b68342742ff.tar.xz yuzu-9ad77ba6d388c93b8f2258d6faab8b68342742ff.zip | |
Merge pull request #6125 from ogniK5377/nvdec-close-dev
nvdrv: Cleanup CDMA Processor on device closure
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/gpu.cpp | 12 | ||||
| -rw-r--r-- | src/video_core/gpu.h | 3 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index 9bdb282d2..7c42f1177 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp | |||
| @@ -480,11 +480,7 @@ void GPU::PushCommandBuffer(Tegra::ChCommandHeaderList& entries) { | |||
| 480 | if (!use_nvdec) { | 480 | if (!use_nvdec) { |
| 481 | return; | 481 | return; |
| 482 | } | 482 | } |
| 483 | // This condition fires when a video stream ends, clear all intermediary data | 483 | |
| 484 | if (entries[0].raw == 0xDEADB33F) { | ||
| 485 | cdma_pusher.reset(); | ||
| 486 | return; | ||
| 487 | } | ||
| 488 | if (!cdma_pusher) { | 484 | if (!cdma_pusher) { |
| 489 | cdma_pusher = std::make_unique<Tegra::CDmaPusher>(*this); | 485 | cdma_pusher = std::make_unique<Tegra::CDmaPusher>(*this); |
| 490 | } | 486 | } |
| @@ -496,6 +492,12 @@ void GPU::PushCommandBuffer(Tegra::ChCommandHeaderList& entries) { | |||
| 496 | cdma_pusher->ProcessEntries(std::move(entries)); | 492 | cdma_pusher->ProcessEntries(std::move(entries)); |
| 497 | } | 493 | } |
| 498 | 494 | ||
| 495 | void GPU::ClearCommandBuffer() { | ||
| 496 | // This condition fires when a video stream ends, clear all intermediary data | ||
| 497 | cdma_pusher.reset(); | ||
| 498 | LOG_INFO(Service_NVDRV, "NVDEC video stream ended"); | ||
| 499 | } | ||
| 500 | |||
| 499 | void GPU::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { | 501 | void GPU::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { |
| 500 | gpu_thread.SwapBuffers(framebuffer); | 502 | gpu_thread.SwapBuffers(framebuffer); |
| 501 | } | 503 | } |
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h index ecab35d3b..b1960ea86 100644 --- a/src/video_core/gpu.h +++ b/src/video_core/gpu.h | |||
| @@ -324,6 +324,9 @@ public: | |||
| 324 | /// Push GPU command buffer entries to be processed | 324 | /// Push GPU command buffer entries to be processed |
| 325 | void PushCommandBuffer(Tegra::ChCommandHeaderList& entries); | 325 | void PushCommandBuffer(Tegra::ChCommandHeaderList& entries); |
| 326 | 326 | ||
| 327 | /// Frees the CDMAPusher to free up resources | ||
| 328 | void ClearCommandBuffer(); | ||
| 329 | |||
| 327 | /// Swap buffers (render frame) | 330 | /// Swap buffers (render frame) |
| 328 | void SwapBuffers(const Tegra::FramebufferConfig* framebuffer); | 331 | void SwapBuffers(const Tegra::FramebufferConfig* framebuffer); |
| 329 | 332 | ||