Force reciprocal operation with value biased by constant to be precise on macOS (#5110)
* Force operations to be precise in some cases on SPIR-V * Make it a bit more strict, add comments * Shader cache version bump
This commit is contained in:
@ -156,7 +156,13 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
|
||||
}
|
||||
else
|
||||
{
|
||||
source = new AstOperation(inst, operation.StorageKind, operation.Index, sources, operation.SourcesCount);
|
||||
source = new AstOperation(
|
||||
inst,
|
||||
operation.StorageKind,
|
||||
operation.ForcePrecise,
|
||||
operation.Index,
|
||||
sources,
|
||||
operation.SourcesCount);
|
||||
}
|
||||
|
||||
AggregateType destElemType = destType;
|
||||
@ -179,7 +185,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
|
||||
|
||||
dest.VarType = destElemType;
|
||||
|
||||
context.AddNode(new AstAssignment(dest, new AstOperation(Instruction.VectorExtract, StorageKind.None, new[] { destVec, index }, 2)));
|
||||
context.AddNode(new AstAssignment(dest, new AstOperation(Instruction.VectorExtract, StorageKind.None, false, new[] { destVec, index }, 2)));
|
||||
}
|
||||
}
|
||||
else if (operation.Dest != null)
|
||||
@ -227,7 +233,13 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
|
||||
}
|
||||
else if (!isCopy)
|
||||
{
|
||||
source = new AstOperation(inst, operation.StorageKind, operation.Index, sources, operation.SourcesCount);
|
||||
source = new AstOperation(
|
||||
inst,
|
||||
operation.StorageKind,
|
||||
operation.ForcePrecise,
|
||||
operation.Index,
|
||||
sources,
|
||||
operation.SourcesCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -248,7 +260,13 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
|
||||
}
|
||||
else
|
||||
{
|
||||
context.AddNode(new AstOperation(inst, operation.StorageKind, operation.Index, sources, operation.SourcesCount));
|
||||
context.AddNode(new AstOperation(
|
||||
inst,
|
||||
operation.StorageKind,
|
||||
operation.ForcePrecise,
|
||||
operation.Index,
|
||||
sources,
|
||||
operation.SourcesCount));
|
||||
}
|
||||
|
||||
// Those instructions needs to be emulated by using helper functions,
|
||||
|
Reference in New Issue
Block a user