diff options
author | bunnei <bunneidev@gmail.com> | 2018-11-28 16:12:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-28 16:12:37 +0100 |
commit | 6f849887c9e7fa51743809c3a4bcfd2e319dff8d (patch) | |
tree | ba26ea7fcb626dacab4b7997149ad52c21ba526c /src/core/hle | |
parent | Merge pull request #1735 from FernandoS27/tex-spacing (diff) | |
parent | dma_pushbuffer: Optimize to avoid loop and copy on Push. (diff) | |
download | yuzu-6f849887c9e7fa51743809c3a4bcfd2e319dff8d.tar yuzu-6f849887c9e7fa51743809c3a4bcfd2e319dff8d.tar.gz yuzu-6f849887c9e7fa51743809c3a4bcfd2e319dff8d.tar.bz2 yuzu-6f849887c9e7fa51743809c3a4bcfd2e319dff8d.tar.lz yuzu-6f849887c9e7fa51743809c3a4bcfd2e319dff8d.tar.xz yuzu-6f849887c9e7fa51743809c3a4bcfd2e319dff8d.tar.zst yuzu-6f849887c9e7fa51743809c3a4bcfd2e319dff8d.zip |
Diffstat (limited to 'src/core/hle')
-rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp index 874d5e1c3..2e2b0ae1c 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp @@ -8,7 +8,6 @@ #include "core/core.h" #include "core/hle/service/nvdrv/devices/nvhost_gpu.h" #include "core/memory.h" -#include "video_core/command_processor.h" #include "video_core/gpu.h" #include "video_core/memory_manager.h" @@ -129,6 +128,12 @@ u32 nvhost_gpu::AllocateObjectContext(const std::vector<u8>& input, std::vector< return 0; } +static void PushGPUEntries(Tegra::CommandList&& entries) { + auto& dma_pusher{Core::System::GetInstance().GPU().DmaPusher()}; + dma_pusher.Push(std::move(entries)); + dma_pusher.DispatchCalls(); +} + u32 nvhost_gpu::SubmitGPFIFO(const std::vector<u8>& input, std::vector<u8>& output) { if (input.size() < sizeof(IoctlSubmitGpfifo)) { UNIMPLEMENTED(); @@ -142,11 +147,11 @@ u32 nvhost_gpu::SubmitGPFIFO(const std::vector<u8>& input, std::vector<u8>& outp params.num_entries * sizeof(Tegra::CommandListHeader), "Incorrect input size"); - std::vector<Tegra::CommandListHeader> entries(params.num_entries); + Tegra::CommandList entries(params.num_entries); std::memcpy(entries.data(), &input[sizeof(IoctlSubmitGpfifo)], params.num_entries * sizeof(Tegra::CommandListHeader)); - Core::System::GetInstance().GPU().ProcessCommandLists(entries); + PushGPUEntries(std::move(entries)); params.fence_out.id = 0; params.fence_out.value = 0; @@ -163,11 +168,11 @@ u32 nvhost_gpu::KickoffPB(const std::vector<u8>& input, std::vector<u8>& output) LOG_WARNING(Service_NVDRV, "(STUBBED) called, gpfifo={:X}, num_entries={:X}, flags={:X}", params.address, params.num_entries, params.flags); - std::vector<Tegra::CommandListHeader> entries(params.num_entries); + Tegra::CommandList entries(params.num_entries); Memory::ReadBlock(params.address, entries.data(), params.num_entries * sizeof(Tegra::CommandListHeader)); - Core::System::GetInstance().GPU().ProcessCommandLists(entries); + PushGPUEntries(std::move(entries)); params.fence_out.id = 0; params.fence_out.value = 0; |