Add scaling for Texture2DArray when using TexelFetch. (#1645)

* Add scaling for Texture2DArray when using TexelFetch.

* Should only really trigger for Texture2D. (do not emit texelfetch for
TextureBufferArray(?) and Texture1DArray)

* Address nit.
This commit is contained in:
riperiperi 2020-10-28 20:27:46 +00:00 committed by GitHub
parent 0031edae27
commit 780c7530d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -407,20 +407,25 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
if ((context.Config.Stage == ShaderStage.Fragment || context.Config.Stage == ShaderStage.Compute) &&
(texOp.Flags & TextureFlags.Bindless) == 0 &&
texOp.Type != SamplerType.Indexed &&
pCount == 2)
texOp.Type != SamplerType.Indexed)
{
return "Helper_TexelFetchScale(" + vector + ", " + index + ")";
if (pCount == 3 && isArray)
{
// The array index is not scaled, just x and y.
return "ivec3(Helper_TexelFetchScale((" + vector + ").xy, " + index + "), (" + vector + ").z)";
}
else if (pCount == 2 && !isArray)
{
return "Helper_TexelFetchScale(" + vector + ", " + index + ")";
}
}
else
{
// Resolution scaling cannot be applied to this texture right now.
// Flag so that we know to blacklist scaling on related textures when binding them.
TextureDescriptor descriptor = context.TextureDescriptors[index];
descriptor.Flags |= TextureUsageFlags.ResScaleUnsupported;
context.TextureDescriptors[index] = descriptor;
}
// Resolution scaling cannot be applied to this texture right now.
// Flag so that we know to blacklist scaling on related textures when binding them.
TextureDescriptor descriptor = context.TextureDescriptors[index];
descriptor.Flags |= TextureUsageFlags.ResScaleUnsupported;
context.TextureDescriptors[index] = descriptor;
}
return vector;