Handle stride 0 on regular buffers

This commit is contained in:
Isaac Marovitz 2024-05-28 02:18:59 -04:00 committed by Isaac Marovitz
parent 07230581ce
commit 4fa4c78aa4
1 changed files with 23 additions and 6 deletions

View File

@ -739,17 +739,34 @@ namespace Ryujinx.Graphics.Metal
for (int i = 0; i < bufferDescriptors.Length; i++)
{
var layout = vertexDescriptor.Layouts.Object((ulong)i);
layout.Stride = (indexMask & (1u << i)) != 0 ? (ulong)bufferDescriptors[i].Stride : 0;
if (bufferDescriptors[i].Divisor > 0)
if ((indexMask & (1u << i)) != 0)
{
layout.StepFunction = MTLVertexStepFunction.PerInstance;
layout.StepRate = (ulong)bufferDescriptors[i].Divisor;
layout.Stride = (ulong)bufferDescriptors[i].Stride;
if (layout.Stride == 0)
{
layout.Stride = 1;
layout.StepFunction = MTLVertexStepFunction.Constant;
layout.StepRate = 0;
}
else
{
if (bufferDescriptors[i].Divisor > 0)
{
layout.StepFunction = MTLVertexStepFunction.PerInstance;
layout.StepRate = (ulong)bufferDescriptors[i].Divisor;
}
else
{
layout.StepFunction = MTLVertexStepFunction.PerVertex;
layout.StepRate = 1;
}
}
}
else
{
layout.StepFunction = MTLVertexStepFunction.PerVertex;
layout.StepRate = 1;
layout.Stride = 0;
}
}