diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs | 66 |
1 files changed, 29 insertions, 37 deletions
diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs index 78fc313d..0b929307 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs @@ -218,7 +218,7 @@ namespace Ryujinx.Graphics.Shader.Instructions return context.Copy(Register(srcB++, RegisterType.Gpr)); } - Operand destOperand = dest != RegisterConsts.RegisterZeroIndex ? Register(dest, RegisterType.Gpr) : null; + Operand d = dest != RegisterConsts.RegisterZeroIndex ? Register(dest, RegisterType.Gpr) : null; List<Operand> sourcesList = new(); @@ -277,17 +277,17 @@ namespace Ryujinx.Graphics.Shader.Instructions flags |= TextureFlags.Bindless; } - TextureOperation operation = context.CreateTextureOperation( + int binding = isBindless ? 0 : context.Config.ResourceManager.GetTextureOrImageBinding( Instruction.ImageAtomic, type, format, flags, - imm, - 0, - new[] { destOperand }, - sources); + TextureOperation.DefaultCbufSlot, + imm); + + Operand res = context.ImageAtomic(type, format, flags, binding, sources); - context.Add(operation); + context.Copy(d, res); } private static void EmitSuld( @@ -383,21 +383,17 @@ namespace Ryujinx.Graphics.Shader.Instructions Array.Resize(ref dests, outputIndex); } - TextureOperation operation = context.CreateTextureOperation( + TextureFormat format = isBindless ? TextureFormat.Unknown : context.Config.GetTextureFormat(handle); + + int binding = isBindless ? 0 : context.Config.ResourceManager.GetTextureOrImageBinding( Instruction.ImageLoad, type, + format, flags, - handle, - (int)componentMask, - dests, - sources); - - if (!isBindless) - { - operation.Format = context.Config.GetTextureFormat(handle); - } + TextureOperation.DefaultCbufSlot, + handle); - context.Add(operation); + context.ImageLoad(type, format, flags, binding, (int)componentMask, dests, sources); } else { @@ -430,17 +426,17 @@ namespace Ryujinx.Graphics.Shader.Instructions Array.Resize(ref dests, outputIndex); } - TextureOperation operation = context.CreateTextureOperation( + TextureFormat format = GetTextureFormat(size); + + int binding = isBindless ? 0 : context.Config.ResourceManager.GetTextureOrImageBinding( Instruction.ImageLoad, type, - GetTextureFormat(size), + format, flags, - handle, - compMask, - dests, - sources); + TextureOperation.DefaultCbufSlot, + handle); - context.Add(operation); + context.ImageLoad(type, format, flags, binding, compMask, dests, sources); switch (size) { @@ -552,17 +548,15 @@ namespace Ryujinx.Graphics.Shader.Instructions flags |= TextureFlags.Bindless; } - TextureOperation operation = context.CreateTextureOperation( + int binding = isBindless ? 0 : context.Config.ResourceManager.GetTextureOrImageBinding( Instruction.ImageAtomic, type, format, flags, - imm, - 0, - null, - sources); + TextureOperation.DefaultCbufSlot, + imm); - context.Add(operation); + context.ImageAtomic(type, format, flags, binding, sources); } private static void EmitSust( @@ -681,17 +675,15 @@ namespace Ryujinx.Graphics.Shader.Instructions flags |= TextureFlags.Coherent; } - TextureOperation operation = context.CreateTextureOperation( + int binding = isBindless ? 0 : context.Config.ResourceManager.GetTextureOrImageBinding( Instruction.ImageStore, type, format, flags, - handle, - 0, - null, - sources); + TextureOperation.DefaultCbufSlot, + handle); - context.Add(operation); + context.ImageStore(type, format, flags, binding, sources); } private static int GetComponentSizeInBytesLog2(SuatomSize size) |