diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs index e0faed29..7e6d8bb5 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs @@ -84,7 +84,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions indexExpr = Src(AggregateType.S32); } - string imageName = OperandManager.GetImageName(context.Config.Stage, texOp, indexExpr); + string imageName = GetImageName(context.Config, texOp, indexExpr); texCallBuilder.Append('('); texCallBuilder.Append(imageName); @@ -216,7 +216,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions indexExpr = GetSoureExpr(context, texOp.GetSource(0), AggregateType.S32); } - string samplerName = OperandManager.GetSamplerName(context.Config.Stage, texOp, indexExpr); + string samplerName = GetSamplerName(context.Config, texOp, indexExpr); int coordsIndex = isBindless || isIndexed ? 1 : 0; @@ -342,7 +342,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions indexExpr = Src(AggregateType.S32); } - string samplerName = OperandManager.GetSamplerName(context.Config.Stage, texOp, indexExpr); + string samplerName = GetSamplerName(context.Config, texOp, indexExpr); texCall += "(" + samplerName; @@ -538,7 +538,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions indexExpr = GetSoureExpr(context, texOp.GetSource(0), AggregateType.S32); } - string samplerName = OperandManager.GetSamplerName(context.Config.Stage, texOp, indexExpr); + string samplerName = GetSamplerName(context.Config, texOp, indexExpr); if (texOp.Index == 3) { @@ -546,8 +546,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions } else { - TextureDescriptor descriptor = context.Config.FindTextureDescriptor(texOp); - bool hasLod = !descriptor.Type.HasFlag(SamplerType.Multisample) && descriptor.Type != SamplerType.TextureBuffer; + context.Config.Properties.Textures.TryGetValue(texOp.Binding, out TextureDefinition definition); + bool hasLod = !definition.Type.HasFlag(SamplerType.Multisample) && (definition.Type & SamplerType.Mask) != SamplerType.TextureBuffer; string texCall; if (hasLod) @@ -715,6 +715,30 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions return varName; } + private static string GetSamplerName(ShaderConfig config, AstTextureOperation texOp, string indexExpr) + { + string name = config.Properties.Textures[texOp.Binding].Name; + + if (texOp.Type.HasFlag(SamplerType.Indexed)) + { + name = $"{name}[{indexExpr}]"; + } + + return name; + } + + private static string GetImageName(ShaderConfig config, AstTextureOperation texOp, string indexExpr) + { + string name = config.Properties.Images[texOp.Binding].Name; + + if (texOp.Type.HasFlag(SamplerType.Indexed)) + { + name = $"{name}[{indexExpr}]"; + } + + return name; + } + private static string GetMask(int index) { return $".{"rgba".AsSpan(index, 1)}"; |