aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs
diff options
context:
space:
mode:
authorgdk <gab.dark.100@gmail.com>2019-11-24 14:20:48 -0300
committerThog <thog@protonmail.com>2020-01-09 02:13:00 +0100
commit1df78e7ad65459d990fa2dcf391da1296dfd886c (patch)
treeddf9b70f649fa284c6a69ba1cba56f4fb8931ad9 /Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs
parent16d88c21fc98cd7302811e142a39d590370e182e (diff)
Simplify shader uniform buffer access codegen
Diffstat (limited to 'Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs')
-rw-r--r--Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs24
1 files changed, 6 insertions, 18 deletions
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs
index 4c9d5b55..802b32e1 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs
@@ -93,7 +93,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
return NumberFormatter.FormatInt(operand.Value);
case OperandType.ConstantBuffer:
- return GetConstantBufferName(operand.CbufSlot, operand.CbufOffset, stage);
+ return GetUniformBufferAccessor(operand.CbufSlot, operand.CbufOffset, stage);
case OperandType.LocalVariable:
return _locals[operand];
@@ -105,28 +105,16 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
throw new ArgumentException($"Invalid operand type \"{operand.Type}\".");
}
- public static string GetConstantBufferName(int slot, int offset, ShaderStage stage)
+ public static string GetUniformBufferAccessor(int slot, int offset, ShaderStage stage)
{
- string ubName = GetUbName(stage, slot);
-
- ubName += "[" + (offset >> 2) + "]";
-
- return ubName + "." + GetSwizzleMask(offset & 3);
+ return GetUniformBufferAccessor(slot, NumberFormatter.FormatInt(offset), stage);
}
- public static string GetConstantBufferName(IAstNode slot, string offsetExpr, ShaderStage stage)
+ public static string GetUniformBufferAccessor(int slot, string offsetExpr, ShaderStage stage)
{
- // Non-constant slots are not supported.
- // It is expected that upstream stages are never going to generate non-constant
- // slot access.
- AstOperand operand = (AstOperand)slot;
-
- string ubName = GetUbName(stage, operand.Value);
-
- string index0 = "[" + offsetExpr + " >> 2]";
- string index1 = "[" + offsetExpr + " & 3]";
+ string ubName = GetUbName(stage, slot);
- return ubName + index0 + index1;
+ return $"{ubName}[{offsetExpr}]";
}
public static string GetOutAttributeName(AstOperand attr, ShaderStage stage)