|
|
|
@ -19,7 +19,7 @@ namespace VideoCommon::GPUThread { |
|
|
|
/// Runs the GPU thread
|
|
|
|
static void RunThread(Core::System& system, VideoCore::RendererBase& renderer, |
|
|
|
Core::Frontend::GraphicsContext& context, Tegra::DmaPusher& dma_pusher, |
|
|
|
SynchState& state, Tegra::CDmaPusher& cdma_pusher) { |
|
|
|
SynchState& state) { |
|
|
|
std::string name = "yuzu:GPU"; |
|
|
|
MicroProfileOnThreadCreate(name.c_str()); |
|
|
|
SCOPE_EXIT({ MicroProfileOnThreadExit(); }); |
|
|
|
@ -46,9 +46,6 @@ static void RunThread(Core::System& system, VideoCore::RendererBase& renderer, |
|
|
|
if (auto* submit_list = std::get_if<SubmitListCommand>(&next.data)) { |
|
|
|
dma_pusher.Push(std::move(submit_list->entries)); |
|
|
|
dma_pusher.DispatchCalls(); |
|
|
|
} else if (auto* command_list = std::get_if<SubmitChCommandEntries>(&next.data)) { |
|
|
|
// NVDEC
|
|
|
|
cdma_pusher.ProcessEntries(std::move(command_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)) { |
|
|
|
@ -83,20 +80,16 @@ ThreadManager::~ThreadManager() { |
|
|
|
|
|
|
|
void ThreadManager::StartThread(VideoCore::RendererBase& renderer, |
|
|
|
Core::Frontend::GraphicsContext& context, |
|
|
|
Tegra::DmaPusher& dma_pusher, Tegra::CDmaPusher& cdma_pusher) { |
|
|
|
Tegra::DmaPusher& dma_pusher) { |
|
|
|
rasterizer = renderer.ReadRasterizer(); |
|
|
|
thread = std::thread(RunThread, std::ref(system), std::ref(renderer), std::ref(context), |
|
|
|
std::ref(dma_pusher), std::ref(state), std::ref(cdma_pusher)); |
|
|
|
std::ref(dma_pusher), std::ref(state)); |
|
|
|
} |
|
|
|
|
|
|
|
void ThreadManager::SubmitList(Tegra::CommandList&& entries) { |
|
|
|
PushCommand(SubmitListCommand(std::move(entries))); |
|
|
|
} |
|
|
|
|
|
|
|
void ThreadManager::SubmitCommandBuffer(Tegra::ChCommandHeaderList&& entries) { |
|
|
|
PushCommand(SubmitChCommandEntries(std::move(entries))); |
|
|
|
} |
|
|
|
|
|
|
|
void ThreadManager::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { |
|
|
|
PushCommand(SwapBuffersCommand(framebuffer ? std::make_optional(*framebuffer) : std::nullopt)); |
|
|
|
} |
|
|
|
|