From 36be581d9a5dcf087b2bc96041caaeba01ac436b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Fri, 19 Feb 2021 14:51:06 +0100 Subject: [PATCH] Shader/SpirV: Fix missing OpSelectionMerge before branching --- src/Nazara/Shader/SpirvAstVisitor.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Nazara/Shader/SpirvAstVisitor.cpp b/src/Nazara/Shader/SpirvAstVisitor.cpp index 9c6797ff9..fee8b7d2e 100644 --- a/src/Nazara/Shader/SpirvAstVisitor.cpp +++ b/src/Nazara/Shader/SpirvAstVisitor.cpp @@ -452,6 +452,9 @@ namespace Nz m_currentBlock = &previousContentBlock; Visit(firstCond.statement); + SpirvBlock mergeBlock(m_writer); + m_blocks.back().Append(SpirvOp::OpSelectionMerge, mergeBlock.GetLabelId(), SpirvSelectionControl::None); + std::optional nextBlock; for (std::size_t statementIndex = 1; statementIndex < node.condStatements.size(); ++statementIndex) { @@ -469,8 +472,6 @@ namespace Nz Visit(statement.statement); } - SpirvBlock mergeBlock(m_writer); - if (node.elseStatement) { SpirvBlock elseBlock(m_writer);