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