wren
Vulkan-based game engine
Loading...
Searching...
No Matches
parser.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <map>
5#include <optional>
6#include <span>
7#include <spirv/1.2/spirv.hpp>
8#include <string>
9#include <vector>
10
11namespace wren::reflect {
12
13struct SpvType {
14 uint32_t id;
15 spv::Op type;
16 uint32_t parent_type;
17
18 std::optional<spv::StorageClass> storage_class;
19};
20
21struct EntryPoint {
22 spv::ExecutionModel exeuction_model;
23 std::string name;
24};
25
26using spirv_t = std::vector<uint32_t>;
27
28class Parser {
29 public:
30 Parser(spirv_t spirv);
31
32 [[nodiscard]] auto entry_points() const { return entry_points_; }
33 [[nodiscard]] auto op_names() const { return op_names_; }
34 [[nodiscard]] auto types() const { return types_; }
35
36 private:
37 void load_reflection_info();
38
39 auto peek(spirv_t::iterator it) { return *(it + 1); }
40
41 static auto string_literal(
42 std::span<uint32_t> const& string_literal) -> std::string;
43
44 spirv_t spirv;
45
46 uint32_t version = 0;
47 uint32_t generator_magic_number = 0;
48 uint32_t bound = 0;
49
50 std::vector<EntryPoint> entry_points_;
51 std::map<uint32_t, uint32_t> inputs;
52 std::map<uint32_t, std::string> op_names_;
53 std::vector<SpvType> types_;
54};
55
56inline auto to_string(spv::ExecutionModel model) {
57 switch (model) {
58 case spv::ExecutionModelVertex:
59 return "vertex";
60 case spv::ExecutionModelTessellationControl:
61 return "tessellation control";
62 case spv::ExecutionModelTessellationEvaluation:
63 return "tessellation evaluation";
64 case spv::ExecutionModelGeometry:
65 return "geometry";
66 case spv::ExecutionModelFragment:
67 return "fragment";
68 case spv::ExecutionModelGLCompute:
69 return "gl_compute";
70 case spv::ExecutionModelKernel:
71 return "kernel";
72 case spv::ExecutionModelMax:
73 return "unknown_max";
74 default:
75 return "unknown";
76 }
77}
78
79} // namespace wren::reflect
Definition parser.hpp:28
Parser(spirv_t spirv)
Definition parser.cpp:15
auto op_names() const
Definition parser.hpp:33
auto types() const
Definition parser.hpp:34
auto entry_points() const
Definition parser.hpp:32
Definition parser.hpp:11
std::vector< uint32_t > spirv_t
Definition parser.hpp:26
auto to_string(spv::ExecutionModel model)
Definition parser.hpp:56
Definition parser.hpp:21
spv::ExecutionModel exeuction_model
Definition parser.hpp:22
std::string name
Definition parser.hpp:23
Definition parser.hpp:13
spv::Op type
Definition parser.hpp:15
uint32_t parent_type
Definition parser.hpp:16
uint32_t id
Definition parser.hpp:14
std::optional< spv::StorageClass > storage_class
Definition parser.hpp:18