From 51a27032f01826e0cec56c53da4359fd2c38c8f3 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Fri, 11 Nov 2022 13:22:49 -0300 Subject: Fix VertexId and InstanceId on Vulkan (#3833) * Fix VertexId and InstanceId on Vulkan * Shader cache version bump --- .../Instructions/InstEmitAttribute.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs') diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs index 7edf5deb..2f75d248 100644 --- a/Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs +++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs @@ -51,7 +51,7 @@ namespace Ryujinx.Graphics.Shader.Instructions offset |= AttributeConsts.LoadOutputMask; } - Operand src = op.P ? AttributePerPatch(offset) : Attribute(offset); + Operand src = op.P ? AttributePerPatch(offset) : CreateInputAttribute(context, offset); context.Copy(Register(rd), src); } @@ -312,5 +312,22 @@ namespace Ryujinx.Graphics.Shader.Instructions return attr; } + + private static Operand CreateInputAttribute(EmitterContext context, int attr) + { + if (context.Config.Options.TargetApi == TargetApi.Vulkan) + { + if (attr == AttributeConsts.InstanceId) + { + return context.ISubtract(Attribute(AttributeConsts.InstanceIndex), Attribute(AttributeConsts.BaseInstance)); + } + else if (attr == AttributeConsts.VertexId) + { + return Attribute(AttributeConsts.VertexIndex); + } + } + + return Attribute(attr); + } } } \ No newline at end of file -- cgit v1.2.3