aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs')
-rw-r--r--src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs66
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)