mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-11-03 20:24:43 +01:00 
			
		
		
		
	video_core: Replace VKQueryCache with QueryCache
This commit is contained in:
		
							parent
							
								
									9775fae4eb
								
							
						
					
					
						commit
						a5e419535f
					
				@ -44,7 +44,7 @@ void InnerFence::Wait() {
 | 
			
		||||
 | 
			
		||||
FenceManager::FenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_,
 | 
			
		||||
                           TextureCache& texture_cache_, BufferCache& buffer_cache_,
 | 
			
		||||
                           VKQueryCache& query_cache_, const Device& device_, Scheduler& scheduler_)
 | 
			
		||||
                           QueryCache& query_cache_, const Device& device_, Scheduler& scheduler_)
 | 
			
		||||
    : GenericFenceManager{rasterizer_, gpu_, texture_cache_, buffer_cache_, query_cache_},
 | 
			
		||||
      scheduler{scheduler_} {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ class RasterizerInterface;
 | 
			
		||||
namespace Vulkan {
 | 
			
		||||
 | 
			
		||||
class Device;
 | 
			
		||||
class VKQueryCache;
 | 
			
		||||
class QueryCache;
 | 
			
		||||
class Scheduler;
 | 
			
		||||
 | 
			
		||||
class InnerFence : public VideoCommon::FenceBase {
 | 
			
		||||
@ -41,14 +41,13 @@ private:
 | 
			
		||||
};
 | 
			
		||||
using Fence = std::shared_ptr<InnerFence>;
 | 
			
		||||
 | 
			
		||||
using GenericFenceManager =
 | 
			
		||||
    VideoCommon::FenceManager<Fence, TextureCache, BufferCache, VKQueryCache>;
 | 
			
		||||
using GenericFenceManager = VideoCommon::FenceManager<Fence, TextureCache, BufferCache, QueryCache>;
 | 
			
		||||
 | 
			
		||||
class FenceManager final : public GenericFenceManager {
 | 
			
		||||
public:
 | 
			
		||||
    explicit FenceManager(VideoCore::RasterizerInterface& rasterizer, Tegra::GPU& gpu,
 | 
			
		||||
                          TextureCache& texture_cache, BufferCache& buffer_cache,
 | 
			
		||||
                          VKQueryCache& query_cache, const Device& device, Scheduler& scheduler);
 | 
			
		||||
                          QueryCache& query_cache, const Device& device, Scheduler& scheduler);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    Fence CreateFence(u32 value, bool is_stubbed) override;
 | 
			
		||||
 | 
			
		||||
@ -65,15 +65,15 @@ void QueryPool::Reserve(std::pair<VkQueryPool, u32> query) {
 | 
			
		||||
    usage[pool_index * GROW_STEP + static_cast<std::ptrdiff_t>(query.second)] = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VKQueryCache::VKQueryCache(VideoCore::RasterizerInterface& rasterizer_,
 | 
			
		||||
                           Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
 | 
			
		||||
                           const Device& device_, Scheduler& scheduler_)
 | 
			
		||||
QueryCache::QueryCache(VideoCore::RasterizerInterface& rasterizer_,
 | 
			
		||||
                       Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
 | 
			
		||||
                       const Device& device_, Scheduler& scheduler_)
 | 
			
		||||
    : QueryCacheBase{rasterizer_, maxwell3d_, gpu_memory_}, device{device_}, scheduler{scheduler_},
 | 
			
		||||
      query_pools{
 | 
			
		||||
          QueryPool{device_, scheduler_, QueryType::SamplesPassed},
 | 
			
		||||
      } {}
 | 
			
		||||
 | 
			
		||||
VKQueryCache::~VKQueryCache() {
 | 
			
		||||
QueryCache::~QueryCache() {
 | 
			
		||||
    // TODO(Rodrigo): This is a hack to destroy all HostCounter instances before the base class
 | 
			
		||||
    // destructor is called. The query cache should be redesigned to have a proper ownership model
 | 
			
		||||
    // instead of using shared pointers.
 | 
			
		||||
@ -84,15 +84,15 @@ VKQueryCache::~VKQueryCache() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::pair<VkQueryPool, u32> VKQueryCache::AllocateQuery(QueryType type) {
 | 
			
		||||
std::pair<VkQueryPool, u32> QueryCache::AllocateQuery(QueryType type) {
 | 
			
		||||
    return query_pools[static_cast<std::size_t>(type)].Commit();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void VKQueryCache::Reserve(QueryType type, std::pair<VkQueryPool, u32> query) {
 | 
			
		||||
void QueryCache::Reserve(QueryType type, std::pair<VkQueryPool, u32> query) {
 | 
			
		||||
    query_pools[static_cast<std::size_t>(type)].Reserve(query);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HostCounter::HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_,
 | 
			
		||||
HostCounter::HostCounter(QueryCache& cache_, std::shared_ptr<HostCounter> dependency_,
 | 
			
		||||
                         QueryType type_)
 | 
			
		||||
    : HostCounterBase{std::move(dependency_)}, cache{cache_}, type{type_},
 | 
			
		||||
      query{cache_.AllocateQuery(type_)}, tick{cache_.GetScheduler().CurrentTick()} {
 | 
			
		||||
 | 
			
		||||
@ -22,10 +22,10 @@ namespace Vulkan {
 | 
			
		||||
class CachedQuery;
 | 
			
		||||
class Device;
 | 
			
		||||
class HostCounter;
 | 
			
		||||
class VKQueryCache;
 | 
			
		||||
class QueryCache;
 | 
			
		||||
class Scheduler;
 | 
			
		||||
 | 
			
		||||
using CounterStream = VideoCommon::CounterStreamBase<VKQueryCache, HostCounter>;
 | 
			
		||||
using CounterStream = VideoCommon::CounterStreamBase<QueryCache, HostCounter>;
 | 
			
		||||
 | 
			
		||||
class QueryPool final : public ResourcePool {
 | 
			
		||||
public:
 | 
			
		||||
@ -49,13 +49,13 @@ private:
 | 
			
		||||
    std::vector<bool> usage;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class VKQueryCache final
 | 
			
		||||
    : public VideoCommon::QueryCacheBase<VKQueryCache, CachedQuery, CounterStream, HostCounter> {
 | 
			
		||||
class QueryCache final
 | 
			
		||||
    : public VideoCommon::QueryCacheBase<QueryCache, CachedQuery, CounterStream, HostCounter> {
 | 
			
		||||
public:
 | 
			
		||||
    explicit VKQueryCache(VideoCore::RasterizerInterface& rasterizer_,
 | 
			
		||||
                          Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
 | 
			
		||||
                          const Device& device_, Scheduler& scheduler_);
 | 
			
		||||
    ~VKQueryCache();
 | 
			
		||||
    explicit QueryCache(VideoCore::RasterizerInterface& rasterizer_,
 | 
			
		||||
                        Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
 | 
			
		||||
                        const Device& device_, Scheduler& scheduler_);
 | 
			
		||||
    ~QueryCache();
 | 
			
		||||
 | 
			
		||||
    std::pair<VkQueryPool, u32> AllocateQuery(VideoCore::QueryType type);
 | 
			
		||||
 | 
			
		||||
@ -75,9 +75,9 @@ private:
 | 
			
		||||
    std::array<QueryPool, VideoCore::NumQueryTypes> query_pools;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class HostCounter final : public VideoCommon::HostCounterBase<VKQueryCache, HostCounter> {
 | 
			
		||||
class HostCounter final : public VideoCommon::HostCounterBase<QueryCache, HostCounter> {
 | 
			
		||||
public:
 | 
			
		||||
    explicit HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_,
 | 
			
		||||
    explicit HostCounter(QueryCache& cache_, std::shared_ptr<HostCounter> dependency_,
 | 
			
		||||
                         VideoCore::QueryType type_);
 | 
			
		||||
    ~HostCounter();
 | 
			
		||||
 | 
			
		||||
@ -86,7 +86,7 @@ public:
 | 
			
		||||
private:
 | 
			
		||||
    u64 BlockingQuery() const override;
 | 
			
		||||
 | 
			
		||||
    VKQueryCache& cache;
 | 
			
		||||
    QueryCache& cache;
 | 
			
		||||
    const VideoCore::QueryType type;
 | 
			
		||||
    const std::pair<VkQueryPool, u32> query;
 | 
			
		||||
    const u64 tick;
 | 
			
		||||
@ -94,7 +94,7 @@ private:
 | 
			
		||||
 | 
			
		||||
class CachedQuery : public VideoCommon::CachedQueryBase<HostCounter> {
 | 
			
		||||
public:
 | 
			
		||||
    explicit CachedQuery(VKQueryCache&, VideoCore::QueryType, VAddr cpu_addr_, u8* host_ptr_)
 | 
			
		||||
    explicit CachedQuery(QueryCache&, VideoCore::QueryType, VAddr cpu_addr_, u8* host_ptr_)
 | 
			
		||||
        : CachedQueryBase{cpu_addr_, host_ptr_} {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -156,7 +156,7 @@ private:
 | 
			
		||||
    BufferCacheRuntime buffer_cache_runtime;
 | 
			
		||||
    BufferCache buffer_cache;
 | 
			
		||||
    PipelineCache pipeline_cache;
 | 
			
		||||
    VKQueryCache query_cache;
 | 
			
		||||
    QueryCache query_cache;
 | 
			
		||||
    AccelerateDMA accelerate_dma;
 | 
			
		||||
    FenceManager fence_manager;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ class Device;
 | 
			
		||||
class Framebuffer;
 | 
			
		||||
class GraphicsPipeline;
 | 
			
		||||
class StateTracker;
 | 
			
		||||
class VKQueryCache;
 | 
			
		||||
class QueryCache;
 | 
			
		||||
 | 
			
		||||
/// The scheduler abstracts command buffer and fence management with an interface that's able to do
 | 
			
		||||
/// OpenGL-like operations on Vulkan command buffers.
 | 
			
		||||
@ -61,7 +61,7 @@ public:
 | 
			
		||||
    void InvalidateState();
 | 
			
		||||
 | 
			
		||||
    /// Assigns the query cache.
 | 
			
		||||
    void SetQueryCache(VKQueryCache& query_cache_) {
 | 
			
		||||
    void SetQueryCache(QueryCache& query_cache_) {
 | 
			
		||||
        query_cache = &query_cache_;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -212,7 +212,7 @@ private:
 | 
			
		||||
    std::unique_ptr<MasterSemaphore> master_semaphore;
 | 
			
		||||
    std::unique_ptr<CommandPool> command_pool;
 | 
			
		||||
 | 
			
		||||
    VKQueryCache* query_cache = nullptr;
 | 
			
		||||
    QueryCache* query_cache = nullptr;
 | 
			
		||||
 | 
			
		||||
    vk::CommandBuffer current_cmdbuf;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user