mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Fixed fog, lava, water in Mario Galaxy (and possibly other games) in higher IRs by detecting & fixing the mipmaps that aren't just used for downscaling, but are handmade to create a gradient.
This commit is contained in:
@ -209,7 +209,7 @@ std::pair<size_t, size_t> VertexManagerBase::ResetFlushAspectRatioCount()
|
||||
return val;
|
||||
}
|
||||
|
||||
static void SetSamplerState(u32 index, bool custom_tex)
|
||||
static void SetSamplerState(u32 index, bool custom_tex, bool has_arbitrary_mips)
|
||||
{
|
||||
const FourTexUnits& tex = bpmem.tex[index / 4];
|
||||
const TexMode0& tm0 = tex.texMode0[index % 4];
|
||||
@ -252,6 +252,18 @@ static void SetSamplerState(u32 index, bool custom_tex)
|
||||
state.anisotropic_filtering = 0;
|
||||
}
|
||||
|
||||
if (has_arbitrary_mips && SamplerCommon::AreBpTexMode0MipmapsEnabled(tm0))
|
||||
{
|
||||
// Apply a secondary bias calculated from the IR scale to pull inwards mipmaps
|
||||
// that have arbitrary contents, eg. are used for fog effects where the
|
||||
// distance they kick in at is important to preserve at any resolution.
|
||||
state.lod_bias =
|
||||
state.lod_bias + std::log2(static_cast<float>(g_ActiveConfig.iEFBScale)) * 256.f;
|
||||
|
||||
// Anisotropic also pushes mips farther away so it cannot be used either
|
||||
state.anisotropic_filtering = 0;
|
||||
}
|
||||
|
||||
g_renderer->SetSamplerState(index, state);
|
||||
}
|
||||
|
||||
@ -323,7 +335,7 @@ void VertexManagerBase::Flush()
|
||||
|
||||
if (tentry)
|
||||
{
|
||||
SetSamplerState(i, tentry->is_custom_tex);
|
||||
SetSamplerState(i, tentry->is_custom_tex, tentry->has_arbitrary_mips);
|
||||
PixelShaderManager::SetTexDims(i, tentry->native_width, tentry->native_height);
|
||||
}
|
||||
else
|
||||
|
Reference in New Issue
Block a user