Minor shader optimization

If the mipmap level is 0.0, we only need to run texBiLinear() for the highest quality texture mipmap
Adds around 10-20% more performance in Daytona 2
This commit is contained in:
gm-matthew 2024-06-04 16:40:36 +01:00 committed by Bart Trzynadlowski
parent a6466b353d
commit f30a8ee2a8

View file

@ -249,15 +249,22 @@ vec4 textureR3D(usampler2D texSampler, ivec2 wrapMode, ivec2 texSize, ivec2 texP
int iLevel = int(fLevel);
ivec2 texPos0 = GetTexturePosition(iLevel,texPos);
ivec2 texPos1 = GetTexturePosition(iLevel+1,texPos);
ivec2 texSize0 = GetTextureSize(iLevel, texSize);
ivec2 texSize1 = GetTextureSize(iLevel+1, texSize);
vec4 texLevel0 = texBiLinear(texSampler, wrapMode, vec2(texSize0), texPos0, texCoord);
vec4 texLevel1 = texBiLinear(texSampler, wrapMode, vec2(texSize1), texPos1, texCoord);
if (fLevel > 0)
{
ivec2 texPos1 = GetTexturePosition(iLevel+1,texPos);
ivec2 texSize1 = GetTextureSize(iLevel+1, texSize);
return mix(texLevel0, texLevel1, fract(fLevel)); // linear blend between our mipmap levels
vec4 texLevel0 = texBiLinear(texSampler, wrapMode, vec2(texSize0), texPos0, texCoord);
vec4 texLevel1 = texBiLinear(texSampler, wrapMode, vec2(texSize1), texPos1, texCoord);
return mix(texLevel0, texLevel1, fract(fLevel)); // linear blend between our mipmap levels
}
else
{
return texBiLinear(texSampler, wrapMode, vec2(texSize0), texPos0, texCoord);
}
}
vec4 GetTextureValue()