summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_vulkan/vk_fence_manager.cpp2
-rw-r--r--src/video_core/renderer_vulkan/vk_fence_manager.h7
-rw-r--r--src/video_core/renderer_vulkan/vk_query_cache.cpp14
-rw-r--r--src/video_core/renderer_vulkan/vk_query_cache.h24
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.h2
-rw-r--r--src/video_core/renderer_vulkan/vk_scheduler.h6
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
45FenceManager::FenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_, 45FenceManager::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;
20namespace Vulkan { 20namespace Vulkan {
21 21
22class Device; 22class Device;
23class VKQueryCache; 23class QueryCache;
24class Scheduler; 24class Scheduler;
25 25
26class InnerFence : public VideoCommon::FenceBase { 26class InnerFence : public VideoCommon::FenceBase {
@@ -41,14 +41,13 @@ private:
41}; 41};
42using Fence = std::shared_ptr<InnerFence>; 42using Fence = std::shared_ptr<InnerFence>;
43 43
44using GenericFenceManager = 44using GenericFenceManager = VideoCommon::FenceManager<Fence, TextureCache, BufferCache, QueryCache>;
45 VideoCommon::FenceManager<Fence, TextureCache, BufferCache, VKQueryCache>;
46 45
47class FenceManager final : public GenericFenceManager { 46class FenceManager final : public GenericFenceManager {
48public: 47public:
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
53protected: 52protected:
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
68VKQueryCache::VKQueryCache(VideoCore::RasterizerInterface& rasterizer_, 68QueryCache::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
76VKQueryCache::~VKQueryCache() { 76QueryCache::~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
87std::pair<VkQueryPool, u32> VKQueryCache::AllocateQuery(QueryType type) { 87std::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
91void VKQueryCache::Reserve(QueryType type, std::pair<VkQueryPool, u32> query) { 91void 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
95HostCounter::HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_, 95HostCounter::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 {
22class CachedQuery; 22class CachedQuery;
23class Device; 23class Device;
24class HostCounter; 24class HostCounter;
25class VKQueryCache; 25class QueryCache;
26class Scheduler; 26class Scheduler;
27 27
28using CounterStream = VideoCommon::CounterStreamBase<VKQueryCache, HostCounter>; 28using CounterStream = VideoCommon::CounterStreamBase<QueryCache, HostCounter>;
29 29
30class QueryPool final : public ResourcePool { 30class QueryPool final : public ResourcePool {
31public: 31public:
@@ -49,13 +49,13 @@ private:
49 std::vector<bool> usage; 49 std::vector<bool> usage;
50}; 50};
51 51
52class VKQueryCache final 52class QueryCache final
53 : public VideoCommon::QueryCacheBase<VKQueryCache, CachedQuery, CounterStream, HostCounter> { 53 : public VideoCommon::QueryCacheBase<QueryCache, CachedQuery, CounterStream, HostCounter> {
54public: 54public:
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
78class HostCounter final : public VideoCommon::HostCounterBase<VKQueryCache, HostCounter> { 78class HostCounter final : public VideoCommon::HostCounterBase<QueryCache, HostCounter> {
79public: 79public:
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:
86private: 86private:
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
95class CachedQuery : public VideoCommon::CachedQueryBase<HostCounter> { 95class CachedQuery : public VideoCommon::CachedQueryBase<HostCounter> {
96public: 96public:
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;
22class Framebuffer; 22class Framebuffer;
23class GraphicsPipeline; 23class GraphicsPipeline;
24class StateTracker; 24class StateTracker;
25class VKQueryCache; 25class 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