mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-11-02 13:27:52 +00:00
24e2e601d5
Because of the recent separation of GPU functionality into sync/async variants, we need to mark the destructor virtual to provide proper destruction behavior, given we use the base class within the System class. Prior to this, it was undefined behavior whether or not the destructor in the derived classes would ever execute.
37 lines
1 KiB
C++
37 lines
1 KiB
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 {
|
|
|
|
namespace GPUThread {
|
|
class ThreadManager;
|
|
} // namespace GPUThread
|
|
|
|
/// 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 PushGPUEntries(Tegra::CommandList&& entries) override;
|
|
void SwapBuffers(
|
|
std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) override;
|
|
void FlushRegion(VAddr addr, u64 size) override;
|
|
void InvalidateRegion(VAddr addr, u64 size) override;
|
|
void FlushAndInvalidateRegion(VAddr addr, u64 size) override;
|
|
|
|
private:
|
|
GPUThread::ThreadManager gpu_thread;
|
|
};
|
|
|
|
} // namespace VideoCommon
|