Browse Source
Merge pull request #9744 from behunin/quick-release
gpu_thread: Remove OnCommandListEndCommand
pull/15/merge
liamwhite
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
2 additions and
14 deletions
-
src/video_core/gpu.cpp
-
src/video_core/gpu_thread.cpp
-
src/video_core/gpu_thread.h
|
|
|
@ -99,7 +99,7 @@ struct GPU::Impl { |
|
|
|
|
|
|
|
/// Signal the ending of command list.
|
|
|
|
void OnCommandListEnd() { |
|
|
|
gpu_thread.OnCommandListEnd(); |
|
|
|
rasterizer->ReleaseFences(); |
|
|
|
} |
|
|
|
|
|
|
|
/// Request a host GPU memory flush from the CPU.
|
|
|
|
|
|
|
|
@ -40,8 +40,6 @@ static void RunThread(std::stop_token stop_token, Core::System& system, |
|
|
|
scheduler.Push(submit_list->channel, std::move(submit_list->entries)); |
|
|
|
} else if (const auto* data = std::get_if<SwapBuffersCommand>(&next.data)) { |
|
|
|
renderer.SwapBuffers(data->framebuffer ? &*data->framebuffer : nullptr); |
|
|
|
} else if (std::holds_alternative<OnCommandListEndCommand>(next.data)) { |
|
|
|
rasterizer->ReleaseFences(); |
|
|
|
} else if (std::holds_alternative<GPUTickCommand>(next.data)) { |
|
|
|
system.GPU().TickWork(); |
|
|
|
} else if (const auto* flush = std::get_if<FlushRegionCommand>(&next.data)) { |
|
|
|
@ -110,10 +108,6 @@ void ThreadManager::FlushAndInvalidateRegion(VAddr addr, u64 size) { |
|
|
|
rasterizer->OnCPUWrite(addr, size); |
|
|
|
} |
|
|
|
|
|
|
|
void ThreadManager::OnCommandListEnd() { |
|
|
|
PushCommand(OnCommandListEndCommand()); |
|
|
|
} |
|
|
|
|
|
|
|
u64 ThreadManager::PushCommand(CommandData&& command_data, bool block) { |
|
|
|
if (!is_async) { |
|
|
|
// In synchronous GPU mode, block the caller until the command has executed
|
|
|
|
|
|
|
|
@ -77,16 +77,12 @@ struct FlushAndInvalidateRegionCommand final { |
|
|
|
u64 size; |
|
|
|
}; |
|
|
|
|
|
|
|
/// Command called within the gpu, to schedule actions after a command list end |
|
|
|
struct OnCommandListEndCommand final {}; |
|
|
|
|
|
|
|
/// Command to make the gpu look into pending requests |
|
|
|
struct GPUTickCommand final {}; |
|
|
|
|
|
|
|
using CommandData = |
|
|
|
std::variant<std::monostate, SubmitListCommand, SwapBuffersCommand, FlushRegionCommand, |
|
|
|
InvalidateRegionCommand, FlushAndInvalidateRegionCommand, OnCommandListEndCommand, |
|
|
|
GPUTickCommand>; |
|
|
|
InvalidateRegionCommand, FlushAndInvalidateRegionCommand, GPUTickCommand>; |
|
|
|
|
|
|
|
struct CommandDataContainer { |
|
|
|
CommandDataContainer() = default; |
|
|
|
@ -134,8 +130,6 @@ public: |
|
|
|
/// Notify rasterizer that any caches of the specified region should be flushed and invalidated |
|
|
|
void FlushAndInvalidateRegion(VAddr addr, u64 size); |
|
|
|
|
|
|
|
void OnCommandListEnd(); |
|
|
|
|
|
|
|
void TickGPU(); |
|
|
|
|
|
|
|
private: |
|
|
|
|