Browse Source

metal: fix shader:send with fields in an array-of-structs.

Sasha Szpakowski 1 year ago
parent
commit
b5b6d07108
1 changed files with 13 additions and 2 deletions
  1. 13 2
      src/modules/graphics/metal/Shader.mm

+ 13 - 2
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: