Implement CAL and RET shader instructions (#1618)
* Add support for CAL and RET shader instructions * Remove unused stuff * Fix a bug that could cause the wrong values to be passed to a function * Avoid repopulating function id dictionary every time * PR feedback * Fix vertex shader A/B merge
This commit is contained in:
parent
973a615d40
commit
49f970d5bd
33 changed files with 1337 additions and 401 deletions
|
@ -14,24 +14,35 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
|
|||
|
||||
public int SourcesCount => _sources.Length;
|
||||
|
||||
public AstOperation(Instruction inst, params IAstNode[] sources)
|
||||
public AstOperation(Instruction inst, IAstNode[] sources, int sourcesCount)
|
||||
{
|
||||
Inst = inst;
|
||||
_sources = sources;
|
||||
|
||||
foreach (IAstNode source in sources)
|
||||
for (int index = 0; index < sources.Length; index++)
|
||||
{
|
||||
AddUse(source, this);
|
||||
if (index < sourcesCount)
|
||||
{
|
||||
AddUse(sources[index], this);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddDef(sources[index], this);
|
||||
}
|
||||
}
|
||||
|
||||
Index = 0;
|
||||
}
|
||||
|
||||
public AstOperation(Instruction inst, int index, params IAstNode[] sources) : this(inst, sources)
|
||||
public AstOperation(Instruction inst, int index, IAstNode[] sources, int sourcesCount) : this(inst, sources, sourcesCount)
|
||||
{
|
||||
Index = index;
|
||||
}
|
||||
|
||||
public AstOperation(Instruction inst, params IAstNode[] sources) : this(inst, sources, sources.Length)
|
||||
{
|
||||
}
|
||||
|
||||
public IAstNode GetSource(int index)
|
||||
{
|
||||
return _sources[index];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue