summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_rasterizer.cpp
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2020-02-17 23:10:23 +0100
committerFernando Sahmkow <fsahmkow27@gmail.com>2020-04-22 17:36:10 +0200
commit487379c593bcaf3787ede187c5d44f7923b54dc9 (patch)
treeb66c5c541a55be6d4b76b78c07be11731a7cb400 /src/video_core/renderer_opengl/gl_rasterizer.cpp
parentTextureCache: Flush linear textures after finishing rendering. (diff)
downloadyuzu-487379c593bcaf3787ede187c5d44f7923b54dc9.tar
yuzu-487379c593bcaf3787ede187c5d44f7923b54dc9.tar.gz
yuzu-487379c593bcaf3787ede187c5d44f7923b54dc9.tar.bz2
yuzu-487379c593bcaf3787ede187c5d44f7923b54dc9.tar.lz
yuzu-487379c593bcaf3787ede187c5d44f7923b54dc9.tar.xz
yuzu-487379c593bcaf3787ede187c5d44f7923b54dc9.tar.zst
yuzu-487379c593bcaf3787ede187c5d44f7923b54dc9.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 988eaeaa5..93bb33e8c 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -676,6 +676,34 @@ void RasterizerOpenGL::SyncGuestHost() {
buffer_cache.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();
+}
+
+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();
+ }
+}
+
void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size) {
if (Settings::IsGPULevelExtreme()) {
FlushRegion(addr, size);