diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2021-05-19 18:15:26 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-19 23:15:26 +0200 |
| commit | 49745cfa37b247c3e49bfae126bafbe41e166bc6 (patch) | |
| tree | 1a37f2f2c23791244b22529f6e228f008f984409 /Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs | |
| parent | b5c72b44dee2fd977d7cca5aa3c29ef1e2286aa7 (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.cs | 17 |
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); |
