|
|
|
@ -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));
|
|
|
|
|
}
|
|
|
|
|