summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_rasterizer.cpp
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2020-02-18 01:19:26 +0100
committerFernando Sahmkow <fsahmkow27@gmail.com>2020-04-22 17:36:10 +0200
commit1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1 (patch)
treed0c9926af3f60d35e3cf06f52e114e57fefea4b8 /src/video_core/renderer_opengl/gl_rasterizer.cpp
parentOpenGL: Implement Fencing backend. (diff)
downloadyuzu-1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1.tar
yuzu-1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1.tar.gz
yuzu-1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1.tar.bz2
yuzu-1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1.tar.lz
yuzu-1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1.tar.xz
yuzu-1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1.tar.zst
yuzu-1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp27
1 files changed, 4 insertions, 23 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 93bb33e8c..35bed444f 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -101,7 +101,8 @@ RasterizerOpenGL::RasterizerOpenGL(Core::System& system, Core::Frontend::EmuWind
: RasterizerAccelerated{system.Memory()}, texture_cache{system, *this, device, state_tracker},
shader_cache{*this, system, emu_window, device}, query_cache{system, *this}, system{system},
screen_info{info}, program_manager{program_manager}, state_tracker{state_tracker},
- buffer_cache{*this, system, device, STREAM_BUFFER_SIZE} {
+ buffer_cache{*this, system, device, STREAM_BUFFER_SIZE}, fence_manager{system, *this,
+ texture_cache} {
CheckExtensions();
}
@@ -677,31 +678,11 @@ void RasterizerOpenGL::SyncGuestHost() {
}
void RasterizerOpenGL::SignalFence(GPUVAddr addr, u32 value) {
- if (!fences.empty()) {
- const std::pair<GPUVAddr, u32>& current_fence = fences.front();
- const auto [address, payload] = current_fence;
- texture_cache.PopAsyncFlushes();
- auto& gpu{system.GPU()};
- auto& memory_manager{gpu.MemoryManager()};
- memory_manager.Write<u32>(address, payload);
- fences.pop_front();
- }
- fences.emplace_back(addr, value);
- texture_cache.CommitAsyncFlushes();
- FlushCommands();
- SyncGuestHost();
+ fence_manager.SignalFence(addr, value);
}
void RasterizerOpenGL::ReleaseFences() {
- while (!fences.empty()) {
- const std::pair<GPUVAddr, u32>& current_fence = fences.front();
- const auto [address, payload] = current_fence;
- texture_cache.PopAsyncFlushes();
- auto& gpu{system.GPU()};
- auto& memory_manager{gpu.MemoryManager()};
- memory_manager.Write<u32>(address, payload);
- fences.pop_front();
- }
+ fence_manager.WaitPendingFences();
}
void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size) {