Metal: Fix validation when instancing data is provided, but shaders doesn't use it. (#3634)

This commit is contained in:
Branimir Karadžić
2026-03-20 22:28:35 -07:00
committed by GitHub
parent 20a637e3e6
commit 4e6b6f0264

View File

@@ -2520,17 +2520,22 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
if (0 < _numInstanceData)
{
uint32_t numAttribs = 0;
for (uint32_t ii = 0; UINT16_MAX != program.m_instanceData[ii]; ++ii)
{
const uint32_t loc = program.m_instanceData[ii];
vertexDesc->attributes()->object(loc)->setFormat(MTL::VertexFormatFloat4);
vertexDesc->attributes()->object(loc)->setBufferIndex(stream+1);
vertexDesc->attributes()->object(loc)->setOffset(ii*16);
++numAttribs;
}
vertexDesc->layouts()->object(stream+1)->setStride(_numInstanceData * 16);
vertexDesc->layouts()->object(stream+1)->setStepFunction(MTL::VertexStepFunctionPerInstance);
vertexDesc->layouts()->object(stream+1)->setStepRate(1);
if (0 < numAttribs)
{
vertexDesc->layouts()->object(stream+1)->setStride(_numInstanceData * 16);
vertexDesc->layouts()->object(stream+1)->setStepFunction(MTL::VertexStepFunctionPerInstance);
vertexDesc->layouts()->object(stream+1)->setStepRate(1);
}
}
pd->setVertexDescriptor(vertexDesc);