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 a = 4;
int3 b = int3(0, 2, 0);
int3 const r = (a % as_type<int3>((as_type<uint3>(b) + as_type<uint3>(b))));
int3 const r = (a % as_type<int3>((as_type<uint3>(as_type<int3>(b)) + as_type<uint3>(as_type<int3>(b)))));
return;
}

View File

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