aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-02-10 21:10:05 -0300
committerGitHub <noreply@github.com>2020-02-11 01:10:05 +0100
commit7e4d986a731e9cba05f24b2efd14e18ebc39e75d (patch)
tree600a7f06c3c0e31d18c80f338e9e4604027fea04 /Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs
parent2e6080ccbb1598fc13d0f68b3d05dd4f416bb0b0 (diff)
Support compute uniform buffers emulated with global memory (#924)
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs')
-rw-r--r--Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs24
1 files changed, 14 insertions, 10 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs b/Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs
index a442357d..75bd9ddf 100644
--- a/Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs
+++ b/Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs
@@ -11,6 +11,11 @@ namespace Ryujinx.Graphics.Shader.Translation
public const int StorageDescsSize = StorageDescSize * StorageMaxCount;
+ public const int UbeBaseOffset = 0x98; // In words.
+ public const int UbeMaxCount = 9;
+ public const int UbeDescsSize = StorageDescSize * UbeMaxCount;
+ public const int UbeFirstCbuf = 8;
+
public static bool UsesGlobalMemory(Instruction inst)
{
return (inst.IsAtomic() && IsGlobalMr(inst)) ||
@@ -30,17 +35,16 @@ namespace Ryujinx.Graphics.Shader.Translation
public static int GetStorageBaseCbOffset(ShaderStage stage)
{
- switch (stage)
+ return stage switch
{
- case ShaderStage.Compute: return StorageDescsBaseOffset + 2 * StorageDescsSize;
- case ShaderStage.Vertex: return StorageDescsBaseOffset;
- case ShaderStage.TessellationControl: return StorageDescsBaseOffset + 1 * StorageDescsSize;
- case ShaderStage.TessellationEvaluation: return StorageDescsBaseOffset + 2 * StorageDescsSize;
- case ShaderStage.Geometry: return StorageDescsBaseOffset + 3 * StorageDescsSize;
- case ShaderStage.Fragment: return StorageDescsBaseOffset + 4 * StorageDescsSize;
- }
-
- return 0;
+ ShaderStage.Compute => StorageDescsBaseOffset + 2 * StorageDescsSize,
+ ShaderStage.Vertex => StorageDescsBaseOffset,
+ ShaderStage.TessellationControl => StorageDescsBaseOffset + 1 * StorageDescsSize,
+ ShaderStage.TessellationEvaluation => StorageDescsBaseOffset + 2 * StorageDescsSize,
+ ShaderStage.Geometry => StorageDescsBaseOffset + 3 * StorageDescsSize,
+ ShaderStage.Fragment => StorageDescsBaseOffset + 4 * StorageDescsSize,
+ _ => 0
+ };
}
}
} \ No newline at end of file