tint: spir-v reader: fix atomicCompareExchangeWeak with var comparator

Also fix HLSL generator to unwrap the ref type when emitting the
comparator value.

Bug: tint:1185
Change-Id: I01d04ca6357e72fd5ead0f25012ab39794e65da5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/94522
Reviewed-by: Ben Clayton <bclayton@chromium.org>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
Antonio Maiorano
2022-06-23 13:14:54 +00:00
committed by Dawn LUCI CQ
parent 606abfbeae
commit f99671b830
8 changed files with 110 additions and 91 deletions

View File

@@ -1779,8 +1779,8 @@ bool GeneratorImpl::EmitWorkgroupAtomicCall(std::ostream& out,
{ // T compare_value = <compare_value>;
auto pre = line();
if (!EmitTypeAndName(pre, TypeOf(compare_value), ast::StorageClass::kNone,
ast::Access::kUndefined, compare)) {
if (!EmitTypeAndName(pre, TypeOf(compare_value)->UnwrapRef(),
ast::StorageClass::kNone, ast::Access::kUndefined, compare)) {
return false;
}
pre << " = ";

View File

@@ -3272,7 +3272,8 @@ bool Builder::GenerateAtomicBuiltin(const sem::Call* call,
value,
});
case sem::BuiltinType::kAtomicCompareExchangeWeak: {
auto comparator = GenerateExpression(call->Arguments()[1]->Declaration());
auto comparator =
GenerateExpressionWithLoadIfNeeded(call->Arguments()[1]->Declaration());
if (comparator == 0) {
return false;
}