Update MSL generator to handle casts of packed types.

Currently in the MSL backend we cast int values to uint in order to get
the correct WGSL behaviour for over/under flow. This fails in the case
of host shareable buffers as they use `packed` types which need to get
cast to the non-packed version first.

Bug: tint:1677
Change-Id: I57b70abaa8ca614472a26d63f19c1aef2bd64668
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/103986
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
This commit is contained in:
dan sinclair
2022-09-29 19:44:58 +00:00
committed by Dawn LUCI CQ
parent d1a5f93630
commit 2bcade246a
27 changed files with 197 additions and 30 deletions

View File

@@ -4,7 +4,7 @@ using namespace metal;
kernel void f() {
int const a = 4;
int3 const b = int3(1, 2, 3);
int3 const r = as_type<int3>((as_type<uint>(a) * as_type<uint3>(b)));
int3 const r = as_type<int3>((as_type<uint>(a) * as_type<uint3>(as_type<int3>(b))));
return;
}

View File

@@ -4,7 +4,7 @@ using namespace metal;
kernel void f() {
int3 const a = int3(1, 2, 3);
int const b = 4;
int3 const r = as_type<int3>((as_type<uint3>(a) * as_type<uint>(b)));
int3 const r = as_type<int3>((as_type<uint3>(as_type<int3>(a)) * as_type<uint>(b)));
return;
}

View File

@@ -4,7 +4,7 @@ using namespace metal;
kernel void f() {
int3 const a = int3(1, 2, 3);
int3 const b = int3(4, 5, 6);
int3 const r = as_type<int3>((as_type<uint3>(a) * as_type<uint3>(b)));
int3 const r = as_type<int3>((as_type<uint3>(as_type<int3>(a)) * as_type<uint3>(as_type<int3>(b))));
return;
}