msl: Use a struct for threadgroup memory arguments

MSL has a limit on the number of threadgroup memory arguments, so use
a struct to support an arbitrary number of workgroup variables.

Bug: tint:938
Change-Id: I40e4a8d99bc4ae074010479a56e13e2e0acdded3
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/64380
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: James Price <jrprice@google.com>
This commit is contained in:
James Price
2021-09-27 15:06:13 +00:00
committed by Tint LUCI CQ
parent b9a2f5946e
commit af8cd3b7f5
12 changed files with 1856 additions and 62 deletions

View File

@@ -1,6 +1,10 @@
#include <metal_stdlib>
using namespace metal;
struct tint_symbol_4 {
float2x3 v;
};
void tint_symbol_inner(uint local_invocation_index, threadgroup float2x3* const tint_symbol_1) {
{
*(tint_symbol_1) = float2x3();
@@ -9,8 +13,8 @@ void tint_symbol_inner(uint local_invocation_index, threadgroup float2x3* const
(void) *(tint_symbol_1);
}
kernel void tint_symbol(threadgroup float2x3* tint_symbol_2 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
tint_symbol_inner(local_invocation_index, tint_symbol_2);
kernel void tint_symbol(threadgroup tint_symbol_4* tint_symbol_3 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
tint_symbol_inner(local_invocation_index, &((*(tint_symbol_3)).v));
return;
}