From b5b6d0710896742cc61fae7f2cbde1fb790a2f81 Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Sat, 30 Mar 2024 12:03:20 -0300 Subject: [PATCH] metal: fix shader:send with fields in an array-of-structs. --- src/modules/graphics/metal/Shader.mm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/modules/graphics/metal/Shader.mm b/src/modules/graphics/metal/Shader.mm index 316efd6fc..3b6dedb48 100644 --- a/src/modules/graphics/metal/Shader.mm +++ b/src/modules/graphics/metal/Shader.mm @@ -288,8 +288,19 @@ void Shader::buildLocalUniforms(const spirv_cross::CompilerMSL &msl, const spirv switch (membertype.basetype) { case SPIRType::Struct: - name += "."; - buildLocalUniforms(msl, membertype, offset, name); + if (membertype.op == spv::OpTypeArray) + { + for (uint32 i = 0; i < membertype.array[0]; i++) + { + std::string structname = name + "[" + std::to_string(i) + "]."; + buildLocalUniforms(msl, membertype, offset, structname); + } + } + else + { + std::string structname = name = "."; + buildLocalUniforms(msl, membertype, offset, structname); + } continue; case SPIRType::Int: case SPIRType::UInt: