diff --git a/src/Nazara/Shader/ShaderLangParser.cpp b/src/Nazara/Shader/ShaderLangParser.cpp index 7ca503181..4c2034b93 100644 --- a/src/Nazara/Shader/ShaderLangParser.cpp +++ b/src/Nazara/Shader/ShaderLangParser.cpp @@ -458,7 +458,10 @@ namespace Nz::ShaderLang } if (Peek().type == TokenType::Else) + { + Consume(); branch->elseStatement = ParseStatement(); + } return branch; } diff --git a/src/Nazara/Shader/SpirvAstVisitor.cpp b/src/Nazara/Shader/SpirvAstVisitor.cpp index 74a075a87..56bf2d65b 100644 --- a/src/Nazara/Shader/SpirvAstVisitor.cpp +++ b/src/Nazara/Shader/SpirvAstVisitor.cpp @@ -375,6 +375,9 @@ namespace Nz firstCond.statement->Visit(*this); SpirvBlock mergeBlock(m_writer); + + previousContentBlock.Append(SpirvOp::OpBranch, mergeBlock.GetLabelId()); //< FIXME: Shouldn't terminate twice + m_functionBlocks.back().Append(SpirvOp::OpSelectionMerge, mergeBlock.GetLabelId(), SpirvSelectionControl::None); std::optional nextBlock; @@ -393,6 +396,8 @@ namespace Nz m_currentBlock = &previousContentBlock; statement.statement->Visit(*this); + + previousContentBlock.Append(SpirvOp::OpBranch, mergeBlock.GetLabelId()); //< FIXME: Shouldn't terminate twice } if (node.elseStatement)