From 576be3448f47f430a4f3e752cd6ec99f3f201222 Mon Sep 17 00:00:00 2001 From: Stephen Miller Date: Thu, 26 Jun 2025 19:12:11 -0500 Subject: [PATCH] Calculate anisotrophic ratio Fixes a few regressions from an ancient PR. --- src/video_core/amdgpu/resource.h | 25 ++----------------- .../renderer_vulkan/vk_rasterizer.cpp | 2 +- 2 files changed, 3 insertions(+), 24 deletions(-) diff --git a/src/video_core/amdgpu/resource.h b/src/video_core/amdgpu/resource.h index 5ede90200..42528af72 100644 --- a/src/video_core/amdgpu/resource.h +++ b/src/video_core/amdgpu/resource.h @@ -389,14 +389,6 @@ enum class ClampMode : u64 { MirrorOnceBorder = 7, }; -enum class AnisoRatio : u64 { - One, - Two, - Four, - Eight, - Sixteen, -}; - enum class DepthCompare : u64 { Never = 0, Less = 1, @@ -451,7 +443,7 @@ struct Sampler { BitField<0, 3, ClampMode> clamp_x; BitField<3, 3, ClampMode> clamp_y; BitField<6, 3, ClampMode> clamp_z; - BitField<9, 3, AnisoRatio> max_aniso; + BitField<9, 3, u64> max_aniso; BitField<12, 3, DepthCompare> depth_compare_func; BitField<15, 1, u64> force_unnormalized; BitField<16, 3, u64> aniso_threshold; @@ -504,20 +496,7 @@ struct Sampler { } float MaxAniso() const { - switch (max_aniso.Value()) { - case AnisoRatio::One: - return 1.0f; - case AnisoRatio::Two: - return 2.0f; - case AnisoRatio::Four: - return 4.0f; - case AnisoRatio::Eight: - return 8.0f; - case AnisoRatio::Sixteen: - return 16.0f; - default: - UNREACHABLE(); - } + return static_cast(2 ^ max_aniso.Value()); } }; diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 9dea5ceea..94770c2bf 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -713,7 +713,7 @@ void Rasterizer::BindTextures(const Shader::Info& stage, Shader::Backend::Bindin if (sampler.disable_aniso) { const auto& tsharp = stage.images[sampler.associated_image].GetSharp(stage); if (tsharp.base_level == 0 && tsharp.last_level == 0) { - ssharp.max_aniso.Assign(AmdGpu::AnisoRatio::One); + ssharp.max_aniso.Assign(0); } } const auto vk_sampler = texture_cache.GetSampler(ssharp, liverpool->regs.ta_bc_base);