From 2eb8198dbac3b18af9126f0b004404f8f3cbf71f Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Sat, 15 Jun 2024 14:46:27 -0300 Subject: [PATCH] metal/vulkan: fix uniform numbers and vectors in arrays of structs. --- src/modules/graphics/metal/Shader.mm | 3 ++- src/modules/graphics/vulkan/Shader.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/modules/graphics/metal/Shader.mm b/src/modules/graphics/metal/Shader.mm index 5963ec414..2e14ed731 100644 --- a/src/modules/graphics/metal/Shader.mm +++ b/src/modules/graphics/metal/Shader.mm @@ -290,10 +290,11 @@ void Shader::buildLocalUniforms(const spirv_cross::CompilerMSL &msl, const spirv case SPIRType::Struct: 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++) { std::string structname = name + "[" + std::to_string(i) + "]."; - buildLocalUniforms(msl, membertype, offset, structname); + buildLocalUniforms(msl, membertype, offset + i * arraystride, structname); } } else diff --git a/src/modules/graphics/vulkan/Shader.cpp b/src/modules/graphics/vulkan/Shader.cpp index 815743fb3..f8c547392 100644 --- a/src/modules/graphics/vulkan/Shader.cpp +++ b/src/modules/graphics/vulkan/Shader.cpp @@ -447,10 +447,11 @@ void Shader::buildLocalUniforms(spirv_cross::Compiler &comp, const spirv_cross:: case SPIRType::Struct: 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++) { std::string structname = name + "[" + std::to_string(i) + "]."; - buildLocalUniforms(comp, memberType, offset, structname); + buildLocalUniforms(comp, memberType, offset + i * arraystride, structname); } } else