https://github.com/shader-slang/slang
Raw File
Tip revision: 8dd04c8730327d7dc2fd29b43b8566fabbc3aa2c authored by Yong He on 09 January 2024, 20:41:07 UTC
Fix funcs w/ buffer load being treated as readnone. (#3441)
Tip revision: 8dd04c8
slang-serialize-ast.h
// slang-serialize-ast.h
#ifndef SLANG_SERIALIZE_AST_H
#define SLANG_SERIALIZE_AST_H

#include "slang-ast-support-types.h"
#include "slang-ast-all.h"

#include "../core/slang-riff.h"

#include "slang-ast-builder.h"

#include "slang-serialize.h"

namespace Slang
{

/* Holds RIFF FourCC codes for AST types */
struct ASTSerialBinary
{
    static const FourCC kRiffFourCC = RiffFourCC::kRiff;

        /// AST module LIST container
    static const FourCC kSlangASTModuleFourCC = SLANG_FOUR_CC('S', 'A', 'm', 'l');
        /// AST module data 
    static const FourCC kSlangASTModuleDataFourCC = SLANG_FOUR_CC('S', 'A', 'm', 'd');
};

class ModuleSerialFilter : public SerialFilter
{
public:
    // SerialFilter impl
    virtual SerialIndex writePointer(SerialWriter* writer, const NodeBase* ptr) SLANG_OVERRIDE;
    virtual SerialIndex writePointer(SerialWriter* writer, const RefObject* ptr) SLANG_OVERRIDE;

    ModuleSerialFilter(ModuleDecl* moduleDecl):
        m_moduleDecl(moduleDecl)
    {
    }
    protected:
    ModuleDecl* m_moduleDecl;
};

struct ASTSerialUtil
{
        /// Add the AST related classes
    static void addSerialClasses(SerialClasses* classes);

        /// Tries to serialize out, read back in and test the results are the same.
        /// Will write dumped out node to files 
    static SlangResult testSerialize(NodeBase* node, RootNamePool* rootNamePool, SharedASTBuilder* sharedASTBuilder, SourceManager* sourceManager);

    static List<uint8_t> serializeAST(ModuleDecl* moduleDecl);
};

} // namespace Slang

#endif
back to top