6d0551196d
Like with CPU emulation, we generally don't want to fire off the threads immediately after the relevant classes are initialized, we want to do this after all necessary data is done loading first. This splits the thread creation into its own interface member function to allow controlling when these threads in particular get created.
35 lines
1009 B
C++
35 lines
1009 B
C++
// Copyright 2019 yuzu Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include "video_core/gpu.h"
|
|
#include "video_core/gpu_thread.h"
|
|
|
|
namespace VideoCore {
|
|
class RendererBase;
|
|
} // namespace VideoCore
|
|
|
|
namespace VideoCommon {
|
|
|
|
/// Implementation of GPU interface that runs the GPU asynchronously
|
|
class GPUAsynch : public Tegra::GPU {
|
|
public:
|
|
explicit GPUAsynch(Core::System& system, VideoCore::RendererBase& renderer);
|
|
~GPUAsynch() override;
|
|
|
|
void Start() override;
|
|
void PushGPUEntries(Tegra::CommandList&& entries) override;
|
|
void SwapBuffers(
|
|
std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) override;
|
|
void FlushRegion(CacheAddr addr, u64 size) override;
|
|
void InvalidateRegion(CacheAddr addr, u64 size) override;
|
|
void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override;
|
|
|
|
private:
|
|
GPUThread::ThreadManager gpu_thread;
|
|
};
|
|
|
|
} // namespace VideoCommon
|