[spirv][ir] Add memory model annotations to texture Load/Store
This CL adds the Vulkan Memory Model `NonPrivateTexel` annotation to
the texture loads and stores.
Bug: 348702031
Change-Id: Iaa50f5935dbeead33b63bd38edd146ac0962d2bb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/203654
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/spirv/writer/builtin_test.cc b/src/tint/lang/spirv/writer/builtin_test.cc
index 8da2a5d..5a6fbd6 100644
--- a/src/tint/lang/spirv/writer/builtin_test.cc
+++ b/src/tint/lang/spirv/writer/builtin_test.cc
@@ -1905,6 +1905,19 @@
EXPECT_INST("OpControlBarrier %uint_2 %uint_2 %uint_2056");
}
+TEST_F(SpirvWriterTest, Builtin_TextureBarrier_Vulkan) {
+ auto* func = b.Function("foo", ty.void_());
+ b.Append(func->Block(), [&] {
+ b.Call(ty.void_(), core::BuiltinFn::kTextureBarrier);
+ b.Return(func);
+ });
+
+ Options opts{};
+ opts.use_vulkan_memory_model = true;
+ ASSERT_TRUE(Generate(opts)) << Error() << output_;
+ EXPECT_INST("OpControlBarrier %uint_2 %uint_2 %uint_26632");
+}
+
TEST_F(SpirvWriterTest, Builtin_WorkgroupBarrier) {
auto* func = b.Function("foo", ty.void_());
b.Append(func->Block(), [&] {
diff --git a/src/tint/lang/spirv/writer/printer/printer.cc b/src/tint/lang/spirv/writer/printer/printer.cc
index ad56939..a6b58be 100644
--- a/src/tint/lang/spirv/writer/printer/printer.cc
+++ b/src/tint/lang/spirv/writer/printer/printer.cc
@@ -1812,15 +1812,21 @@
case core::BuiltinFn::kTanh:
glsl_ext_inst(GLSLstd450Tanh);
break;
- case core::BuiltinFn::kTextureBarrier:
+ case core::BuiltinFn::kTextureBarrier: {
+ spv::MemorySemanticsMask memory_mask = spv::MemorySemanticsMask::ImageMemory |
+ spv::MemorySemanticsMask::AcquireRelease;
+ if (options_.use_vulkan_memory_model) {
+ memory_mask = memory_mask | spv::MemorySemanticsMask::MakeAvailable |
+ spv::MemorySemanticsMask::MakeVisible;
+ }
+
op = spv::Op::OpControlBarrier;
operands.clear();
operands.push_back(Constant(b_.ConstantValue(u32(spv::Scope::Workgroup))));
operands.push_back(Constant(b_.ConstantValue(u32(spv::Scope::Workgroup))));
- operands.push_back(
- Constant(b_.ConstantValue(u32(spv::MemorySemanticsMask::ImageMemory |
- spv::MemorySemanticsMask::AcquireRelease))));
+ operands.push_back(Constant(b_.ConstantValue(u32(memory_mask))));
break;
+ }
case core::BuiltinFn::kTextureNumLevels:
module_.PushCapability(SpvCapabilityImageQuery);
op = spv::Op::OpImageQueryLevels;
diff --git a/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc b/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
index 5c1ccd4..aee71d2 100644
--- a/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
+++ b/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
@@ -59,6 +59,9 @@
/// The IR module.
core::ir::Module& ir;
+ /// If we should use the vulkan memory model
+ bool use_vulkan_memory_model = false;
+
/// The IR builder.
core::ir::Builder b{ir};
@@ -432,7 +435,7 @@
/// @param requires_float_lod true if the lod needs to be a floating point value
void AppendImageOperands(ImageOperands& operands,
Vector<core::ir::Value*, 8>& args,
- core::ir::Instruction* insertion_point,
+ core::ir::CoreBuiltinCall* insertion_point,
bool requires_float_lod) {
// Add a placeholder argument for the image operand mask, which we will fill in when we have
// processed the image operands.
@@ -440,6 +443,19 @@
size_t mask_idx = args.Length();
args.Push(nullptr);
+ // Append the NonPrivateTexel flag to Read/Write storage textures when we load/store them.
+ if (use_vulkan_memory_model) {
+ if (insertion_point->Func() == core::BuiltinFn::kTextureLoad ||
+ insertion_point->Func() == core::BuiltinFn::kTextureStore) {
+ if (auto* st =
+ insertion_point->Args()[0]->Type()->As<core::type::StorageTexture>()) {
+ if (st->Access() == core::Access::kReadWrite) {
+ image_operand_mask |= SpvImageOperandsNonPrivateTexelMask;
+ }
+ }
+ }
+ }
+
// Add each of the optional image operands if used, updating the image operand mask.
if (operands.bias) {
image_operand_mask |= SpvImageOperandsBiasMask;
@@ -942,13 +958,13 @@
} // namespace
-Result<SuccessType> BuiltinPolyfill(core::ir::Module& ir) {
+Result<SuccessType> BuiltinPolyfill(core::ir::Module& ir, bool use_vulkan_memory_model) {
auto result = ValidateAndDumpIfNeeded(ir, "BuiltinPolyfill transform");
if (result != Success) {
return result.Failure();
}
- State{ir}.Process();
+ State{ir, use_vulkan_memory_model}.Process();
return Success;
}
diff --git a/src/tint/lang/spirv/writer/raise/builtin_polyfill.h b/src/tint/lang/spirv/writer/raise/builtin_polyfill.h
index 794e75f..c17b5e7 100644
--- a/src/tint/lang/spirv/writer/raise/builtin_polyfill.h
+++ b/src/tint/lang/spirv/writer/raise/builtin_polyfill.h
@@ -46,8 +46,9 @@
/// BuiltinPolyfill is a transform that replaces calls to builtins with polyfills and calls to
/// SPIR-V backend intrinsic functions.
/// @param module the module to transform
+/// @param use_vulkan_memory_model set `true` to use the vulkan memory model
/// @returns success or failure
-Result<SuccessType> BuiltinPolyfill(core::ir::Module& module);
+Result<SuccessType> BuiltinPolyfill(core::ir::Module& module, bool use_vulkan_memory_model);
} // namespace tint::spirv::writer::raise
diff --git a/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc b/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
index 79faef7..c055cca 100644
--- a/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
+++ b/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
@@ -106,7 +106,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -176,7 +176,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -246,7 +246,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -292,7 +292,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -336,7 +336,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -380,7 +380,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -441,7 +441,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -485,7 +485,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -527,7 +527,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -571,7 +571,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -615,7 +615,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -659,7 +659,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -703,7 +703,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -747,7 +747,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -791,7 +791,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -835,7 +835,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -879,7 +879,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -914,7 +914,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -955,7 +955,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1004,7 +1004,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1039,7 +1039,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1074,7 +1074,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1110,7 +1110,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1146,7 +1146,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1183,7 +1183,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1220,7 +1220,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1260,7 +1260,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1301,7 +1301,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1338,7 +1338,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1376,7 +1376,85 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
+
+ EXPECT_EQ(expect, str());
+}
+
+TEST_F(SpirvWriter_BuiltinPolyfillTest, TextureLoad_Storage) {
+ auto format = core::TexelFormat::kR32Uint;
+ auto* t = b.FunctionParam(
+ "t", ty.Get<core::type::StorageTexture>(
+ core::type::TextureDimension::k2d, format, core::Access::kReadWrite,
+ core::type::StorageTexture::SubtypeFor(format, ty)));
+ auto* coords = b.FunctionParam("coords", ty.vec2<i32>());
+ auto* func = b.Function("foo", ty.vec4<u32>());
+ func->SetParams({t, coords});
+
+ b.Append(func->Block(), [&] {
+ auto* result = b.Call(ty.vec4<u32>(), core::BuiltinFn::kTextureLoad, t, coords);
+ b.Return(func, result);
+ });
+
+ auto* src = R"(
+%foo = func(%t:texture_storage_2d<r32uint, read_write>, %coords:vec2<i32>):vec4<u32> {
+ $B1: {
+ %4:vec4<u32> = textureLoad %t, %coords
+ ret %4
+ }
+}
+)";
+ EXPECT_EQ(src, str());
+
+ auto* expect = R"(
+%foo = func(%t:texture_storage_2d<r32uint, read_write>, %coords:vec2<i32>):vec4<u32> {
+ $B1: {
+ %4:vec4<u32> = spirv.image_read %t, %coords, 0u
+ ret %4
+ }
+}
+)";
+
+ Run(BuiltinPolyfill, false);
+
+ EXPECT_EQ(expect, str());
+}
+
+TEST_F(SpirvWriter_BuiltinPolyfillTest, TextureLoad_Storage_Vulkan) {
+ auto format = core::TexelFormat::kR32Uint;
+ auto* t = b.FunctionParam(
+ "t", ty.Get<core::type::StorageTexture>(
+ core::type::TextureDimension::k2d, format, core::Access::kReadWrite,
+ core::type::StorageTexture::SubtypeFor(format, ty)));
+ auto* coords = b.FunctionParam("coords", ty.vec2<i32>());
+ auto* func = b.Function("foo", ty.vec4<u32>());
+ func->SetParams({t, coords});
+
+ b.Append(func->Block(), [&] {
+ auto* result = b.Call(ty.vec4<u32>(), core::BuiltinFn::kTextureLoad, t, coords);
+ b.Return(func, result);
+ });
+
+ auto* src = R"(
+%foo = func(%t:texture_storage_2d<r32uint, read_write>, %coords:vec2<i32>):vec4<u32> {
+ $B1: {
+ %4:vec4<u32> = textureLoad %t, %coords
+ ret %4
+ }
+}
+)";
+ EXPECT_EQ(src, str());
+
+ auto* expect = R"(
+%foo = func(%t:texture_storage_2d<r32uint, read_write>, %coords:vec2<i32>):vec4<u32> {
+ $B1: {
+ %4:vec4<u32> = spirv.image_read %t, %coords, 1024u
+ ret %4
+ }
+}
+)";
+
+ Run(BuiltinPolyfill, true);
EXPECT_EQ(expect, str());
}
@@ -1414,7 +1492,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1452,7 +1530,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1491,7 +1569,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1533,7 +1611,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1573,7 +1651,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1613,7 +1691,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1656,7 +1734,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1695,7 +1773,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1735,7 +1813,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1778,7 +1856,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1818,7 +1896,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1858,7 +1936,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1901,7 +1979,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1942,7 +2020,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -1983,7 +2061,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2027,7 +2105,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2067,7 +2145,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2107,7 +2185,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2150,7 +2228,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2190,7 +2268,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2230,7 +2308,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2273,7 +2351,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2311,7 +2389,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2351,7 +2429,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2391,7 +2469,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2434,7 +2512,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2474,7 +2552,47 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
+
+ EXPECT_EQ(expect, str());
+}
+
+TEST_F(SpirvWriter_BuiltinPolyfillTest, TextureStore_2D_Vulkan) {
+ auto format = core::TexelFormat::kR32Uint;
+ auto* t = b.FunctionParam(
+ "t", ty.Get<core::type::StorageTexture>(
+ core::type::TextureDimension::k2d, format, core::Access::kReadWrite,
+ core::type::StorageTexture::SubtypeFor(format, ty)));
+ auto* coords = b.FunctionParam("coords", ty.vec2<i32>());
+ auto* texel = b.FunctionParam("texel", ty.vec4<u32>());
+ auto* func = b.Function("foo", ty.void_());
+ func->SetParams({t, coords, texel});
+
+ b.Append(func->Block(), [&] {
+ b.Call(ty.void_(), core::BuiltinFn::kTextureStore, t, coords, texel);
+ b.Return(func);
+ });
+
+ auto* src = R"(
+%foo = func(%t:texture_storage_2d<r32uint, read_write>, %coords:vec2<i32>, %texel:vec4<u32>):void {
+ $B1: {
+ %5:void = textureStore %t, %coords, %texel
+ ret
+ }
+}
+)";
+ EXPECT_EQ(src, str());
+
+ auto* expect = R"(
+%foo = func(%t:texture_storage_2d<r32uint, read_write>, %coords:vec2<i32>, %texel:vec4<u32>):void {
+ $B1: {
+ %5:void = spirv.image_write %t, %coords, %texel, 1024u
+ ret
+ }
+}
+)";
+
+ Run(BuiltinPolyfill, true);
EXPECT_EQ(expect, str());
}
@@ -2516,7 +2634,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2559,7 +2677,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2594,7 +2712,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2630,7 +2748,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2666,7 +2784,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2701,7 +2819,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2737,7 +2855,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2773,7 +2891,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2809,7 +2927,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2845,7 +2963,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2884,7 +3002,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2911,7 +3029,7 @@
auto* expect = src;
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2953,7 +3071,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -2987,7 +3105,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -3021,7 +3139,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -3054,7 +3172,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
@@ -3087,7 +3205,7 @@
}
)";
- Run(BuiltinPolyfill);
+ Run(BuiltinPolyfill, false);
EXPECT_EQ(expect, str());
}
diff --git a/src/tint/lang/spirv/writer/raise/raise.cc b/src/tint/lang/spirv/writer/raise/raise.cc
index 6314869..9395c87 100644
--- a/src/tint/lang/spirv/writer/raise/raise.cc
+++ b/src/tint/lang/spirv/writer/raise/raise.cc
@@ -139,7 +139,7 @@
// DemoteToHelper must come before any transform that introduces non-core instructions.
RUN_TRANSFORM(core::ir::transform::DemoteToHelper, module);
- RUN_TRANSFORM(raise::BuiltinPolyfill, module);
+ RUN_TRANSFORM(raise::BuiltinPolyfill, module, options.use_vulkan_memory_model);
RUN_TRANSFORM(raise::ExpandImplicitSplats, module);
RUN_TRANSFORM(raise::HandleMatrixArithmetic, module);
RUN_TRANSFORM(raise::MergeReturn, module);