diff options
| author | 2020-10-30 23:17:05 -0700 | |
|---|---|---|
| committer | 2020-11-01 01:52:38 -0700 | |
| commit | 848bdf8a40aa31f1525e7326225f0f9fc3126d4d (patch) | |
| tree | 66aa1026ec70c9cddb0b81e353f1a960aa080361 | |
| parent | core: Initialize GPU before services. (diff) | |
| download | yuzu-848bdf8a40aa31f1525e7326225f0f9fc3126d4d.tar.gz yuzu-848bdf8a40aa31f1525e7326225f0f9fc3126d4d.tar.xz yuzu-848bdf8a40aa31f1525e7326225f0f9fc3126d4d.zip | |
fixup! hle service: nvdrv: nvhost_gpu: Update to use SyncpointManager and other improvements.
Diffstat (limited to '')
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp | 13 | ||||
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_gpu.h | 1 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp index 2b9a8722c..152019548 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp | |||
| @@ -16,7 +16,10 @@ namespace Service::Nvidia::Devices { | |||
| 16 | 16 | ||
| 17 | nvhost_gpu::nvhost_gpu(Core::System& system, std::shared_ptr<nvmap> nvmap_dev, | 17 | nvhost_gpu::nvhost_gpu(Core::System& system, std::shared_ptr<nvmap> nvmap_dev, |
| 18 | SyncpointManager& syncpoint_manager) | 18 | SyncpointManager& syncpoint_manager) |
| 19 | : nvdevice(system), nvmap_dev(std::move(nvmap_dev)), syncpoint_manager{syncpoint_manager} {} | 19 | : nvdevice(system), nvmap_dev(std::move(nvmap_dev)), syncpoint_manager{syncpoint_manager} { |
| 20 | channel_fence.id = syncpoint_manager.AllocateSyncpoint(); | ||
| 21 | channel_fence.value = system.GPU().GetSyncpointValue(channel_fence.id); | ||
| 22 | } | ||
| 20 | 23 | ||
| 21 | nvhost_gpu::~nvhost_gpu() = default; | 24 | nvhost_gpu::~nvhost_gpu() = default; |
| 22 | 25 | ||
| @@ -129,8 +132,9 @@ u32 nvhost_gpu::AllocGPFIFOEx2(const std::vector<u8>& input, std::vector<u8>& ou | |||
| 129 | params.num_entries, params.flags, params.unk0, params.unk1, params.unk2, | 132 | params.num_entries, params.flags, params.unk0, params.unk1, params.unk2, |
| 130 | params.unk3); | 133 | params.unk3); |
| 131 | 134 | ||
| 132 | params.fence_out.id = syncpoint_manager.AllocateSyncpoint(); | 135 | channel_fence.value = system.GPU().GetSyncpointValue(channel_fence.id); |
| 133 | params.fence_out.value = syncpoint_manager.RefreshSyncpoint(params.fence_out.id); | 136 | |
| 137 | params.fence_out = channel_fence; | ||
| 134 | 138 | ||
| 135 | std::memcpy(output.data(), ¶ms, output.size()); | 139 | std::memcpy(output.data(), ¶ms, output.size()); |
| 136 | return 0; | 140 | return 0; |
| @@ -194,6 +198,9 @@ u32 nvhost_gpu::SubmitGPFIFOImpl(IoctlSubmitGpfifo& params, std::vector<u8>& out | |||
| 194 | params.num_entries, params.flags.raw); | 198 | params.num_entries, params.flags.raw); |
| 195 | 199 | ||
| 196 | auto& gpu = system.GPU(); | 200 | auto& gpu = system.GPU(); |
| 201 | |||
| 202 | params.fence_out.id = channel_fence.id; | ||
| 203 | |||
| 197 | if (params.flags.add_wait.Value() && | 204 | if (params.flags.add_wait.Value() && |
| 198 | !syncpoint_manager.IsSyncpointExpired(params.fence_out.id, params.fence_out.value)) { | 205 | !syncpoint_manager.IsSyncpointExpired(params.fence_out.id, params.fence_out.value)) { |
| 199 | gpu.PushGPUEntries(Tegra::CommandList{BuildWaitCommandList(params.fence_out)}); | 206 | gpu.PushGPUEntries(Tegra::CommandList{BuildWaitCommandList(params.fence_out)}); |
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.h b/src/core/hle/service/nvdrv/devices/nvhost_gpu.h index 80054510f..a252fc06d 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.h +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.h | |||
| @@ -212,6 +212,7 @@ private: | |||
| 212 | 212 | ||
| 213 | std::shared_ptr<nvmap> nvmap_dev; | 213 | std::shared_ptr<nvmap> nvmap_dev; |
| 214 | SyncpointManager& syncpoint_manager; | 214 | SyncpointManager& syncpoint_manager; |
| 215 | Fence channel_fence; | ||
| 215 | }; | 216 | }; |
| 216 | 217 | ||
| 217 | } // namespace Service::Nvidia::Devices | 218 | } // namespace Service::Nvidia::Devices |