[spirv-reader] Fix storageBarrier emission
WGSL's `storageBarrier()` builtin has a memory scope of `Workgroup`,
not `Device`.
Change-Id: Ie627c27a5f247542c5b06d37e2f0f1f8f837e042
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/146260
Reviewed-by: David Neto <dneto@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/lang/spirv/reader/ast_parser/barrier_test.cc b/src/tint/lang/spirv/reader/ast_parser/barrier_test.cc
index 42d57ca..5aa0678 100644
--- a/src/tint/lang/spirv/reader/ast_parser/barrier_test.cc
+++ b/src/tint/lang/spirv/reader/ast_parser/barrier_test.cc
@@ -87,7 +87,7 @@
%uint_72 = OpConstant %uint 72
%helper = OpFunction %void None %1
%4 = OpLabel
- OpControlBarrier %uint_2 %uint_1 %uint_72
+ OpControlBarrier %uint_2 %uint_2 %uint_72
OpReturn
OpFunctionEnd
%main = OpFunction %void None %1
@@ -187,18 +187,18 @@
%void = OpTypeVoid
%1 = OpTypeFunction %void
%uint = OpTypeInt 32 0
+ %uint_1 = OpConstant %uint 1
%uint_2 = OpConstant %uint 2
- %uint_8 = OpConstant %uint 8
%uint_72 = OpConstant %uint 72
%main = OpFunction %void None %1
%4 = OpLabel
- OpControlBarrier %uint_2 %uint_8 %uint_72
+ OpControlBarrier %uint_2 %uint_1 %uint_72
OpReturn
OpFunctionEnd
)");
EXPECT_FALSE(program.IsValid());
EXPECT_THAT(program.Diagnostics().str(),
- HasSubstr("storageBarrier requires device memory scope"));
+ HasSubstr("storageBarrier requires workgroup memory scope"));
}
} // namespace
diff --git a/src/tint/lang/spirv/reader/ast_parser/function.cc b/src/tint/lang/spirv/reader/ast_parser/function.cc
index 895efcf..8316aa2 100644
--- a/src/tint/lang/spirv/reader/ast_parser/function.cc
+++ b/src/tint/lang/spirv/reader/ast_parser/function.cc
@@ -5299,8 +5299,8 @@
semantics &= ~static_cast<uint32_t>(spv::MemorySemanticsMask::WorkgroupMemory);
}
if (semantics & uint32_t(spv::MemorySemanticsMask::UniformMemory)) {
- if (memory != uint32_t(spv::Scope::Device)) {
- return Fail() << "storageBarrier requires device memory scope";
+ if (memory != uint32_t(spv::Scope::Workgroup)) {
+ return Fail() << "storageBarrier requires workgroup memory scope";
}
AddStatement(builder_.CallStmt(builder_.Call("storageBarrier")));
semantics &= ~static_cast<uint32_t>(spv::MemorySemanticsMask::UniformMemory);