diff --git a/src/xenia/gpu/dxbc_shader_translator.cc b/src/xenia/gpu/dxbc_shader_translator.cc index 0faa3c5bb..42eac768c 100644 --- a/src/xenia/gpu/dxbc_shader_translator.cc +++ b/src/xenia/gpu/dxbc_shader_translator.cc @@ -17,6 +17,7 @@ #include "xenia/base/cvar.h" #include "xenia/base/math.h" #include "xenia/gpu/dxbc_shader.h" +#include "xenia/gpu/gpu_flags.h" #include "xenia/gpu/xenos.h" #include "xenia/ui/graphics_provider.h" @@ -1378,7 +1379,10 @@ void DxbcShaderTranslator::PostTranslation() { shader_binding.mag_filter = translator_binding.mag_filter; shader_binding.min_filter = translator_binding.min_filter; shader_binding.mip_filter = translator_binding.mip_filter; - shader_binding.aniso_filter = translator_binding.aniso_filter; + shader_binding.aniso_filter = + cvars::anisotropic_override > -1 && cvars::anisotropic_override < 6 + ? xenos::AnisoFilter(cvars::anisotropic_override) + : translator_binding.aniso_filter; } } } diff --git a/src/xenia/gpu/gpu_flags.cc b/src/xenia/gpu/gpu_flags.cc index c0cc3f290..417a8cb01 100644 --- a/src/xenia/gpu/gpu_flags.cc +++ b/src/xenia/gpu/gpu_flags.cc @@ -70,3 +70,15 @@ DEFINE_int32( "Set to higher number than query_occlusion_sample_lower_threshold. This " "value is ignored if query_occlusion_sample_lower_threshold is set to -1.", "GPU"); + +DEFINE_int32(anisotropic_override, -1, + "Level of anisotropic filtering enforced on all texture fetch " + "instructions.\n" + " -1 = No override\n" + " 0 = Disable anisotropic filtering\n" + " 1 = Force 1x anisotropic filtering\n" + " 2 = Force 2x anisotropic filtering\n" + " 3 = Force 4x anisotropic filtering\n" + " 4 = Force 8x anisotropic filtering\n" + " 5 = Force 16x anisotropic filtering", + "GPU"); diff --git a/src/xenia/gpu/gpu_flags.h b/src/xenia/gpu/gpu_flags.h index 77559f3c2..a85e66e62 100644 --- a/src/xenia/gpu/gpu_flags.h +++ b/src/xenia/gpu/gpu_flags.h @@ -30,6 +30,8 @@ DECLARE_int32(query_occlusion_sample_lower_threshold); DECLARE_int32(query_occlusion_sample_upper_threshold); +DECLARE_int32(anisotropic_override); + DECLARE_bool(disassemble_pm4); #define XE_GPU_FINE_GRAINED_DRAW_SCOPES 1 diff --git a/src/xenia/gpu/spirv_shader_translator.cc b/src/xenia/gpu/spirv_shader_translator.cc index 9046adb2a..7736ca6ee 100644 --- a/src/xenia/gpu/spirv_shader_translator.cc +++ b/src/xenia/gpu/spirv_shader_translator.cc @@ -17,6 +17,7 @@ #include "xenia/base/assert.h" #include "xenia/base/math.h" #include "xenia/base/string_buffer.h" +#include "xenia/gpu/gpu_flags.h" #include "xenia/gpu/spirv_shader.h" namespace xe { @@ -807,7 +808,10 @@ void SpirvShaderTranslator::PostTranslation() { shader_binding.mag_filter = translator_binding.mag_filter; shader_binding.min_filter = translator_binding.min_filter; shader_binding.mip_filter = translator_binding.mip_filter; - shader_binding.aniso_filter = translator_binding.aniso_filter; + shader_binding.aniso_filter = + cvars::anisotropic_override > -1 && cvars::anisotropic_override < 6 + ? xenos::AnisoFilter(cvars::anisotropic_override) + : translator_binding.aniso_filter; } } }