diff options
author | bunnei <bunneidev@gmail.com> | 2019-01-24 04:17:55 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2019-03-07 03:48:57 +0100 |
commit | 7b574f406b25c02a0e0efd8b7ec13d68ecb55497 (patch) | |
tree | 375d4637d49ffe506129ce9cb679b5902328106a /src/video_core/gpu.cpp | |
parent | bootmanager: Ensure that we have a context for shader loading. (diff) | |
download | yuzu-7b574f406b25c02a0e0efd8b7ec13d68ecb55497.tar yuzu-7b574f406b25c02a0e0efd8b7ec13d68ecb55497.tar.gz yuzu-7b574f406b25c02a0e0efd8b7ec13d68ecb55497.tar.bz2 yuzu-7b574f406b25c02a0e0efd8b7ec13d68ecb55497.tar.lz yuzu-7b574f406b25c02a0e0efd8b7ec13d68ecb55497.tar.xz yuzu-7b574f406b25c02a0e0efd8b7ec13d68ecb55497.tar.zst yuzu-7b574f406b25c02a0e0efd8b7ec13d68ecb55497.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/gpu.cpp | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index b0f3310e5..0d7a052dd 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp @@ -6,12 +6,14 @@ #include "core/core.h" #include "core/core_timing.h" #include "core/memory.h" +#include "core/settings.h" #include "video_core/engines/fermi_2d.h" #include "video_core/engines/kepler_compute.h" #include "video_core/engines/kepler_memory.h" #include "video_core/engines/maxwell_3d.h" #include "video_core/engines/maxwell_dma.h" #include "video_core/gpu.h" +#include "video_core/gpu_thread.h" #include "video_core/renderer_base.h" namespace Tegra { @@ -37,6 +39,10 @@ GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer) : renderer{ren kepler_compute = std::make_unique<Engines::KeplerCompute>(*memory_manager); maxwell_dma = std::make_unique<Engines::MaxwellDMA>(system, rasterizer, *memory_manager); kepler_memory = std::make_unique<Engines::KeplerMemory>(system, rasterizer, *memory_manager); + + if (Settings::values.use_asynchronous_gpu_emulation) { + gpu_thread = std::make_unique<VideoCommon::GPUThread::ThreadManager>(renderer, *dma_pusher); + } } GPU::~GPU() = default; @@ -66,13 +72,45 @@ const DmaPusher& GPU::DmaPusher() const { } void GPU::PushGPUEntries(Tegra::CommandList&& entries) { - dma_pusher->Push(std::move(entries)); - dma_pusher->DispatchCalls(); + if (Settings::values.use_asynchronous_gpu_emulation) { + gpu_thread->SubmitList(std::move(entries)); + } else { + dma_pusher->Push(std::move(entries)); + dma_pusher->DispatchCalls(); + } } void GPU::SwapBuffers( std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) { - renderer.SwapBuffers(std::move(framebuffer)); + if (Settings::values.use_asynchronous_gpu_emulation) { + gpu_thread->SwapBuffers(std::move(framebuffer)); + } else { + renderer.SwapBuffers(std::move(framebuffer)); + } +} + +void GPU::FlushRegion(VAddr addr, u64 size) { + if (Settings::values.use_asynchronous_gpu_emulation) { + gpu_thread->FlushRegion(addr, size); + } else { + renderer.Rasterizer().FlushRegion(addr, size); + } +} + +void GPU::InvalidateRegion(VAddr addr, u64 size) { + if (Settings::values.use_asynchronous_gpu_emulation) { + gpu_thread->InvalidateRegion(addr, size); + } else { + renderer.Rasterizer().InvalidateRegion(addr, size); + } +} + +void GPU::FlushAndInvalidateRegion(VAddr addr, u64 size) { + if (Settings::values.use_asynchronous_gpu_emulation) { + gpu_thread->FlushAndInvalidateRegion(addr, size); + } else { + renderer.Rasterizer().FlushAndInvalidateRegion(addr, size); + } } u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { |