summaryrefslogtreecommitdiff
path: root/src/video_core/texture_cache
diff options
context:
space:
mode:
authorGravatar Wollnashorn2023-06-15 18:19:32 +0200
committerGravatar Wollnashorn2023-06-15 18:19:32 +0200
commit42c944b250d8d5c8147b24b3a453cba29968d46c (patch)
tree6d156e8247219bf373edd848bd3a89bbd32eb546 /src/video_core/texture_cache
parentvideo_core: Apply AF only to samplers with normal LOD range [0, 1+x] (diff)
downloadyuzu-42c944b250d8d5c8147b24b3a453cba29968d46c.tar.gz
yuzu-42c944b250d8d5c8147b24b3a453cba29968d46c.tar.xz
yuzu-42c944b250d8d5c8147b24b3a453cba29968d46c.zip
video_core: Add per-image anisotropy heuristics (format & mip count)
Diffstat (limited to 'src/video_core/texture_cache')
-rw-r--r--src/video_core/texture_cache/image_view_base.cpp39
-rw-r--r--src/video_core/texture_cache/image_view_base.h2
2 files changed, 41 insertions, 0 deletions
diff --git a/src/video_core/texture_cache/image_view_base.cpp b/src/video_core/texture_cache/image_view_base.cpp
index d134b6738..26fa6d63e 100644
--- a/src/video_core/texture_cache/image_view_base.cpp
+++ b/src/video_core/texture_cache/image_view_base.cpp
@@ -45,4 +45,43 @@ ImageViewBase::ImageViewBase(const ImageInfo& info, const ImageViewInfo& view_in
45 45
46ImageViewBase::ImageViewBase(const NullImageViewParams&) : image_id{NULL_IMAGE_ID} {} 46ImageViewBase::ImageViewBase(const NullImageViewParams&) : image_id{NULL_IMAGE_ID} {}
47 47
48bool ImageViewBase::SupportsAnisotropy() const noexcept {
49 using namespace VideoCommon;
50 switch (format) {
51 case PixelFormat::R8_UNORM:
52 case PixelFormat::R8_SNORM:
53 case PixelFormat::R8_SINT:
54 case PixelFormat::R8_UINT:
55 case PixelFormat::BC4_UNORM:
56 case PixelFormat::BC4_SNORM:
57 case PixelFormat::BC5_UNORM:
58 case PixelFormat::BC5_SNORM:
59 case PixelFormat::R32G32_FLOAT:
60 case PixelFormat::R32G32_SINT:
61 case PixelFormat::R32_FLOAT:
62 case PixelFormat::R16_FLOAT:
63 case PixelFormat::R16_UNORM:
64 case PixelFormat::R16_SNORM:
65 case PixelFormat::R16_UINT:
66 case PixelFormat::R16_SINT:
67 case PixelFormat::R16G16_UNORM:
68 case PixelFormat::R16G16_FLOAT:
69 case PixelFormat::R16G16_UINT:
70 case PixelFormat::R16G16_SINT:
71 case PixelFormat::R16G16_SNORM:
72 case PixelFormat::R8G8_UNORM:
73 case PixelFormat::R8G8_SNORM:
74 case PixelFormat::R8G8_SINT:
75 case PixelFormat::R8G8_UINT:
76 case PixelFormat::R32G32_UINT:
77 case PixelFormat::R32_UINT:
78 case PixelFormat::R32_SINT:
79 case PixelFormat::G4R4_UNORM:
80 return false;
81 default:
82 break;
83 }
84 return range.extent.levels > 1;
85}
86
48} // namespace VideoCommon 87} // namespace VideoCommon
diff --git a/src/video_core/texture_cache/image_view_base.h b/src/video_core/texture_cache/image_view_base.h
index a25ae1d4a..87549ffff 100644
--- a/src/video_core/texture_cache/image_view_base.h
+++ b/src/video_core/texture_cache/image_view_base.h
@@ -33,6 +33,8 @@ struct ImageViewBase {
33 return type == ImageViewType::Buffer; 33 return type == ImageViewType::Buffer;
34 } 34 }
35 35
36 [[nodiscard]] bool SupportsAnisotropy() const noexcept;
37
36 ImageId image_id{}; 38 ImageId image_id{};
37 GPUVAddr gpu_addr = 0; 39 GPUVAddr gpu_addr = 0;
38 PixelFormat format{}; 40 PixelFormat format{};