diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureOperation.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureOperation.cs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureOperation.cs b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureOperation.cs new file mode 100644 index 00000000..6ab868cd --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureOperation.cs @@ -0,0 +1,69 @@ +namespace Ryujinx.Graphics.Shader.IntermediateRepresentation +{ + class TextureOperation : Operation + { + public const int DefaultCbufSlot = -1; + + public SamplerType Type { get; set; } + public TextureFormat Format { get; set; } + public TextureFlags Flags { get; private set; } + + public int CbufSlot { get; private set; } + public int Handle { get; private set; } + + public TextureOperation( + Instruction inst, + SamplerType type, + TextureFormat format, + TextureFlags flags, + int cbufSlot, + int handle, + int compIndex, + Operand[] dests, + Operand[] sources) : base(inst, compIndex, dests, sources) + { + Type = type; + Format = format; + Flags = flags; + CbufSlot = cbufSlot; + Handle = handle; + } + + public TextureOperation( + Instruction inst, + SamplerType type, + TextureFormat format, + TextureFlags flags, + int handle, + int compIndex, + Operand[] dests, + Operand[] sources) : this(inst, type, format, flags, DefaultCbufSlot, handle, compIndex, dests, sources) + { + } + + public void TurnIntoIndexed(int handle) + { + Type |= SamplerType.Indexed; + Flags &= ~TextureFlags.Bindless; + Handle = handle; + } + + public void SetHandle(int handle, int cbufSlot = DefaultCbufSlot) + { + if ((Flags & TextureFlags.Bindless) != 0) + { + Flags &= ~TextureFlags.Bindless; + + RemoveSource(0); + } + + CbufSlot = cbufSlot; + Handle = handle; + } + + public void SetLodLevelFlag() + { + Flags |= TextureFlags.LodLevel; + } + } +}
\ No newline at end of file |