// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Shader generator" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include namespace Nz { inline SpirvAstVisitor::SpirvAstVisitor(SpirvWriter& writer, SpirvSection& instructions, std::vector& funcData) : m_extVarIndex(0), m_funcIndex(0), m_funcData(funcData), m_currentBlock(nullptr), m_instructions(instructions), m_writer(writer) { } void SpirvAstVisitor::RegisterExternalVariable(std::size_t varIndex, const ShaderAst::ExpressionType& type) { UInt32 pointerId = m_writer.GetExtVarPointerId(varIndex); SpirvStorageClass storageClass = (IsSamplerType(type)) ? SpirvStorageClass::UniformConstant : SpirvStorageClass::Uniform; RegisterVariable(varIndex, m_writer.GetTypeId(type), pointerId, storageClass); } inline void SpirvAstVisitor::RegisterStruct(std::size_t structIndex, ShaderAst::StructDescription structDesc) { if (structIndex >= m_structs.size()) m_structs.resize(structIndex + 1); m_structs[structIndex] = std::move(structDesc); } inline void SpirvAstVisitor::RegisterVariable(std::size_t varIndex, UInt32 typeId, UInt32 pointerId, SpirvStorageClass storageClass) { if (varIndex >= m_variables.size()) m_variables.resize(varIndex + 1); m_variables[varIndex] = Variable{ storageClass, pointerId, typeId }; } } #include