diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-02-18 01:19:26 +0100 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-04-22 17:36:10 +0200 |
commit | 1f345ebe3a5501b50f26f0c5c21cac5d55dd79c1 (patch) | |
tree | d0c9926af3f60d35e3cf06f52e114e57fefea4b8 /src/video_core/renderer_opengl/gl_fence_manager.h | |
parent | OpenGL: Implement Fencing backend. (diff) | |
download | yuzu-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.h | 47 |
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 |