aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-05-19 18:15:26 -0300
committerGitHub <noreply@github.com>2021-05-19 23:15:26 +0200
commit49745cfa37b247c3e49bfae126bafbe41e166bc6 (patch)
tree1a37f2f2c23791244b22529f6e228f008f984409 /Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs
parentb5c72b44dee2fd977d7cca5aa3c29ef1e2286aa7 (diff)
Move shader resource descriptor creation out of the backend (#2290)
* Move shader resource descriptor creation out of the backend * Remove now unused code, and other nits * Shader cache version bump * Nits * Set format for bindless image load/store * Fix buffer write flag
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs')
-rw-r--r--Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs17
1 files changed, 13 insertions, 4 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs b/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs
index a3417544..bccb0cbe 100644
--- a/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs
+++ b/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs
@@ -58,11 +58,16 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
{
Operation operation = (Operation)node.Value;
+ bool isAtomic = operation.Inst.IsAtomic();
+ bool isWrite = isAtomic || operation.Inst == Instruction.StoreGlobal;
+
+ config.SetUsedStorageBuffer(storageIndex, isWrite);
+
Operand GetStorageOffset()
{
Operand addrLow = operation.GetSource(0);
- Operand baseAddrLow = Cbuf(0, GetStorageCbOffset(config.Stage, storageIndex));
+ Operand baseAddrLow = config.CreateCbuf(0, GetStorageCbOffset(config.Stage, storageIndex));
Operand baseAddrTrunc = Local();
@@ -96,7 +101,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
Operation storageOp;
- if (operation.Inst.IsAtomic())
+ if (isAtomic)
{
Instruction inst = (operation.Inst & ~Instruction.MrMask) | Instruction.MrStorage;
@@ -133,7 +138,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
{
Operand addrLow = operation.GetSource(0);
- Operand baseAddrLow = Cbuf(0, UbeBaseOffset + storageIndex * StorageDescSize);
+ Operand baseAddrLow = config.CreateCbuf(0, UbeBaseOffset + storageIndex * StorageDescSize);
Operand baseAddrTrunc = Local();
@@ -157,9 +162,13 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
Operand[] sources = new Operand[operation.SourcesCount];
- sources[0] = Const(UbeFirstCbuf + storageIndex);
+ int cbSlot = UbeFirstCbuf + storageIndex;
+
+ sources[0] = Const(cbSlot);
sources[1] = GetCbufOffset();
+ config.SetUsedConstantBuffer(cbSlot);
+
for (int index = 2; index < operation.SourcesCount; index++)
{
sources[index] = operation.GetSource(index);