blob: dddbdcc3bf55ab2bd4cff5f927bd6652989980ad [file] [log] [blame]
Ben Clayton51cfe262021-07-13 12:18:13 +00001#include <metal_stdlib>
2
3using namespace metal;
James Price85d2e442021-08-23 21:45:23 +00004
Ben Claytonf47887d2022-06-24 17:01:59 +00005template<typename T, size_t N>
6struct tint_array {
7 const constant T& operator[](size_t i) const constant { return elements[i]; }
8 device T& operator[](size_t i) device { return elements[i]; }
9 const device T& operator[](size_t i) const device { return elements[i]; }
10 thread T& operator[](size_t i) thread { return elements[i]; }
11 const thread T& operator[](size_t i) const thread { return elements[i]; }
12 threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
13 const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
14 T elements[N];
Ben Clayton51cfe262021-07-13 12:18:13 +000015};
Ben Clayton8ec32a62022-02-09 23:55:51 +000016
Ben Clayton02262d82024-01-23 18:09:39 +000017#define TINT_ISOLATE_UB(VOLATILE_NAME) \
David Neto012551a2024-10-15 16:00:17 +000018 {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
Ben Clayton9be037c2024-01-19 20:58:56 +000019
James Price4d3af662023-02-27 20:21:03 +000020struct tint_packed_vec3_f32_array_element {
21 /* 0x0000 */ packed_float3 elements;
22 /* 0x000c */ tint_array<int8_t, 4> tint_pad;
23};
24
Ben Claytonf47887d2022-06-24 17:01:59 +000025struct Inner {
Zhaoming Jiang776b2212022-11-30 02:47:27 +000026 /* 0x0000 */ int scalar_i32;
27 /* 0x0004 */ float scalar_f32;
Ben Clayton51cfe262021-07-13 12:18:13 +000028};
Ben Clayton8ec32a62022-02-09 23:55:51 +000029
James Price4d3af662023-02-27 20:21:03 +000030struct S_tint_packed_vec3 {
Zhaoming Jiang776b2212022-11-30 02:47:27 +000031 /* 0x0000 */ float scalar_f32;
32 /* 0x0004 */ int scalar_i32;
33 /* 0x0008 */ uint scalar_u32;
James Price4d3af662023-02-27 20:21:03 +000034 /* 0x000c */ tint_array<int8_t, 4> tint_pad_1;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000035 /* 0x0010 */ float2 vec2_f32;
36 /* 0x0018 */ int2 vec2_i32;
37 /* 0x0020 */ uint2 vec2_u32;
James Price4d3af662023-02-27 20:21:03 +000038 /* 0x0028 */ tint_array<int8_t, 8> tint_pad_2;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000039 /* 0x0030 */ packed_float3 vec3_f32;
James Price4d3af662023-02-27 20:21:03 +000040 /* 0x003c */ tint_array<int8_t, 4> tint_pad_3;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000041 /* 0x0040 */ packed_int3 vec3_i32;
James Price4d3af662023-02-27 20:21:03 +000042 /* 0x004c */ tint_array<int8_t, 4> tint_pad_4;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000043 /* 0x0050 */ packed_uint3 vec3_u32;
James Price4d3af662023-02-27 20:21:03 +000044 /* 0x005c */ tint_array<int8_t, 4> tint_pad_5;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000045 /* 0x0060 */ float4 vec4_f32;
46 /* 0x0070 */ int4 vec4_i32;
47 /* 0x0080 */ uint4 vec4_u32;
48 /* 0x0090 */ float2x2 mat2x2_f32;
James Price4d3af662023-02-27 20:21:03 +000049 /* 0x00a0 */ tint_array<tint_packed_vec3_f32_array_element, 2> mat2x3_f32;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000050 /* 0x00c0 */ float2x4 mat2x4_f32;
51 /* 0x00e0 */ float3x2 mat3x2_f32;
James Price4d3af662023-02-27 20:21:03 +000052 /* 0x00f8 */ tint_array<int8_t, 8> tint_pad_6;
53 /* 0x0100 */ tint_array<tint_packed_vec3_f32_array_element, 3> mat3x3_f32;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000054 /* 0x0130 */ float3x4 mat3x4_f32;
55 /* 0x0160 */ float4x2 mat4x2_f32;
James Price4d3af662023-02-27 20:21:03 +000056 /* 0x0180 */ tint_array<tint_packed_vec3_f32_array_element, 4> mat4x3_f32;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000057 /* 0x01c0 */ float4x4 mat4x4_f32;
James Price4d3af662023-02-27 20:21:03 +000058 /* 0x0200 */ tint_array<tint_packed_vec3_f32_array_element, 2> arr2_vec3_f32;
Zhaoming Jiang776b2212022-11-30 02:47:27 +000059 /* 0x0220 */ Inner struct_inner;
60 /* 0x0228 */ tint_array<Inner, 4> array_struct_inner;
James Price4d3af662023-02-27 20:21:03 +000061 /* 0x0248 */ tint_array<int8_t, 8> tint_pad_7;
Ben Clayton51cfe262021-07-13 12:18:13 +000062};
63
James Price4d3af662023-02-27 20:21:03 +000064struct S {
65 float scalar_f32;
66 int scalar_i32;
67 uint scalar_u32;
68 float2 vec2_f32;
69 int2 vec2_i32;
70 uint2 vec2_u32;
71 float3 vec3_f32;
72 int3 vec3_i32;
73 uint3 vec3_u32;
74 float4 vec4_f32;
75 int4 vec4_i32;
76 uint4 vec4_u32;
77 float2x2 mat2x2_f32;
78 float2x3 mat2x3_f32;
79 float2x4 mat2x4_f32;
80 float3x2 mat3x2_f32;
81 float3x3 mat3x3_f32;
82 float3x4 mat3x4_f32;
83 float4x2 mat4x2_f32;
84 float4x3 mat4x3_f32;
85 float4x4 mat4x4_f32;
86 tint_array<float3, 2> arr2_vec3_f32;
87 Inner struct_inner;
88 tint_array<Inner, 4> array_struct_inner;
89};
90
91void assign_and_preserve_padding(device tint_array<tint_packed_vec3_f32_array_element, 2>* const dest, float2x3 value) {
92 (*(dest))[0u].elements = packed_float3(value[0u]);
93 (*(dest))[1u].elements = packed_float3(value[1u]);
James Price6176c852023-02-27 16:06:54 +000094}
95
James Price4d3af662023-02-27 20:21:03 +000096void assign_and_preserve_padding_1(device tint_array<tint_packed_vec3_f32_array_element, 3>* const dest, float3x3 value) {
97 (*(dest))[0u].elements = packed_float3(value[0u]);
98 (*(dest))[1u].elements = packed_float3(value[1u]);
99 (*(dest))[2u].elements = packed_float3(value[2u]);
James Price6176c852023-02-27 16:06:54 +0000100}
101
James Price4d3af662023-02-27 20:21:03 +0000102void assign_and_preserve_padding_2(device tint_array<tint_packed_vec3_f32_array_element, 4>* const dest, float4x3 value) {
103 (*(dest))[0u].elements = packed_float3(value[0u]);
104 (*(dest))[1u].elements = packed_float3(value[1u]);
105 (*(dest))[2u].elements = packed_float3(value[2u]);
106 (*(dest))[3u].elements = packed_float3(value[3u]);
James Price6176c852023-02-27 16:06:54 +0000107}
108
James Price4d3af662023-02-27 20:21:03 +0000109void assign_and_preserve_padding_3(device tint_array<tint_packed_vec3_f32_array_element, 2>* const dest, tint_array<float3, 2> value) {
David Neto012551a2024-10-15 16:00:17 +0000110 for(uint i = 0u; (i < 2u); i = (i + 1u)) {
111 TINT_ISOLATE_UB(tint_volatile_false);
James Price4d3af662023-02-27 20:21:03 +0000112 (*(dest))[i].elements = packed_float3(value[i]);
James Price87537962022-12-06 18:32:19 +0000113 }
114}
115
James Price4d3af662023-02-27 20:21:03 +0000116kernel void tint_symbol(device S_tint_packed_vec3* tint_symbol_4 [[buffer(0)]]) {
Zhaoming Jiang776b2212022-11-30 02:47:27 +0000117 (*(tint_symbol_4)).scalar_f32 = 0.0f;
118 (*(tint_symbol_4)).scalar_i32 = 0;
119 (*(tint_symbol_4)).scalar_u32 = 0u;
120 (*(tint_symbol_4)).vec2_f32 = float2(0.0f);
121 (*(tint_symbol_4)).vec2_i32 = int2(0);
122 (*(tint_symbol_4)).vec2_u32 = uint2(0u);
James Price4d3af662023-02-27 20:21:03 +0000123 (*(tint_symbol_4)).vec3_f32 = packed_float3(0.0f);
124 (*(tint_symbol_4)).vec3_i32 = packed_int3(0);
125 (*(tint_symbol_4)).vec3_u32 = packed_uint3(0u);
Zhaoming Jiang776b2212022-11-30 02:47:27 +0000126 (*(tint_symbol_4)).vec4_f32 = float4(0.0f);
127 (*(tint_symbol_4)).vec4_i32 = int4(0);
128 (*(tint_symbol_4)).vec4_u32 = uint4(0u);
129 (*(tint_symbol_4)).mat2x2_f32 = float2x2(float2(0.0f), float2(0.0f));
James Price6176c852023-02-27 16:06:54 +0000130 assign_and_preserve_padding(&((*(tint_symbol_4)).mat2x3_f32), float2x3(float3(0.0f), float3(0.0f)));
Zhaoming Jiang776b2212022-11-30 02:47:27 +0000131 (*(tint_symbol_4)).mat2x4_f32 = float2x4(float4(0.0f), float4(0.0f));
132 (*(tint_symbol_4)).mat3x2_f32 = float3x2(float2(0.0f), float2(0.0f), float2(0.0f));
James Price6176c852023-02-27 16:06:54 +0000133 assign_and_preserve_padding_1(&((*(tint_symbol_4)).mat3x3_f32), float3x3(float3(0.0f), float3(0.0f), float3(0.0f)));
Zhaoming Jiang776b2212022-11-30 02:47:27 +0000134 (*(tint_symbol_4)).mat3x4_f32 = float3x4(float4(0.0f), float4(0.0f), float4(0.0f));
135 (*(tint_symbol_4)).mat4x2_f32 = float4x2(float2(0.0f), float2(0.0f), float2(0.0f), float2(0.0f));
James Price6176c852023-02-27 16:06:54 +0000136 assign_and_preserve_padding_2(&((*(tint_symbol_4)).mat4x3_f32), float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f)));
Zhaoming Jiang776b2212022-11-30 02:47:27 +0000137 (*(tint_symbol_4)).mat4x4_f32 = float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f));
138 tint_array<float3, 2> const tint_symbol_1 = tint_array<float3, 2>{};
James Price6176c852023-02-27 16:06:54 +0000139 assign_and_preserve_padding_3(&((*(tint_symbol_4)).arr2_vec3_f32), tint_symbol_1);
Zhaoming Jiang776b2212022-11-30 02:47:27 +0000140 Inner const tint_symbol_2 = Inner{};
141 (*(tint_symbol_4)).struct_inner = tint_symbol_2;
142 tint_array<Inner, 4> const tint_symbol_3 = tint_array<Inner, 4>{};
143 (*(tint_symbol_4)).array_struct_inner = tint_symbol_3;
Ben Clayton51cfe262021-07-13 12:18:13 +0000144 return;
145}
146