mirror of
https://github.com/love2d/love.git
synced 2026-08-17 19:23:38 +02:00
metal/vulkan: fix uniform numbers and vectors in arrays of structs.
This commit is contained in:
@@ -290,10 +290,11 @@ void Shader::buildLocalUniforms(const spirv_cross::CompilerMSL &msl, const spirv
|
|||||||
case SPIRType::Struct:
|
case SPIRType::Struct:
|
||||||
if (membertype.op == spv::OpTypeArray)
|
if (membertype.op == spv::OpTypeArray)
|
||||||
{
|
{
|
||||||
|
size_t arraystride = comp.type_struct_member_array_stride(type, uindex);
|
||||||
for (uint32 i = 0; i < membertype.array[0]; i++)
|
for (uint32 i = 0; i < membertype.array[0]; i++)
|
||||||
{
|
{
|
||||||
std::string structname = name + "[" + std::to_string(i) + "].";
|
std::string structname = name + "[" + std::to_string(i) + "].";
|
||||||
buildLocalUniforms(msl, membertype, offset, structname);
|
buildLocalUniforms(msl, membertype, offset + i * arraystride, structname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -447,10 +447,11 @@ void Shader::buildLocalUniforms(spirv_cross::Compiler &comp, const spirv_cross::
|
|||||||
case SPIRType::Struct:
|
case SPIRType::Struct:
|
||||||
if (memberType.op == spv::OpTypeArray)
|
if (memberType.op == spv::OpTypeArray)
|
||||||
{
|
{
|
||||||
|
size_t arraystride = comp.type_struct_member_array_stride(type, uindex);
|
||||||
for (uint32 i = 0; i < memberType.array[0]; i++)
|
for (uint32 i = 0; i < memberType.array[0]; i++)
|
||||||
{
|
{
|
||||||
std::string structname = name + "[" + std::to_string(i) + "].";
|
std::string structname = name + "[" + std::to_string(i) + "].";
|
||||||
buildLocalUniforms(comp, memberType, offset, structname);
|
buildLocalUniforms(comp, memberType, offset + i * arraystride, structname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user