From 1b7d95519569639135a68e7ebda5148f3263217c Mon Sep 17 00:00:00 2001 From: gdk Date: Thu, 17 Oct 2019 23:41:18 -0300 Subject: Initial support for image stores, support texture sample on compute --- .../StructuredIr/StructuredProgram.cs | 40 ++++++++++++++++------ 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs') 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) -- cgit v1.2.3