summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_fence_manager.h
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_fence_manager.h
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_fence_manager.h')
-rw-r--r--src/video_core/renderer_opengl/gl_fence_manager.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_fence_manager.h b/src/video_core/renderer_opengl/gl_fence_manager.h
new file mode 100644
index 000000000..3cfa8b1d0
--- /dev/null
+++ b/src/video_core/renderer_opengl/gl_fence_manager.h
@@ -0,0 +1,47 @@
+// Copyright 2020 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <memory>
+#include <glad/glad.h>
+
+#include "common/common_types.h"
+#include "video_core/fence_manager.h"
+#include "video_core/renderer_opengl/gl_resource_manager.h"
+#include "video_core/renderer_opengl/gl_texture_cache.h"
+
+namespace OpenGL {
+
+class GLInnerFence : public VideoCommon::FenceBase {
+public:
+ GLInnerFence(GPUVAddr address, u32 payload);
+ ~GLInnerFence();
+
+ void Queue();
+
+ bool IsSignaled() const;
+
+ void Wait();
+
+private:
+ OGLSync sync_object;
+};
+
+using Fence = std::shared_ptr<GLInnerFence>;
+using GenericFenceManager = VideoCommon::FenceManager<Fence, TextureCacheOpenGL>;
+
+class FenceManagerOpenGL final : public GenericFenceManager {
+public:
+ FenceManagerOpenGL(Core::System& system, VideoCore::RasterizerInterface& rasterizer,
+ TextureCacheOpenGL& texture_cache);
+
+protected:
+ Fence CreateFence(GPUVAddr addr, u32 value) override;
+ void QueueFence(Fence& fence) override;
+ bool IsFenceSignaled(Fence& fence) override;
+ void WaitFence(Fence& fence) override;
+};
+
+} // namespace OpenGL