summaryrefslogtreecommitdiffstats
path: root/src/video_core/texture_cache/util.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/texture_cache/util.cpp31
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,