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,13 +407,19 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
if ((context.Config.Stage == ShaderStage.Fragment || context.Config.Stage == ShaderStage.Compute) && if ((context.Config.Stage == ShaderStage.Fragment || context.Config.Stage == ShaderStage.Compute) &&
(texOp.Flags & TextureFlags.Bindless) == 0 && (texOp.Flags & TextureFlags.Bindless) == 0 &&
texOp.Type != SamplerType.Indexed && texOp.Type != SamplerType.Indexed)
pCount == 2) {
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 + ")"; return "Helper_TexelFetchScale(" + vector + ", " + index + ")";
} }
else }
{
// Resolution scaling cannot be applied to this texture right now. // Resolution scaling cannot be applied to this texture right now.
// Flag so that we know to blacklist scaling on related textures when binding them. // Flag so that we know to blacklist scaling on related textures when binding them.
@ -421,7 +427,6 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
descriptor.Flags |= TextureUsageFlags.ResScaleUnsupported; descriptor.Flags |= TextureUsageFlags.ResScaleUnsupported;
context.TextureDescriptors[index] = descriptor; context.TextureDescriptors[index] = descriptor;
} }
}
return vector; return vector;
} }