Skip to content

Commit

Permalink
metal/vulkan: fix uniform numbers and vectors in arrays of structs.
Browse files Browse the repository at this point in the history
  • Loading branch information
slime73 committed Jun 15, 2024
1 parent d13a7f7 commit 2eb8198
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/modules/graphics/metal/Shader.mm
Original file line number Diff line number Diff line change
Expand Up @@ -290,10 +290,11 @@ static EShLanguage getGLSLangStage(ShaderStageType stage)
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
Expand Down
3 changes: 2 additions & 1 deletion src/modules/graphics/vulkan/Shader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 2eb8198

Please sign in to comment.