Metal: Fixed validation error of missing attribute from vertex stream. (#3817)

This commit is contained in:
Branimir Karadžić
2026-07-08 13:10:59 -07:00
committed by GitHub
parent 6425068e04
commit ea53e7a5ed

View File

@@ -1358,11 +1358,12 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
{
const TextureMtl& texture = m_textures[_handle.idx];
#if BX_PLATFORM_OSX
MTL::BlitCommandEncoder* bce = s_renderMtl->getBlitCommandEncoder();
#if BX_PLATFORM_OSX
bce->synchronizeTexture(texture.m_ptr, _layer, _mip);
endEncoding();
#endif // BX_PLATFORM_OSX
BX_UNUSED(bce);
endEncoding();
m_cmd.kick(false, true);
m_commandBuffer = NULL;
@@ -1496,12 +1497,12 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
return;
}
#if BX_PLATFORM_OSX
m_blitCommandEncoder = getBlitCommandEncoder();
#if BX_PLATFORM_OSX
m_blitCommandEncoder->synchronizeResource(m_screenshotTarget);
#endif // BX_PLATFORM_OSX
m_blitCommandEncoder->endEncoding();
m_blitCommandEncoder = NULL;
#endif // BX_PLATFORM_OSX
m_cmd.kick(false, true);
m_commandBuffer = 0;
@@ -2879,6 +2880,7 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
}
}
bool usedFallbackAttrib = false;
for (uint32_t ii = 0; Attrib::Count != program.m_used[ii]; ++ii)
{
const Attrib::Enum attr = Attrib::Enum(program.m_used[ii]);
@@ -2889,9 +2891,20 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
vertexDesc->attributes()->object(loc)->setFormat(MTL::VertexFormatUChar2);
vertexDesc->attributes()->object(loc)->setBufferIndex(1);
vertexDesc->attributes()->object(loc)->setOffset(0);
usedFallbackAttrib = true;
}
}
MTL::VertexBufferLayoutDescriptor* vbld = vertexDesc->layouts()->object(1);
if (usedFallbackAttrib
&& 0 == vbld->stride() )
{
vbld->setStride(4);
vbld->setStepFunction(MTL::VertexStepFunctionConstant);
vbld->setStepRate(0);
}
if (0 < _numInstanceData)
{
uint32_t numAttribs = 0;
@@ -4960,7 +4973,7 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
if (m_blitCommandEncoder)
{
m_blitCommandEncoder->endEncoding();
m_blitCommandEncoder = 0;
m_blitCommandEncoder = NULL;
}
updateResolution(_render->m_resolution);