diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2021-06-13 03:34:06 +0200 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2021-07-04 22:32:35 +0200 |
commit | fd98fcf7f00d096322ccfaa1e35a314b4d698efd (patch) | |
tree | 90fe2a180845d1c28ad3996264188f6ae4aa9f11 /src/video_core/texture_cache/util.cpp | |
parent | Texture Cache: Initial Implementation of Sparse Textures. (diff) | |
download | yuzu-fd98fcf7f00d096322ccfaa1e35a314b4d698efd.tar yuzu-fd98fcf7f00d096322ccfaa1e35a314b4d698efd.tar.gz yuzu-fd98fcf7f00d096322ccfaa1e35a314b4d698efd.tar.bz2 yuzu-fd98fcf7f00d096322ccfaa1e35a314b4d698efd.tar.lz yuzu-fd98fcf7f00d096322ccfaa1e35a314b4d698efd.tar.xz yuzu-fd98fcf7f00d096322ccfaa1e35a314b4d698efd.tar.zst yuzu-fd98fcf7f00d096322ccfaa1e35a314b4d698efd.zip |
Diffstat (limited to 'src/video_core/texture_cache/util.cpp')
-rw-r--r-- | src/video_core/texture_cache/util.cpp | 31 |
1 files changed, 7 insertions, 24 deletions
diff --git a/src/video_core/texture_cache/util.cpp b/src/video_core/texture_cache/util.cpp index 96bf8f8d9..10093a11d 100644 --- a/src/video_core/texture_cache/util.cpp +++ b/src/video_core/texture_cache/util.cpp @@ -786,37 +786,20 @@ std::vector<ImageCopy> MakeShrinkImageCopies(const ImageInfo& dst, const ImageIn return copies; } -bool IsValidAddress(const Tegra::MemoryManager& gpu_memory, GPUVAddr gpu_addr) { - if (gpu_addr == 0) { +bool IsValidEntry(const Tegra::MemoryManager& gpu_memory, const TICEntry& config) { + const GPUVAddr address = config.Address(); + if (address == 0) { return false; } - if (gpu_addr > (u64(1) << 48)) { + if (address > (1ULL << 48)) { return false; } - const auto cpu_addr = gpu_memory.GpuToCpuAddress(gpu_addr); - return cpu_addr.has_value() && *cpu_addr != 0; -} - -bool IsValidEntry(const Tegra::MemoryManager& gpu_memory, const TICEntry& config) { - const GPUVAddr gpu_addr = config.Address(); - if (IsValidAddress(gpu_memory, gpu_addr)) { + if (gpu_memory.GpuToCpuAddress(address).has_value()) { return true; } - if (!config.IsBlockLinear()) { - return false; - } - const size_t levels = config.max_mip_level + 1; - if (levels <= 1) { - return false; - } const ImageInfo info{config}; - const LevelArray offsets = CalculateMipLevelOffsets(info); - for (size_t level = 1; level < levels; level++) { - if (IsValidAddress(gpu_memory, static_cast<GPUVAddr>(gpu_addr + offsets[level]))) { - return true; - } - } - return false; + const size_t guest_size_bytes = CalculateGuestSizeInBytes(info); + return gpu_memory.GpuToCpuAddress(address, guest_size_bytes).has_value(); } std::vector<BufferImageCopy> UnswizzleImage(Tegra::MemoryManager& gpu_memory, GPUVAddr gpu_addr, |