diff --git a/include/Nazara/Shader/ShaderBuilder.hpp b/include/Nazara/Shader/ShaderBuilder.hpp index 502dbed73..9394624b1 100644 --- a/include/Nazara/Shader/ShaderBuilder.hpp +++ b/include/Nazara/Shader/ShaderBuilder.hpp @@ -59,6 +59,7 @@ namespace Nz::ShaderBuilder struct DeclareFunction { + inline std::unique_ptr operator()(std::string name, ShaderAst::StatementPtr statement) const; inline std::unique_ptr operator()(std::string name, std::vector parameters, std::vector statements, ShaderAst::ExpressionType returnType = ShaderAst::NoType{}) const; inline std::unique_ptr operator()(std::optional entryStage, std::string name, std::vector parameters, std::vector statements, ShaderAst::ExpressionType returnType = ShaderAst::NoType{}) const; }; diff --git a/include/Nazara/Shader/ShaderBuilder.inl b/include/Nazara/Shader/ShaderBuilder.inl index d27cbd5fd..d48263e01 100644 --- a/include/Nazara/Shader/ShaderBuilder.inl +++ b/include/Nazara/Shader/ShaderBuilder.inl @@ -97,6 +97,15 @@ namespace Nz::ShaderBuilder return constantNode; } + inline std::unique_ptr Impl::DeclareFunction::operator()(std::string name, ShaderAst::StatementPtr statement) const + { + auto declareFunctionNode = std::make_unique(); + declareFunctionNode->name = std::move(name); + declareFunctionNode->statements.push_back(std::move(statement)); + + return declareFunctionNode; + } + inline std::unique_ptr Impl::DeclareFunction::operator()(std::string name, std::vector parameters, std::vector statements, ShaderAst::ExpressionType returnType) const { auto declareFunctionNode = std::make_unique(); @@ -200,7 +209,8 @@ namespace Nz::ShaderBuilder swizzleNode->expression = std::move(expression); assert(swizzleComponents.size() <= swizzleNode->components.size()); - for (std::size_t i = 0; i < swizzleComponents.size(); ++i) + swizzleNode->componentCount = swizzleComponents.size(); + for (std::size_t i = 0; i < swizzleNode->componentCount; ++i) swizzleNode->components[i] = swizzleComponents[i]; return swizzleNode; diff --git a/src/Nazara/Shader/SpirvPrinter.cpp b/src/Nazara/Shader/SpirvPrinter.cpp index 373d7e2c9..f8bbf4f18 100644 --- a/src/Nazara/Shader/SpirvPrinter.cpp +++ b/src/Nazara/Shader/SpirvPrinter.cpp @@ -203,14 +203,14 @@ namespace Nz m_currentState->stream << std::string(m_currentState->resultOffset, ' '); m_currentState->stream << instructionStream.str(); + + assert(GetCurrentPtr() == startPtr + wordCount - 1); } else m_currentState->stream << instruction.name; m_currentState->stream << "\n"; - assert(GetCurrentPtr() == startPtr + wordCount - 1); - return true; } }