diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-07-28 00:40:10 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-02-14 21:27:17 +0100 |
commit | 2b58652f0897053d4da04deb586490220ab5a774 (patch) | |
tree | cb49e0b4da2297e25da1aa196bbb38d6e996d399 /src/video_core/renderer_opengl/gl_query_cache.cpp | |
parent | gl_resource_manager: Add managed query class (diff) | |
download | yuzu-2b58652f0897053d4da04deb586490220ab5a774.tar yuzu-2b58652f0897053d4da04deb586490220ab5a774.tar.gz yuzu-2b58652f0897053d4da04deb586490220ab5a774.tar.bz2 yuzu-2b58652f0897053d4da04deb586490220ab5a774.tar.lz yuzu-2b58652f0897053d4da04deb586490220ab5a774.tar.xz yuzu-2b58652f0897053d4da04deb586490220ab5a774.tar.zst yuzu-2b58652f0897053d4da04deb586490220ab5a774.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_opengl/gl_query_cache.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_query_cache.cpp b/src/video_core/renderer_opengl/gl_query_cache.cpp new file mode 100644 index 000000000..1c7dc999a --- /dev/null +++ b/src/video_core/renderer_opengl/gl_query_cache.cpp @@ -0,0 +1,59 @@ +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <glad/glad.h> + +#include "video_core/renderer_opengl/gl_query_cache.h" + +namespace OpenGL { + +HostCounter::HostCounter(GLenum target) { + query.Create(target); +} + +HostCounter::~HostCounter() = default; + +void HostCounter::UpdateState(bool enabled) { + if (enabled) { + Enable(); + } else { + Disable(); + } +} + +void HostCounter::Reset() { + counter = 0; + Disable(); +} + +u64 HostCounter::Query() { + if (!is_beginned) { + return counter; + } + Disable(); + u64 value; + glGetQueryObjectui64v(query.handle, GL_QUERY_RESULT, &value); + Enable(); + + counter += value; + return counter; +} + +void HostCounter::Enable() { + if (is_beginned) { + return; + } + is_beginned = true; + glBeginQuery(GL_SAMPLES_PASSED, query.handle); +} + +void HostCounter::Disable() { + if (!is_beginned) { + return; + } + glEndQuery(GL_SAMPLES_PASSED); + is_beginned = false; +} + +} // namespace OpenGL |