aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Decoders/Decoder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Shader/Decoders/Decoder.cs')
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/Decoder.cs24
1 files changed, 21 insertions, 3 deletions
diff --git a/Ryujinx.Graphics.Shader/Decoders/Decoder.cs b/Ryujinx.Graphics.Shader/Decoders/Decoder.cs
index 69f9a520..1c329b59 100644
--- a/Ryujinx.Graphics.Shader/Decoders/Decoder.cs
+++ b/Ryujinx.Graphics.Shader/Decoders/Decoder.cs
@@ -306,18 +306,36 @@ namespace Ryujinx.Graphics.Shader.Decoders
for (int elemIndex = 0; elemIndex < count; elemIndex++)
{
int attr = offset + elemIndex * 4;
- if (attr >= AttributeConsts.UserAttributeBase && attr < AttributeConsts.UserAttributeEnd)
+
+ if (perPatch)
+ {
+ if (attr >= AttributeConsts.UserAttributePerPatchBase && attr < AttributeConsts.UserAttributePerPatchEnd)
+ {
+ int userAttr = attr - AttributeConsts.UserAttributePerPatchBase;
+ int index = userAttr / 16;
+
+ if (isStore)
+ {
+ config.SetOutputUserAttributePerPatch(index);
+ }
+ else
+ {
+ config.SetInputUserAttributePerPatch(index);
+ }
+ }
+ }
+ else if (attr >= AttributeConsts.UserAttributeBase && attr < AttributeConsts.UserAttributeEnd)
{
int userAttr = attr - AttributeConsts.UserAttributeBase;
int index = userAttr / 16;
if (isStore)
{
- config.SetOutputUserAttribute(index, perPatch);
+ config.SetOutputUserAttribute(index);
}
else
{
- config.SetInputUserAttribute(index, (userAttr >> 2) & 3, perPatch);
+ config.SetInputUserAttribute(index, (userAttr >> 2) & 3);
}
}