summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/nvidia_flags.h2
-rw-r--r--src/core/hle/kernel/k_thread.h2
-rw-r--r--src/video_core/query_cache.h9
-rw-r--r--src/video_core/texture_cache/util.cpp21
-rw-r--r--src/video_core/texture_cache/util.h5
5 files changed, 22 insertions, 17 deletions
diff --git a/src/common/nvidia_flags.h b/src/common/nvidia_flags.h
index 75a0233ac..8930efcec 100644
--- a/src/common/nvidia_flags.h
+++ b/src/common/nvidia_flags.h
@@ -2,6 +2,8 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#pragma once
6
5namespace Common { 7namespace Common {
6 8
7/// Configure platform specific flags for Nvidia's driver 9/// Configure platform specific flags for Nvidia's driver
diff --git a/src/core/hle/kernel/k_thread.h b/src/core/hle/kernel/k_thread.h
index 1c86fdd20..b442dfe57 100644
--- a/src/core/hle/kernel/k_thread.h
+++ b/src/core/hle/kernel/k_thread.h
@@ -402,7 +402,7 @@ public:
402 return wait_cancelled; 402 return wait_cancelled;
403 } 403 }
404 404
405 [[nodiscard]] void ClearWaitCancelled() { 405 void ClearWaitCancelled() {
406 wait_cancelled = false; 406 wait_cancelled = false;
407 } 407 }
408 408
diff --git a/src/video_core/query_cache.h b/src/video_core/query_cache.h
index 203f2af05..639d7ce7e 100644
--- a/src/video_core/query_cache.h
+++ b/src/video_core/query_cache.h
@@ -208,9 +208,9 @@ public:
208private: 208private:
209 /// Flushes a memory range to guest memory and removes it from the cache. 209 /// Flushes a memory range to guest memory and removes it from the cache.
210 void FlushAndRemoveRegion(VAddr addr, std::size_t size) { 210 void FlushAndRemoveRegion(VAddr addr, std::size_t size) {
211 const u64 addr_begin = static_cast<u64>(addr); 211 const u64 addr_begin = addr;
212 const u64 addr_end = addr_begin + static_cast<u64>(size); 212 const u64 addr_end = addr_begin + size;
213 const auto in_range = [addr_begin, addr_end](CachedQuery& query) { 213 const auto in_range = [addr_begin, addr_end](const CachedQuery& query) {
214 const u64 cache_begin = query.GetCpuAddr(); 214 const u64 cache_begin = query.GetCpuAddr();
215 const u64 cache_end = cache_begin + query.SizeInBytes(); 215 const u64 cache_end = cache_begin + query.SizeInBytes();
216 return cache_begin < addr_end && addr_begin < cache_end; 216 return cache_begin < addr_end && addr_begin < cache_end;
@@ -230,8 +230,7 @@ private:
230 rasterizer.UpdatePagesCachedCount(query.GetCpuAddr(), query.SizeInBytes(), -1); 230 rasterizer.UpdatePagesCachedCount(query.GetCpuAddr(), query.SizeInBytes(), -1);
231 query.Flush(); 231 query.Flush();
232 } 232 }
233 contents.erase(std::remove_if(std::begin(contents), std::end(contents), in_range), 233 std::erase_if(contents, in_range);
234 std::end(contents));
235 } 234 }
236 } 235 }
237 236
diff --git a/src/video_core/texture_cache/util.cpp b/src/video_core/texture_cache/util.cpp
index c22dd0148..0ab297413 100644
--- a/src/video_core/texture_cache/util.cpp
+++ b/src/video_core/texture_cache/util.cpp
@@ -268,16 +268,19 @@ template <u32 GOB_EXTENT>
268 return num_tiles << shift; 268 return num_tiles << shift;
269} 269}
270 270
271[[nodiscard]] constexpr std::array<u32, MAX_MIP_LEVELS> CalculateLevelSizes(const LevelInfo& info, 271[[nodiscard]] constexpr LevelArray CalculateLevelSizes(const LevelInfo& info, u32 num_levels) {
272 u32 num_levels) {
273 ASSERT(num_levels <= MAX_MIP_LEVELS); 272 ASSERT(num_levels <= MAX_MIP_LEVELS);
274 std::array<u32, MAX_MIP_LEVELS> sizes{}; 273 LevelArray sizes{};
275 for (u32 level = 0; level < num_levels; ++level) { 274 for (u32 level = 0; level < num_levels; ++level) {
276 sizes[level] = CalculateLevelSize(info, level); 275 sizes[level] = CalculateLevelSize(info, level);
277 } 276 }
278 return sizes; 277 return sizes;
279} 278}
280 279
280[[nodiscard]] u32 CalculateLevelBytes(const LevelArray& sizes, u32 num_levels) {
281 return std::reduce(sizes.begin(), sizes.begin() + num_levels, 0U);
282}
283
281[[nodiscard]] constexpr LevelInfo MakeLevelInfo(PixelFormat format, Extent3D size, Extent3D block, 284[[nodiscard]] constexpr LevelInfo MakeLevelInfo(PixelFormat format, Extent3D size, Extent3D block,
282 u32 num_samples, u32 tile_width_spacing) { 285 u32 num_samples, u32 tile_width_spacing) {
283 const auto [samples_x, samples_y] = Samples(num_samples); 286 const auto [samples_x, samples_y] = Samples(num_samples);
@@ -566,10 +569,10 @@ void SwizzleBlockLinearImage(Tegra::MemoryManager& gpu_memory, GPUVAddr gpu_addr
566 569
567 const u32 num_levels = info.resources.levels; 570 const u32 num_levels = info.resources.levels;
568 const std::array sizes = CalculateLevelSizes(level_info, num_levels); 571 const std::array sizes = CalculateLevelSizes(level_info, num_levels);
569 size_t guest_offset = std::reduce(sizes.begin(), sizes.begin() + level, 0); 572 size_t guest_offset = CalculateLevelBytes(sizes, level);
570 const size_t layer_stride = 573 const size_t layer_stride =
571 AlignLayerSize(std::reduce(sizes.begin(), sizes.begin() + num_levels, 0), size, 574 AlignLayerSize(CalculateLevelBytes(sizes, num_levels), size, level_info.block,
572 level_info.block, tile_size.height, info.tile_width_spacing); 575 tile_size.height, info.tile_width_spacing);
573 const size_t subresource_size = sizes[level]; 576 const size_t subresource_size = sizes[level];
574 577
575 const auto dst_data = std::make_unique<u8[]>(subresource_size); 578 const auto dst_data = std::make_unique<u8[]>(subresource_size);
@@ -643,10 +646,10 @@ u32 CalculateLayerSize(const ImageInfo& info) noexcept {
643 info.tile_width_spacing, info.resources.levels); 646 info.tile_width_spacing, info.resources.levels);
644} 647}
645 648
646std::array<u32, MAX_MIP_LEVELS> CalculateMipLevelOffsets(const ImageInfo& info) noexcept { 649LevelArray CalculateMipLevelOffsets(const ImageInfo& info) noexcept {
647 ASSERT(info.resources.levels <= static_cast<s32>(MAX_MIP_LEVELS)); 650 ASSERT(info.resources.levels <= static_cast<s32>(MAX_MIP_LEVELS));
648 const LevelInfo level_info = MakeLevelInfo(info); 651 const LevelInfo level_info = MakeLevelInfo(info);
649 std::array<u32, MAX_MIP_LEVELS> offsets{}; 652 LevelArray offsets{};
650 u32 offset = 0; 653 u32 offset = 0;
651 for (s32 level = 0; level < info.resources.levels; ++level) { 654 for (s32 level = 0; level < info.resources.levels; ++level) {
652 offsets[level] = offset; 655 offsets[level] = offset;
@@ -812,7 +815,7 @@ std::vector<BufferImageCopy> UnswizzleImage(Tegra::MemoryManager& gpu_memory, GP
812 const Extent2D tile_size = DefaultBlockSize(info.format); 815 const Extent2D tile_size = DefaultBlockSize(info.format);
813 const std::array level_sizes = CalculateLevelSizes(level_info, num_levels); 816 const std::array level_sizes = CalculateLevelSizes(level_info, num_levels);
814 const Extent2D gob = GobSize(bpp_log2, info.block.height, info.tile_width_spacing); 817 const Extent2D gob = GobSize(bpp_log2, info.block.height, info.tile_width_spacing);
815 const u32 layer_size = std::reduce(level_sizes.begin(), level_sizes.begin() + num_levels, 0); 818 const u32 layer_size = CalculateLevelBytes(level_sizes, num_levels);
816 const u32 layer_stride = AlignLayerSize(layer_size, size, level_info.block, tile_size.height, 819 const u32 layer_stride = AlignLayerSize(layer_size, size, level_info.block, tile_size.height,
817 info.tile_width_spacing); 820 info.tile_width_spacing);
818 size_t guest_offset = 0; 821 size_t guest_offset = 0;
diff --git a/src/video_core/texture_cache/util.h b/src/video_core/texture_cache/util.h
index 4d0072867..cdc5cbc75 100644
--- a/src/video_core/texture_cache/util.h
+++ b/src/video_core/texture_cache/util.h
@@ -20,6 +20,8 @@ namespace VideoCommon {
20 20
21using Tegra::Texture::TICEntry; 21using Tegra::Texture::TICEntry;
22 22
23using LevelArray = std::array<u32, MAX_MIP_LEVELS>;
24
23struct OverlapResult { 25struct OverlapResult {
24 GPUVAddr gpu_addr; 26 GPUVAddr gpu_addr;
25 VAddr cpu_addr; 27 VAddr cpu_addr;
@@ -36,8 +38,7 @@ struct OverlapResult {
36 38
37[[nodiscard]] u32 CalculateLayerSize(const ImageInfo& info) noexcept; 39[[nodiscard]] u32 CalculateLayerSize(const ImageInfo& info) noexcept;
38 40
39[[nodiscard]] std::array<u32, MAX_MIP_LEVELS> CalculateMipLevelOffsets( 41[[nodiscard]] LevelArray CalculateMipLevelOffsets(const ImageInfo& info) noexcept;
40 const ImageInfo& info) noexcept;
41 42
42[[nodiscard]] std::vector<u32> CalculateSliceOffsets(const ImageInfo& info); 43[[nodiscard]] std::vector<u32> CalculateSliceOffsets(const ImageInfo& info);
43 44