aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
diff options
context:
space:
mode:
authorgdk <gab.dark.100@gmail.com>2019-10-17 23:41:18 -0300
committerThog <thog@protonmail.com>2020-01-09 02:13:00 +0100
commit1b7d95519569639135a68e7ebda5148f3263217c (patch)
tree52a5e471418bf28ce970a268e1b86b64abc9048f /Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
parent717ace6f6ed65118148dc78976c6e818a095fa4d (diff)
Initial support for image stores, support texture sample on compute
Diffstat (limited to 'Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs')
-rw-r--r--Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs40
1 files changed, 30 insertions, 10 deletions
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
index dc822621..53ca6700 100644
--- a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
+++ b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
@@ -51,6 +51,19 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
sources[index] = context.GetOperandUse(operation.GetSource(index));
}
+ int componentMask = 1 << operation.ComponentIndex;
+
+ AstTextureOperation GetAstTextureOperation(TextureOperation texOp)
+ {
+ return new AstTextureOperation(
+ inst,
+ texOp.Type,
+ texOp.Flags,
+ texOp.Handle,
+ componentMask,
+ sources);
+ }
+
if (operation.Dest != null)
{
AstOperand dest = context.GetOperandDef(operation.Dest);
@@ -108,21 +121,20 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
dest.VarType = InstructionInfo.GetDestVarType(inst);
}
- int componentMask = 1 << operation.ComponentIndex;
-
IAstNode source;
if (operation is TextureOperation texOp)
{
- AstTextureOperation astTexOp = new AstTextureOperation(
- inst,
- texOp.Target,
- texOp.Flags,
- texOp.Handle,
- componentMask,
- sources);
+ AstTextureOperation astTexOp = GetAstTextureOperation(texOp);
- context.Info.Samplers.Add(astTexOp);
+ if (texOp.Inst == Instruction.ImageLoad)
+ {
+ context.Info.Images.Add(astTexOp);
+ }
+ else
+ {
+ context.Info.Samplers.Add(astTexOp);
+ }
source = astTexOp;
}
@@ -143,6 +155,14 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
{
context.AddNode(new AstComment(((CommentNode)operation).Comment));
}
+ else if (operation is TextureOperation texOp)
+ {
+ AstTextureOperation astTexOp = GetAstTextureOperation(texOp);
+
+ context.Info.Images.Add(astTexOp);
+
+ context.AddNode(astTexOp);
+ }
else
{
if (inst == Instruction.StoreStorage)