[spirv-writer] Declare extension when using vulkan memory model
This fixes one validation error
Change-Id: I13ee67483ea211d394b51ed9ea29b6698af0acc5
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/20622
Reviewed-by: dan sinclair <dsinclair@google.com>
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 743a8e2..7efd156 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -128,8 +128,12 @@
bool Builder::Build() {
push_preamble(spv::Op::OpCapability, {Operand::Int(SpvCapabilityShader)});
+
+ // TODO(dneto): Stop using the Vulkan memory model. crbug.com/tint/63
push_preamble(spv::Op::OpCapability,
{Operand::Int(SpvCapabilityVulkanMemoryModel)});
+ push_preamble(spv::Op::OpExtension,
+ {Operand::String("SPV_KHR_vulkan_memory_model")});
for (const auto& imp : mod_->imports()) {
GenerateImport(imp.get());
diff --git a/src/writer/spirv/builder_test.cc b/src/writer/spirv/builder_test.cc
index c74fc55..f6f88a5 100644
--- a/src/writer/spirv/builder_test.cc
+++ b/src/writer/spirv/builder_test.cc
@@ -36,10 +36,11 @@
Builder b(&m);
ASSERT_TRUE(b.Build());
- ASSERT_EQ(b.preamble().size(), 4u);
+ ASSERT_EQ(b.preamble().size(), 5u);
EXPECT_EQ(DumpBuilder(b), R"(OpCapability Shader
OpCapability VulkanMemoryModel
+OpExtension "SPV_KHR_vulkan_memory_model"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical Vulkan
)");
@@ -51,6 +52,7 @@
ASSERT_TRUE(b.Build());
EXPECT_EQ(DumpBuilder(b), R"(OpCapability Shader
OpCapability VulkanMemoryModel
+OpExtension "SPV_KHR_vulkan_memory_model"
OpMemoryModel Logical Vulkan
)");
}