diff options
Diffstat (limited to 'src/video_core/gpu_thread.h')
| -rw-r--r-- | src/video_core/gpu_thread.h | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/src/video_core/gpu_thread.h b/src/video_core/gpu_thread.h index 11a648f38..91bada925 100644 --- a/src/video_core/gpu_thread.h +++ b/src/video_core/gpu_thread.h | |||
| @@ -33,9 +33,6 @@ class RendererBase; | |||
| 33 | 33 | ||
| 34 | namespace VideoCommon::GPUThread { | 34 | namespace VideoCommon::GPUThread { |
| 35 | 35 | ||
| 36 | /// Command to signal to the GPU thread that processing has ended | ||
| 37 | struct EndProcessingCommand final {}; | ||
| 38 | |||
| 39 | /// Command to signal to the GPU thread that a command list is ready for processing | 36 | /// Command to signal to the GPU thread that a command list is ready for processing |
| 40 | struct SubmitListCommand final { | 37 | struct SubmitListCommand final { |
| 41 | explicit SubmitListCommand(Tegra::CommandList&& entries_) : entries{std::move(entries_)} {} | 38 | explicit SubmitListCommand(Tegra::CommandList&& entries_) : entries{std::move(entries_)} {} |
| @@ -83,7 +80,7 @@ struct OnCommandListEndCommand final {}; | |||
| 83 | struct GPUTickCommand final {}; | 80 | struct GPUTickCommand final {}; |
| 84 | 81 | ||
| 85 | using CommandData = | 82 | using CommandData = |
| 86 | std::variant<EndProcessingCommand, SubmitListCommand, SwapBuffersCommand, FlushRegionCommand, | 83 | std::variant<std::monostate, SubmitListCommand, SwapBuffersCommand, FlushRegionCommand, |
| 87 | InvalidateRegionCommand, FlushAndInvalidateRegionCommand, OnCommandListEndCommand, | 84 | InvalidateRegionCommand, FlushAndInvalidateRegionCommand, OnCommandListEndCommand, |
| 88 | GPUTickCommand>; | 85 | GPUTickCommand>; |
| 89 | 86 | ||
| @@ -100,14 +97,12 @@ struct CommandDataContainer { | |||
| 100 | 97 | ||
| 101 | /// Struct used to synchronize the GPU thread | 98 | /// Struct used to synchronize the GPU thread |
| 102 | struct SynchState final { | 99 | struct SynchState final { |
| 103 | std::atomic_bool is_running{true}; | 100 | using CommandQueue = Common::SPSCQueue<CommandDataContainer, true>; |
| 104 | |||
| 105 | using CommandQueue = Common::SPSCQueue<CommandDataContainer>; | ||
| 106 | std::mutex write_lock; | 101 | std::mutex write_lock; |
| 107 | CommandQueue queue; | 102 | CommandQueue queue; |
| 108 | u64 last_fence{}; | 103 | u64 last_fence{}; |
| 109 | std::atomic<u64> signaled_fence{}; | 104 | std::atomic<u64> signaled_fence{}; |
| 110 | std::condition_variable cv; | 105 | std::condition_variable_any cv; |
| 111 | }; | 106 | }; |
| 112 | 107 | ||
| 113 | /// Class used to manage the GPU thread | 108 | /// Class used to manage the GPU thread |
| @@ -149,7 +144,7 @@ private: | |||
| 149 | VideoCore::RasterizerInterface* rasterizer = nullptr; | 144 | VideoCore::RasterizerInterface* rasterizer = nullptr; |
| 150 | 145 | ||
| 151 | SynchState state; | 146 | SynchState state; |
| 152 | std::thread thread; | 147 | std::jthread thread; |
| 153 | }; | 148 | }; |
| 154 | 149 | ||
| 155 | } // namespace VideoCommon::GPUThread | 150 | } // namespace VideoCommon::GPUThread |