diff options
Diffstat (limited to 'src/video_core/query_cache.h')
| -rw-r--r-- | src/video_core/query_cache.h | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/video_core/query_cache.h b/src/video_core/query_cache.h index 889b606b3..b0ebe71b7 100644 --- a/src/video_core/query_cache.h +++ b/src/video_core/query_cache.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | #include "common/assert.h" | 18 | #include "common/assert.h" |
| 19 | #include "common/settings.h" | 19 | #include "common/settings.h" |
| 20 | #include "video_core/control/channel_state_cache.h" | ||
| 20 | #include "video_core/engines/maxwell_3d.h" | 21 | #include "video_core/engines/maxwell_3d.h" |
| 21 | #include "video_core/memory_manager.h" | 22 | #include "video_core/memory_manager.h" |
| 22 | #include "video_core/rasterizer_interface.h" | 23 | #include "video_core/rasterizer_interface.h" |
| @@ -90,13 +91,10 @@ private: | |||
| 90 | }; | 91 | }; |
| 91 | 92 | ||
| 92 | template <class QueryCache, class CachedQuery, class CounterStream, class HostCounter> | 93 | template <class QueryCache, class CachedQuery, class CounterStream, class HostCounter> |
| 93 | class QueryCacheBase { | 94 | class QueryCacheBase : public VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> { |
| 94 | public: | 95 | public: |
| 95 | explicit QueryCacheBase(VideoCore::RasterizerInterface& rasterizer_, | 96 | explicit QueryCacheBase(VideoCore::RasterizerInterface& rasterizer_) |
| 96 | Tegra::Engines::Maxwell3D& maxwell3d_, | 97 | : rasterizer{rasterizer_}, streams{{CounterStream{static_cast<QueryCache&>(*this), |
| 97 | Tegra::MemoryManager& gpu_memory_) | ||
| 98 | : rasterizer{rasterizer_}, maxwell3d{maxwell3d_}, | ||
| 99 | gpu_memory{gpu_memory_}, streams{{CounterStream{static_cast<QueryCache&>(*this), | ||
| 100 | VideoCore::QueryType::SamplesPassed}}} {} | 98 | VideoCore::QueryType::SamplesPassed}}} {} |
| 101 | 99 | ||
| 102 | void InvalidateRegion(VAddr addr, std::size_t size) { | 100 | void InvalidateRegion(VAddr addr, std::size_t size) { |
| @@ -117,13 +115,13 @@ public: | |||
| 117 | */ | 115 | */ |
| 118 | void Query(GPUVAddr gpu_addr, VideoCore::QueryType type, std::optional<u64> timestamp) { | 116 | void Query(GPUVAddr gpu_addr, VideoCore::QueryType type, std::optional<u64> timestamp) { |
| 119 | std::unique_lock lock{mutex}; | 117 | std::unique_lock lock{mutex}; |
| 120 | const std::optional<VAddr> cpu_addr = gpu_memory.GpuToCpuAddress(gpu_addr); | 118 | const std::optional<VAddr> cpu_addr = gpu_memory->GpuToCpuAddress(gpu_addr); |
| 121 | ASSERT(cpu_addr); | 119 | ASSERT(cpu_addr); |
| 122 | 120 | ||
| 123 | CachedQuery* query = TryGet(*cpu_addr); | 121 | CachedQuery* query = TryGet(*cpu_addr); |
| 124 | if (!query) { | 122 | if (!query) { |
| 125 | ASSERT_OR_EXECUTE(cpu_addr, return;); | 123 | ASSERT_OR_EXECUTE(cpu_addr, return;); |
| 126 | u8* const host_ptr = gpu_memory.GetPointer(gpu_addr); | 124 | u8* const host_ptr = gpu_memory->GetPointer(gpu_addr); |
| 127 | 125 | ||
| 128 | query = Register(type, *cpu_addr, host_ptr, timestamp.has_value()); | 126 | query = Register(type, *cpu_addr, host_ptr, timestamp.has_value()); |
| 129 | } | 127 | } |
| @@ -137,8 +135,10 @@ public: | |||
| 137 | /// Updates counters from GPU state. Expected to be called once per draw, clear or dispatch. | 135 | /// Updates counters from GPU state. Expected to be called once per draw, clear or dispatch. |
| 138 | void UpdateCounters() { | 136 | void UpdateCounters() { |
| 139 | std::unique_lock lock{mutex}; | 137 | std::unique_lock lock{mutex}; |
| 140 | const auto& regs = maxwell3d.regs; | 138 | if (maxwell3d) { |
| 141 | Stream(VideoCore::QueryType::SamplesPassed).Update(regs.samplecnt_enable); | 139 | const auto& regs = maxwell3d->regs; |
| 140 | Stream(VideoCore::QueryType::SamplesPassed).Update(regs.samplecnt_enable); | ||
| 141 | } | ||
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | /// Resets a counter to zero. It doesn't disable the query after resetting. | 144 | /// Resets a counter to zero. It doesn't disable the query after resetting. |
| @@ -264,8 +264,6 @@ private: | |||
| 264 | static constexpr unsigned YUZU_PAGEBITS = 12; | 264 | static constexpr unsigned YUZU_PAGEBITS = 12; |
| 265 | 265 | ||
| 266 | VideoCore::RasterizerInterface& rasterizer; | 266 | VideoCore::RasterizerInterface& rasterizer; |
| 267 | Tegra::Engines::Maxwell3D& maxwell3d; | ||
| 268 | Tegra::MemoryManager& gpu_memory; | ||
| 269 | 267 | ||
| 270 | std::recursive_mutex mutex; | 268 | std::recursive_mutex mutex; |
| 271 | 269 | ||