4#include <boost/describe.hpp>
9#include <spirv/unified1/spirv.hpp>
15namespace r = std::ranges;
16namespace rv = std::views;
19BOOST_DESCRIBE_ENUM(StorageClass, StorageClassAtomicCounter)
20BOOST_DESCRIBE_ENUM(Op, OpCapability, OpDecorate, OpEntryPoint, OpName,
21 OpTypeInt, OpTypeFloat, OpTypeVector, OpTypePointer,
46 (name, storage_class, location, width, format))
60 spv::Decoration
decoration = spv::Decoration::DecorationMax;
84 Reflect(
const std::span<const std::byte>& spirv);
91 return variables_ | rv::filter([](
const auto& id_v) {
92 const auto& [_, v] = id_v;
93 return v.storage_class == spv::StorageClass::StorageClassInput;
95 rv::transform([](
const auto& id_v) {
return id_v.second; }) |
100 spv::ExecutionModel entry_point_type)
const -> std::vector<Variable> {
101 const auto& entry_point =
106 return variables_ | rv::filter([entry_point](
const auto& id_v) {
107 const auto& [id, v] = id_v;
108 return r::contains(entry_point->forward_references,
id) &&
109 v.storage_class == spv::StorageClass::StorageClassInput;
111 rv::transform([](
const auto& id_v) {
return id_v.second; }) |
112 r::to<std::vector>();
117 rv::transform([](
const auto& ds) {
return ds.second; }) |
118 r::to<std::vector>();
124 const spv::Op& opcode) -> uint32_t;
void resolve()
Definition reflect.cpp:44
auto input_variables_for_entry_point(spv::ExecutionModel entry_point_type) const -> std::vector< Variable >
Definition reflect.hpp:99
std::map< uint32_t, DescriptorSet > descriptor_sets_
Definition reflect.hpp:133
auto entry_points() const
Definition reflect.hpp:88
auto parse_op_code(utils::BinaryReader &reader, uint32_t wordcount, const spv::Op &opcode) -> uint32_t
Definition reflect.cpp:73
std::map< uint32_t, Variable > variables_
Definition reflect.hpp:132
auto input_variables() const -> std::vector< Variable >
Definition reflect.hpp:90
std::map< uint32_t, std::string > names_
Definition reflect.hpp:138
auto descriptor_sets() const -> std::vector< DescriptorSet >
Definition reflect.hpp:115
uint32_t magic_number_
Definition reflect.hpp:126
auto magic_number() const
Definition reflect.hpp:86
uint32_t version_
Definition reflect.hpp:127
uint32_t generator_
Definition reflect.hpp:128
std::vector< EntryPoint > entry_points_
Definition reflect.hpp:131
std::map< uint32_t, std::vector< Annotation > > annotations_
Definition reflect.hpp:135
std::map< uint32_t, SimpleType > types_
Definition reflect.hpp:136
uint32_t bound_
Definition reflect.hpp:129
Definition binary_reader.hpp:7
Definition reflect.hpp:18
Definition reflect.hpp:25
BOOST_DESCRIBE_STRUCT(Variable,(),(name, storage_class, location, width, format)) BOOST_DEFINE_ENUM_CLASS(TypeType
Float
Definition reflect.hpp:48
Definition reflect.hpp:59
std::optional< uint32_t > binding
Definition reflect.hpp:62
spv::Decoration decoration
Definition reflect.hpp:60
std::optional< uint32_t > descriptor_set
Definition reflect.hpp:63
std::optional< uint32_t > location
Definition reflect.hpp:61
Definition reflect.hpp:66
uint32_t count
Definition reflect.hpp:69
auto operator==(const Binding &) const -> bool=default
uint32_t binding
Definition reflect.hpp:67
uint32_t descriptor_type
Definition reflect.hpp:68
Definition reflect.hpp:75
std::vector< Binding > bindings
Definition reflect.hpp:76
auto operator==(const DescriptorSet &) const -> bool=default
Definition reflect.hpp:27
std::vector< uint32_t > forward_references
Definition reflect.hpp:32
std::string name
Definition reflect.hpp:28
spv::ExecutionModel execution_model
Definition reflect.hpp:29
uint32_t entry_point
Definition reflect.hpp:30
Definition reflect.hpp:50
uint32_t width
Definition reflect.hpp:51
Definition reflect.hpp:35
auto operator==(const Variable &) const -> bool=default
uint32_t format
Definition reflect.hpp:40
std::string name
Definition reflect.hpp:36
spv::StorageClass storage_class
Definition reflect.hpp:37
uint32_t width
Definition reflect.hpp:39
auto operator!=(const Variable &) const -> bool=default
uint32_t location
Definition reflect.hpp:38
Definition reflect.hpp:54
uint32_t count
Definition reflect.hpp:56
SimpleType type
Definition reflect.hpp:55