ReinUsesLisp f254b6a394 tests/main: Test assembled binary
Previously the test couldn't fail unless it crashed. Now that sirit does
not do work "behind the scenes" that can change between versions (like
declaring capabilities), we can have this checking.
2019-10-24 03:20:05 -03:00
2018-08-23 04:59:57 -03:00
2019-10-24 03:20:05 -03:00
2019-03-11 03:26:21 -03:00
2018-08-23 04:59:57 -03:00
2018-08-23 04:59:57 -03:00
2019-10-24 03:02:34 -03:00

Sirit

A runtime SPIR-V assembler. It aims to ease dynamic SPIR-V code generation without calling external applications (like Khronos' spirv-as)

Its design aims to move code that does not belong to the application in the library without, limitting its functionality.

What it does for you:

  • Sort declaration opcodes
  • Handle types and constant duplicates
  • Emit SPIR-V opcodes

What does not do for you:

  • Avoid ID duplicates (emitting the same instruction twice)
  • Dump code to disk
  • Handle code blocks/branches
  • Compile from a higher level language

It's in early stages of development, many instructions are missing since they are written manually instead of being generated from a file.

Example

class MyModule : public Sirit::Module {
public:
    MyModule() {}
    ~MyModule() = default;

    void Generate() {
        AddCapability(spv::Capability::Shader);
        SetMemoryModel(spv::AddressingModel::Logical, spv::MemoryModel::GLSL450);
        
        auto main_type{TypeFunction(TypeVoid())};
        auto main_func{OpFunction(TypeVoid(), spv::FunctionControlMask::MaskNone, main_type)};
        AddLabel(OpLabel());
        OpReturn();
        OpFunctionEnd();

        AddEntryPoint(spv::ExecutionModel::Vertex, main_func, "main");
    }
};

// Then...

MyModule module;
module.Generate();

std::vector<std::uint32_t> code{module.Assemble()};
Description
No description provided
Readme 295 KiB
Languages
C++ 96.9%
CMake 3.1%