diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/nvidia_flags.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_thread.h | 2 | ||||
| -rw-r--r-- | src/video_core/query_cache.h | 9 | ||||
| -rw-r--r-- | src/video_core/texture_cache/util.cpp | 21 | ||||
| -rw-r--r-- | src/video_core/texture_cache/util.h | 5 |
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 | |||
| 5 | namespace Common { | 7 | namespace 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: | |||
| 208 | private: | 208 | private: |
| 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 | ||
| 646 | std::array<u32, MAX_MIP_LEVELS> CalculateMipLevelOffsets(const ImageInfo& info) noexcept { | 649 | LevelArray 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 | ||
| 21 | using Tegra::Texture::TICEntry; | 21 | using Tegra::Texture::TICEntry; |
| 22 | 22 | ||
| 23 | using LevelArray = std::array<u32, MAX_MIP_LEVELS>; | ||
| 24 | |||
| 23 | struct OverlapResult { | 25 | struct 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 | ||