diff options
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_fence_manager.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_fence_manager.h | 7 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_query_cache.cpp | 14 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_query_cache.h | 24 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.h | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_scheduler.h | 6 |
6 files changed, 27 insertions, 28 deletions
diff --git a/src/video_core/renderer_vulkan/vk_fence_manager.cpp b/src/video_core/renderer_vulkan/vk_fence_manager.cpp index 354341923..c249b34d4 100644 --- a/src/video_core/renderer_vulkan/vk_fence_manager.cpp +++ b/src/video_core/renderer_vulkan/vk_fence_manager.cpp | |||
| @@ -44,7 +44,7 @@ void InnerFence::Wait() { | |||
| 44 | 44 | ||
| 45 | FenceManager::FenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_, | 45 | FenceManager::FenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_, |
| 46 | TextureCache& texture_cache_, BufferCache& buffer_cache_, | 46 | TextureCache& texture_cache_, BufferCache& buffer_cache_, |
| 47 | VKQueryCache& query_cache_, const Device& device_, Scheduler& scheduler_) | 47 | QueryCache& query_cache_, const Device& device_, Scheduler& scheduler_) |
| 48 | : GenericFenceManager{rasterizer_, gpu_, texture_cache_, buffer_cache_, query_cache_}, | 48 | : GenericFenceManager{rasterizer_, gpu_, texture_cache_, buffer_cache_, query_cache_}, |
| 49 | scheduler{scheduler_} {} | 49 | scheduler{scheduler_} {} |
| 50 | 50 | ||
diff --git a/src/video_core/renderer_vulkan/vk_fence_manager.h b/src/video_core/renderer_vulkan/vk_fence_manager.h index 01f69cbcc..7c0bbd80a 100644 --- a/src/video_core/renderer_vulkan/vk_fence_manager.h +++ b/src/video_core/renderer_vulkan/vk_fence_manager.h | |||
| @@ -20,7 +20,7 @@ class RasterizerInterface; | |||
| 20 | namespace Vulkan { | 20 | namespace Vulkan { |
| 21 | 21 | ||
| 22 | class Device; | 22 | class Device; |
| 23 | class VKQueryCache; | 23 | class QueryCache; |
| 24 | class Scheduler; | 24 | class Scheduler; |
| 25 | 25 | ||
| 26 | class InnerFence : public VideoCommon::FenceBase { | 26 | class InnerFence : public VideoCommon::FenceBase { |
| @@ -41,14 +41,13 @@ private: | |||
| 41 | }; | 41 | }; |
| 42 | using Fence = std::shared_ptr<InnerFence>; | 42 | using Fence = std::shared_ptr<InnerFence>; |
| 43 | 43 | ||
| 44 | using GenericFenceManager = | 44 | using GenericFenceManager = VideoCommon::FenceManager<Fence, TextureCache, BufferCache, QueryCache>; |
| 45 | VideoCommon::FenceManager<Fence, TextureCache, BufferCache, VKQueryCache>; | ||
| 46 | 45 | ||
| 47 | class FenceManager final : public GenericFenceManager { | 46 | class FenceManager final : public GenericFenceManager { |
| 48 | public: | 47 | public: |
| 49 | explicit FenceManager(VideoCore::RasterizerInterface& rasterizer, Tegra::GPU& gpu, | 48 | explicit FenceManager(VideoCore::RasterizerInterface& rasterizer, Tegra::GPU& gpu, |
| 50 | TextureCache& texture_cache, BufferCache& buffer_cache, | 49 | TextureCache& texture_cache, BufferCache& buffer_cache, |
| 51 | VKQueryCache& query_cache, const Device& device, Scheduler& scheduler); | 50 | QueryCache& query_cache, const Device& device, Scheduler& scheduler); |
| 52 | 51 | ||
| 53 | protected: | 52 | protected: |
| 54 | Fence CreateFence(u32 value, bool is_stubbed) override; | 53 | Fence CreateFence(u32 value, bool is_stubbed) override; |
diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp index c0410aebd..2b859c6b8 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp | |||
| @@ -65,15 +65,15 @@ void QueryPool::Reserve(std::pair<VkQueryPool, u32> query) { | |||
| 65 | usage[pool_index * GROW_STEP + static_cast<std::ptrdiff_t>(query.second)] = false; | 65 | usage[pool_index * GROW_STEP + static_cast<std::ptrdiff_t>(query.second)] = false; |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | VKQueryCache::VKQueryCache(VideoCore::RasterizerInterface& rasterizer_, | 68 | QueryCache::QueryCache(VideoCore::RasterizerInterface& rasterizer_, |
| 69 | Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_, | 69 | Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_, |
| 70 | const Device& device_, Scheduler& scheduler_) | 70 | const Device& device_, Scheduler& scheduler_) |
| 71 | : QueryCacheBase{rasterizer_, maxwell3d_, gpu_memory_}, device{device_}, scheduler{scheduler_}, | 71 | : QueryCacheBase{rasterizer_, maxwell3d_, gpu_memory_}, device{device_}, scheduler{scheduler_}, |
| 72 | query_pools{ | 72 | query_pools{ |
| 73 | QueryPool{device_, scheduler_, QueryType::SamplesPassed}, | 73 | QueryPool{device_, scheduler_, QueryType::SamplesPassed}, |
| 74 | } {} | 74 | } {} |
| 75 | 75 | ||
| 76 | VKQueryCache::~VKQueryCache() { | 76 | QueryCache::~QueryCache() { |
| 77 | // TODO(Rodrigo): This is a hack to destroy all HostCounter instances before the base class | 77 | // TODO(Rodrigo): This is a hack to destroy all HostCounter instances before the base class |
| 78 | // destructor is called. The query cache should be redesigned to have a proper ownership model | 78 | // destructor is called. The query cache should be redesigned to have a proper ownership model |
| 79 | // instead of using shared pointers. | 79 | // instead of using shared pointers. |
| @@ -84,15 +84,15 @@ VKQueryCache::~VKQueryCache() { | |||
| 84 | } | 84 | } |
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | std::pair<VkQueryPool, u32> VKQueryCache::AllocateQuery(QueryType type) { | 87 | std::pair<VkQueryPool, u32> QueryCache::AllocateQuery(QueryType type) { |
| 88 | return query_pools[static_cast<std::size_t>(type)].Commit(); | 88 | return query_pools[static_cast<std::size_t>(type)].Commit(); |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | void VKQueryCache::Reserve(QueryType type, std::pair<VkQueryPool, u32> query) { | 91 | void QueryCache::Reserve(QueryType type, std::pair<VkQueryPool, u32> query) { |
| 92 | query_pools[static_cast<std::size_t>(type)].Reserve(query); | 92 | query_pools[static_cast<std::size_t>(type)].Reserve(query); |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | HostCounter::HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_, | 95 | HostCounter::HostCounter(QueryCache& cache_, std::shared_ptr<HostCounter> dependency_, |
| 96 | QueryType type_) | 96 | QueryType type_) |
| 97 | : HostCounterBase{std::move(dependency_)}, cache{cache_}, type{type_}, | 97 | : HostCounterBase{std::move(dependency_)}, cache{cache_}, type{type_}, |
| 98 | query{cache_.AllocateQuery(type_)}, tick{cache_.GetScheduler().CurrentTick()} { | 98 | query{cache_.AllocateQuery(type_)}, tick{cache_.GetScheduler().CurrentTick()} { |
diff --git a/src/video_core/renderer_vulkan/vk_query_cache.h b/src/video_core/renderer_vulkan/vk_query_cache.h index 171a9c65f..b0d86c4f8 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.h +++ b/src/video_core/renderer_vulkan/vk_query_cache.h | |||
| @@ -22,10 +22,10 @@ namespace Vulkan { | |||
| 22 | class CachedQuery; | 22 | class CachedQuery; |
| 23 | class Device; | 23 | class Device; |
| 24 | class HostCounter; | 24 | class HostCounter; |
| 25 | class VKQueryCache; | 25 | class QueryCache; |
| 26 | class Scheduler; | 26 | class Scheduler; |
| 27 | 27 | ||
| 28 | using CounterStream = VideoCommon::CounterStreamBase<VKQueryCache, HostCounter>; | 28 | using CounterStream = VideoCommon::CounterStreamBase<QueryCache, HostCounter>; |
| 29 | 29 | ||
| 30 | class QueryPool final : public ResourcePool { | 30 | class QueryPool final : public ResourcePool { |
| 31 | public: | 31 | public: |
| @@ -49,13 +49,13 @@ private: | |||
| 49 | std::vector<bool> usage; | 49 | std::vector<bool> usage; |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | class VKQueryCache final | 52 | class QueryCache final |
| 53 | : public VideoCommon::QueryCacheBase<VKQueryCache, CachedQuery, CounterStream, HostCounter> { | 53 | : public VideoCommon::QueryCacheBase<QueryCache, CachedQuery, CounterStream, HostCounter> { |
| 54 | public: | 54 | public: |
| 55 | explicit VKQueryCache(VideoCore::RasterizerInterface& rasterizer_, | 55 | explicit QueryCache(VideoCore::RasterizerInterface& rasterizer_, |
| 56 | Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_, | 56 | Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_, |
| 57 | const Device& device_, Scheduler& scheduler_); | 57 | const Device& device_, Scheduler& scheduler_); |
| 58 | ~VKQueryCache(); | 58 | ~QueryCache(); |
| 59 | 59 | ||
| 60 | std::pair<VkQueryPool, u32> AllocateQuery(VideoCore::QueryType type); | 60 | std::pair<VkQueryPool, u32> AllocateQuery(VideoCore::QueryType type); |
| 61 | 61 | ||
| @@ -75,9 +75,9 @@ private: | |||
| 75 | std::array<QueryPool, VideoCore::NumQueryTypes> query_pools; | 75 | std::array<QueryPool, VideoCore::NumQueryTypes> query_pools; |
| 76 | }; | 76 | }; |
| 77 | 77 | ||
| 78 | class HostCounter final : public VideoCommon::HostCounterBase<VKQueryCache, HostCounter> { | 78 | class HostCounter final : public VideoCommon::HostCounterBase<QueryCache, HostCounter> { |
| 79 | public: | 79 | public: |
| 80 | explicit HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_, | 80 | explicit HostCounter(QueryCache& cache_, std::shared_ptr<HostCounter> dependency_, |
| 81 | VideoCore::QueryType type_); | 81 | VideoCore::QueryType type_); |
| 82 | ~HostCounter(); | 82 | ~HostCounter(); |
| 83 | 83 | ||
| @@ -86,7 +86,7 @@ public: | |||
| 86 | private: | 86 | private: |
| 87 | u64 BlockingQuery() const override; | 87 | u64 BlockingQuery() const override; |
| 88 | 88 | ||
| 89 | VKQueryCache& cache; | 89 | QueryCache& cache; |
| 90 | const VideoCore::QueryType type; | 90 | const VideoCore::QueryType type; |
| 91 | const std::pair<VkQueryPool, u32> query; | 91 | const std::pair<VkQueryPool, u32> query; |
| 92 | const u64 tick; | 92 | const u64 tick; |
| @@ -94,7 +94,7 @@ private: | |||
| 94 | 94 | ||
| 95 | class CachedQuery : public VideoCommon::CachedQueryBase<HostCounter> { | 95 | class CachedQuery : public VideoCommon::CachedQueryBase<HostCounter> { |
| 96 | public: | 96 | public: |
| 97 | explicit CachedQuery(VKQueryCache&, VideoCore::QueryType, VAddr cpu_addr_, u8* host_ptr_) | 97 | explicit CachedQuery(QueryCache&, VideoCore::QueryType, VAddr cpu_addr_, u8* host_ptr_) |
| 98 | : CachedQueryBase{cpu_addr_, host_ptr_} {} | 98 | : CachedQueryBase{cpu_addr_, host_ptr_} {} |
| 99 | }; | 99 | }; |
| 100 | 100 | ||
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index b1c09606e..29faaac50 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h | |||
| @@ -156,7 +156,7 @@ private: | |||
| 156 | BufferCacheRuntime buffer_cache_runtime; | 156 | BufferCacheRuntime buffer_cache_runtime; |
| 157 | BufferCache buffer_cache; | 157 | BufferCache buffer_cache; |
| 158 | PipelineCache pipeline_cache; | 158 | PipelineCache pipeline_cache; |
| 159 | VKQueryCache query_cache; | 159 | QueryCache query_cache; |
| 160 | AccelerateDMA accelerate_dma; | 160 | AccelerateDMA accelerate_dma; |
| 161 | FenceManager fence_manager; | 161 | FenceManager fence_manager; |
| 162 | 162 | ||
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h index 49e2b33d3..c04aad08f 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.h +++ b/src/video_core/renderer_vulkan/vk_scheduler.h | |||
| @@ -22,7 +22,7 @@ class Device; | |||
| 22 | class Framebuffer; | 22 | class Framebuffer; |
| 23 | class GraphicsPipeline; | 23 | class GraphicsPipeline; |
| 24 | class StateTracker; | 24 | class StateTracker; |
| 25 | class VKQueryCache; | 25 | class QueryCache; |
| 26 | 26 | ||
| 27 | /// The scheduler abstracts command buffer and fence management with an interface that's able to do | 27 | /// The scheduler abstracts command buffer and fence management with an interface that's able to do |
| 28 | /// OpenGL-like operations on Vulkan command buffers. | 28 | /// OpenGL-like operations on Vulkan command buffers. |
| @@ -61,7 +61,7 @@ public: | |||
| 61 | void InvalidateState(); | 61 | void InvalidateState(); |
| 62 | 62 | ||
| 63 | /// Assigns the query cache. | 63 | /// Assigns the query cache. |
| 64 | void SetQueryCache(VKQueryCache& query_cache_) { | 64 | void SetQueryCache(QueryCache& query_cache_) { |
| 65 | query_cache = &query_cache_; | 65 | query_cache = &query_cache_; |
| 66 | } | 66 | } |
| 67 | 67 | ||
| @@ -212,7 +212,7 @@ private: | |||
| 212 | std::unique_ptr<MasterSemaphore> master_semaphore; | 212 | std::unique_ptr<MasterSemaphore> master_semaphore; |
| 213 | std::unique_ptr<CommandPool> command_pool; | 213 | std::unique_ptr<CommandPool> command_pool; |
| 214 | 214 | ||
| 215 | VKQueryCache* query_cache = nullptr; | 215 | QueryCache* query_cache = nullptr; |
| 216 | 216 | ||
| 217 | vk::CommandBuffer current_cmdbuf; | 217 | vk::CommandBuffer current_cmdbuf; |
| 218 | 218 | ||