diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2020-02-10 21:10:05 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-11 01:10:05 +0100 |
| commit | 7e4d986a731e9cba05f24b2efd14e18ebc39e75d (patch) | |
| tree | 600a7f06c3c0e31d18c80f338e9e4604027fea04 /Ryujinx.Graphics.Shader/Translation/GlobalMemory.cs | |
| parent | 2e6080ccbb1598fc13d0f68b3d05dd4f416bb0b0 (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.cs | 24 |
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 |
