diff --git a/src/Nazara/Shader/SpirvAstVisitor.cpp b/src/Nazara/Shader/SpirvAstVisitor.cpp index 9b5182620..b8c741fb2 100644 --- a/src/Nazara/Shader/SpirvAstVisitor.cpp +++ b/src/Nazara/Shader/SpirvAstVisitor.cpp @@ -617,7 +617,7 @@ namespace Nz for (const auto& param : func.parameters) { UInt32 paramResultId = m_writer.AllocateResultId(); - m_instructions.Append(SpirvOp::OpFunctionParameter, param.typeId, paramResultId); + m_instructions.Append(SpirvOp::OpFunctionParameter, param.pointerTypeId, paramResultId); RegisterVariable(varIndex++, param.typeId, paramResultId, SpirvStorageClass::Function); } diff --git a/src/Nazara/Shader/SpirvWriter.cpp b/src/Nazara/Shader/SpirvWriter.cpp index d92a0ff01..d9b2da928 100644 --- a/src/Nazara/Shader/SpirvWriter.cpp +++ b/src/Nazara/Shader/SpirvWriter.cpp @@ -129,6 +129,23 @@ namespace Nz } } + void Visit(ShaderAst::CallFunctionExpression& node) override + { + AstRecursiveVisitor::Visit(node); + + assert(m_funcIndex); + auto& func = m_funcs[*m_funcIndex]; + + auto& funcCall = func.funcCalls.emplace_back(); + funcCall.firstVarIndex = func.variables.size(); + + for (const auto& parameter : node.parameters) + { + auto& var = func.variables.emplace_back(); + var.typeId = m_constantCache.Register(*m_constantCache.BuildPointerType(GetExpressionType(*parameter), SpirvStorageClass::Function)); + } + } + void Visit(ShaderAst::DeclareFunctionStatement& node) override { std::optional entryPointType = node.entryStage; @@ -253,23 +270,6 @@ namespace Nz m_constantCache.Register(*m_constantCache.BuildType(node.description)); } - void Visit(ShaderAst::CallFunctionExpression& node) override - { - AstRecursiveVisitor::Visit(node); - - assert(m_funcIndex); - auto& func = m_funcs[*m_funcIndex]; - - auto& funcCall = func.funcCalls.emplace_back(); - funcCall.firstVarIndex = func.variables.size(); - - for (const auto& parameter : node.parameters) - { - auto& var = func.variables.emplace_back(); - var.typeId = m_constantCache.Register(*m_constantCache.BuildPointerType(GetExpressionType(*parameter), SpirvStorageClass::Function)); - } - } - void Visit(ShaderAst::DeclareVariableStatement& node) override { AstRecursiveVisitor::Visit(node);