mirror of
https://github.com/yuzu-emu/sirit.git
synced 2024-12-22 20:45:37 +00:00
Add support for forward declarations
This commit is contained in:
parent
c374bfd9fd
commit
f819ade0ef
|
@ -35,6 +35,10 @@ struct Id {
|
|||
std::uint32_t value;
|
||||
};
|
||||
|
||||
[[nodiscard]] inline bool ValidId(Id id) noexcept {
|
||||
return id.value != 0;
|
||||
}
|
||||
|
||||
class Module {
|
||||
public:
|
||||
explicit Module(std::uint32_t version = spv::Version);
|
||||
|
@ -83,6 +87,12 @@ public:
|
|||
AddExecutionMode(entry_point, mode, std::span<const Literal>({literals...}));
|
||||
}
|
||||
|
||||
/// Generate a new id for forward declarations
|
||||
[[nodiscard]] Id ForwardDeclarationId();
|
||||
|
||||
/// Assign a new id and return the old one, useful for defining forward declarations
|
||||
Id ExchangeCurrentId(Id new_current_id);
|
||||
|
||||
/**
|
||||
* Adds an existing label to the code
|
||||
* @param label Label to insert into code.
|
||||
|
|
|
@ -95,6 +95,15 @@ void Module::AddExecutionMode(Id entry_point, spv::ExecutionMode mode,
|
|||
*execution_modes << spv::Op::OpExecutionMode << entry_point << mode << literals << EndOp{};
|
||||
}
|
||||
|
||||
Id Module::ForwardDeclarationId() {
|
||||
return Id{++bound};
|
||||
}
|
||||
|
||||
Id Module::ExchangeCurrentId(Id new_current_id) {
|
||||
const std::uint32_t old_id = std::exchange(bound, new_current_id.value - 1);
|
||||
return Id{old_id + 1};
|
||||
}
|
||||
|
||||
Id Module::AddLabel(Id label) {
|
||||
assert(label.value != 0);
|
||||
code->Reserve(2);
|
||||
|
|
Loading…
Reference in a new issue