[spirv-writer] Cleanup capabilities code.
This CL simplifies the capabilities code in the SPIR-V builder.
Bug: tint:5
Change-Id: Iff99350b2d6a2534c82ea3d47a0a9186d0dcb6ac
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/22661
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 382681b..cf3ee87 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -138,11 +138,10 @@
Builder::~Builder() = default;
bool Builder::Build() {
- push_capability(spv::Op::OpCapability, {Operand::Int(SpvCapabilityShader)});
+ push_capability(SpvCapabilityShader);
// TODO(dneto): Stop using the Vulkan memory model. crbug.com/tint/63
- push_capability(spv::Op::OpCapability,
- {Operand::Int(SpvCapabilityVulkanMemoryModel)});
+ push_capability(SpvCapabilityVulkanMemoryModel);
push_preamble(spv::Op::OpExtension,
{Operand::String("SPV_KHR_vulkan_memory_model")});
@@ -221,6 +220,11 @@
}
}
+void Builder::push_capability(uint32_t cap) {
+ capabilities_.push_back(
+ Instruction{spv::Op::OpCapability, {Operand::Int(cap)}});
+}
+
uint32_t Builder::GenerateU32Literal(uint32_t val) {
ast::type::U32Type u32;
ast::SintLiteral lit(&u32, val);
@@ -1251,8 +1255,7 @@
if (ast::intrinsic::IsFineDerivative(name) ||
ast::intrinsic::IsCoarseDerivative(name)) {
- push_capability(spv::Op::OpCapability,
- {Operand::Int(SpvCapabilityDerivativeControl)});
+ push_capability(SpvCapabilityDerivativeControl);
}
spv::Op op = spv::Op::OpNop;
diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h
index b8ac524..61a2e36 100644
--- a/src/writer/spirv/builder.h
+++ b/src/writer/spirv/builder.h
@@ -120,11 +120,8 @@
void iterate(std::function<void(const Instruction&)> cb) const;
/// Adds an instruction to the list of capabilities
- /// @param op the op to set
- /// @param operands the operands for the instruction
- void push_capability(spv::Op op, const std::vector<Operand>& operands) {
- capabilities_.push_back(Instruction{op, operands});
- }
+ /// @param cap the capability to set
+ void push_capability(uint32_t cap);
/// @returns the capabilities
const std::vector<Instruction>& capabilities() const { return capabilities_; }
/// Adds an instruction to the preamble