summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp
index 39a58b685..2e2b0ae1c 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp
@@ -128,11 +128,9 @@ u32 nvhost_gpu::AllocateObjectContext(const std::vector<u8>& input, std::vector<
128 return 0; 128 return 0;
129} 129}
130 130
131static void PushGPUEntries(const std::vector<Tegra::CommandListHeader>& entries) { 131static void PushGPUEntries(Tegra::CommandList&& entries) {
132 auto& dma_pusher{Core::System::GetInstance().GPU().DmaPusher()}; 132 auto& dma_pusher{Core::System::GetInstance().GPU().DmaPusher()};
133 for (const auto& entry : entries) { 133 dma_pusher.Push(std::move(entries));
134 dma_pusher.Push(entry);
135 }
136 dma_pusher.DispatchCalls(); 134 dma_pusher.DispatchCalls();
137} 135}
138 136
@@ -149,11 +147,11 @@ u32 nvhost_gpu::SubmitGPFIFO(const std::vector<u8>& input, std::vector<u8>& outp
149 params.num_entries * sizeof(Tegra::CommandListHeader), 147 params.num_entries * sizeof(Tegra::CommandListHeader),
150 "Incorrect input size"); 148 "Incorrect input size");
151 149
152 std::vector<Tegra::CommandListHeader> entries(params.num_entries); 150 Tegra::CommandList entries(params.num_entries);
153 std::memcpy(entries.data(), &input[sizeof(IoctlSubmitGpfifo)], 151 std::memcpy(entries.data(), &input[sizeof(IoctlSubmitGpfifo)],
154 params.num_entries * sizeof(Tegra::CommandListHeader)); 152 params.num_entries * sizeof(Tegra::CommandListHeader));
155 153
156 PushGPUEntries(entries); 154 PushGPUEntries(std::move(entries));
157 155
158 params.fence_out.id = 0; 156 params.fence_out.id = 0;
159 params.fence_out.value = 0; 157 params.fence_out.value = 0;
@@ -170,11 +168,11 @@ u32 nvhost_gpu::KickoffPB(const std::vector<u8>& input, std::vector<u8>& output)
170 LOG_WARNING(Service_NVDRV, "(STUBBED) called, gpfifo={:X}, num_entries={:X}, flags={:X}", 168 LOG_WARNING(Service_NVDRV, "(STUBBED) called, gpfifo={:X}, num_entries={:X}, flags={:X}",
171 params.address, params.num_entries, params.flags); 169 params.address, params.num_entries, params.flags);
172 170
173 std::vector<Tegra::CommandListHeader> entries(params.num_entries); 171 Tegra::CommandList entries(params.num_entries);
174 Memory::ReadBlock(params.address, entries.data(), 172 Memory::ReadBlock(params.address, entries.data(),
175 params.num_entries * sizeof(Tegra::CommandListHeader)); 173 params.num_entries * sizeof(Tegra::CommandListHeader));
176 174
177 PushGPUEntries(entries); 175 PushGPUEntries(std::move(entries));
178 176
179 params.fence_out.id = 0; 177 params.fence_out.id = 0;
180 params.fence_out.value = 0; 178 params.fence_out.value = 0;