From aa021085cfab10ab63a7e6c2f9c9e29b4111525c Mon Sep 17 00:00:00 2001 From: gdkchan Date: Fri, 5 May 2023 11:20:20 -0300 Subject: Allow any shader SSBO constant buffer slot and offset (#2237) * Allow any shader SSBO constant buffer slot and offset * Fix slot value passed to SetUsedStorageBuffer on fallback case * Shader cache version * Ensure that the storage buffer source constant buffer offset is word aligned * Fix FirstBinding on GetUniformBufferDescriptors --- src/Ryujinx.Graphics.Shader/Translation/Rewriter.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/Ryujinx.Graphics.Shader/Translation/Rewriter.cs') diff --git a/src/Ryujinx.Graphics.Shader/Translation/Rewriter.cs b/src/Ryujinx.Graphics.Shader/Translation/Rewriter.cs index 91e7ace1..8167efc1 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Rewriter.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Rewriter.cs @@ -110,9 +110,9 @@ namespace Ryujinx.Graphics.Shader.Translation Operand BindingRangeCheck(int cbOffset, out Operand baseAddrLow) { - baseAddrLow = Cbuf(0, cbOffset); - Operand baseAddrHigh = Cbuf(0, cbOffset + 1); - Operand size = Cbuf(0, cbOffset + 2); + baseAddrLow = Cbuf(DriverReservedCb, cbOffset); + Operand baseAddrHigh = Cbuf(DriverReservedCb, cbOffset + 1); + Operand size = Cbuf(DriverReservedCb, cbOffset + 2); Operand offset = PrependOperation(Instruction.Subtract, addrLow, baseAddrLow); Operand borrow = PrependOperation(Instruction.CompareLessU32, addrLow, baseAddrLow); @@ -134,9 +134,10 @@ namespace Ryujinx.Graphics.Shader.Translation sbUseMask &= ~(1 << slot); - config.SetUsedStorageBuffer(slot, isWrite); - int cbOffset = GetStorageCbOffset(config.Stage, slot); + slot = config.GetSbSlot(DriverReservedCb, (ushort)cbOffset); + + config.SetUsedStorageBuffer(slot, isWrite); Operand inRange = BindingRangeCheck(cbOffset, out Operand baseAddrLow); -- cgit v1.2.3