diff --git a/rpcs3/Emu/RSX/RSXTexture.cpp b/rpcs3/Emu/RSX/RSXTexture.cpp index 8a716997a0..7a3e054679 100644 --- a/rpcs3/Emu/RSX/RSXTexture.cpp +++ b/rpcs3/Emu/RSX/RSXTexture.cpp @@ -264,7 +264,8 @@ namespace rsx f32 fragment_texture::bias() const { - return rsx::decode_fxp<4, 8>((registers[NV4097_SET_TEXTURE_FILTER + (m_index * 8)]) & 0x1fff); + const f32 bias = rsx::decode_fxp<4, 8>((registers[NV4097_SET_TEXTURE_FILTER + (m_index * 8)]) & 0x1fff); + return std::clamp(bias + g_cfg.video.texture_lod_bias, -16.f, 16.f - 1.f / 256); } rsx::texture_minify_filter fragment_texture::min_filter() const @@ -418,7 +419,8 @@ namespace rsx f32 vertex_texture::bias() const { - return rsx::decode_fxp<4, 8>((registers[NV4097_SET_VERTEX_TEXTURE_FILTER + (m_index * 8)]) & 0x1fff); + const f32 bias = rsx::decode_fxp<4, 8>((registers[NV4097_SET_VERTEX_TEXTURE_FILTER + (m_index * 8)]) & 0x1fff); + return std::clamp(bias + g_cfg.video.texture_lod_bias, -16.f, 16.f - 1.f / 256); } rsx::texture_minify_filter vertex_texture::min_filter() const diff --git a/rpcs3/Emu/system_config.h b/rpcs3/Emu/system_config.h index 0732f9069a..ffde63c92a 100644 --- a/rpcs3/Emu/system_config.h +++ b/rpcs3/Emu/system_config.h @@ -150,6 +150,7 @@ struct cfg_root : cfg::node cfg::_int<1, 8> consecutive_frames_to_skip{ this, "Consecutive Frames To Skip", 1, true}; cfg::_int<50, 800> resolution_scale_percent{ this, "Resolution Scale", 100 }; cfg::uint<0, 16> anisotropic_level_override{ this, "Anisotropic Filter Override", 0, true }; + cfg::_int<-16, 16> texture_lod_bias{ this, "Texture LOD Bias Addend", 0, true }; cfg::_int<1, 1024> min_scalable_dimension{ this, "Minimum Scalable Dimension", 16 }; cfg::_int<0, 16> shader_compiler_threads_count{ this, "Shader Compiler Threads", 0 }; cfg::_int<0, 30000000> driver_recovery_timeout{ this, "Driver Recovery Timeout", 1000000, true };