// Copyright 2019 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include #include "common/common_types.h" #include "video_core/query_cache.h" #include "video_core/rasterizer_interface.h" #include "video_core/renderer_opengl/gl_resource_manager.h" namespace Core { class System; } namespace OpenGL { class CachedQuery; class HostCounter; class QueryCache; class RasterizerOpenGL; using CounterStream = VideoCommon::CounterStreamBase; class QueryCache final : public VideoCommon::QueryCacheBase> { public: explicit QueryCache(Core::System& system, RasterizerOpenGL& rasterizer); ~QueryCache(); OGLQuery AllocateQuery(VideoCore::QueryType type); void Reserve(VideoCore::QueryType type, OGLQuery&& query); bool AnyCommandQueued() const noexcept; private: RasterizerOpenGL& gl_rasterizer; }; class HostCounter final : public VideoCommon::HostCounterBase { public: explicit HostCounter(QueryCache& cache, std::shared_ptr dependency, VideoCore::QueryType type); ~HostCounter(); void EndQuery(); private: u64 BlockingQuery() const override; QueryCache& cache; const VideoCore::QueryType type; OGLQuery query; }; class CachedQuery final : public VideoCommon::CachedQueryBase { public: explicit CachedQuery(QueryCache& cache, VideoCore::QueryType type, VAddr cpu_addr, u8* host_ptr); CachedQuery(CachedQuery&& rhs) noexcept; CachedQuery& operator=(CachedQuery&& rhs) noexcept; void Flush() override; private: QueryCache* cache; VideoCore::QueryType type; }; } // namespace OpenGL