Ben Clayton | 51cfe26 | 2021-07-13 12:18:13 +0000 | [diff] [blame] | 1 | #include <metal_stdlib> |
| 2 | |
| 3 | using namespace metal; |
James Price | 85d2e44 | 2021-08-23 21:45:23 +0000 | [diff] [blame] | 4 | |
Ben Clayton | f47887d | 2022-06-24 17:01:59 +0000 | [diff] [blame] | 5 | template<typename T, size_t N> |
| 6 | struct 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 Clayton | 51cfe26 | 2021-07-13 12:18:13 +0000 | [diff] [blame] | 15 | }; |
Ben Clayton | 8ec32a6 | 2022-02-09 23:55:51 +0000 | [diff] [blame] | 16 | |
Ben Clayton | 02262d8 | 2024-01-23 18:09:39 +0000 | [diff] [blame] | 17 | #define TINT_ISOLATE_UB(VOLATILE_NAME) \ |
David Neto | 012551a | 2024-10-15 16:00:17 +0000 | [diff] [blame] | 18 | {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;} |
Ben Clayton | 9be037c | 2024-01-19 20:58:56 +0000 | [diff] [blame] | 19 | |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 20 | struct tint_packed_vec3_f32_array_element { |
| 21 | /* 0x0000 */ packed_float3 elements; |
| 22 | /* 0x000c */ tint_array<int8_t, 4> tint_pad; |
| 23 | }; |
| 24 | |
Ben Clayton | f47887d | 2022-06-24 17:01:59 +0000 | [diff] [blame] | 25 | struct Inner { |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 26 | /* 0x0000 */ int scalar_i32; |
| 27 | /* 0x0004 */ float scalar_f32; |
Ben Clayton | 51cfe26 | 2021-07-13 12:18:13 +0000 | [diff] [blame] | 28 | }; |
Ben Clayton | 8ec32a6 | 2022-02-09 23:55:51 +0000 | [diff] [blame] | 29 | |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 30 | struct S_tint_packed_vec3 { |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 31 | /* 0x0000 */ float scalar_f32; |
| 32 | /* 0x0004 */ int scalar_i32; |
| 33 | /* 0x0008 */ uint scalar_u32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 34 | /* 0x000c */ tint_array<int8_t, 4> tint_pad_1; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 35 | /* 0x0010 */ float2 vec2_f32; |
| 36 | /* 0x0018 */ int2 vec2_i32; |
| 37 | /* 0x0020 */ uint2 vec2_u32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 38 | /* 0x0028 */ tint_array<int8_t, 8> tint_pad_2; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 39 | /* 0x0030 */ packed_float3 vec3_f32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 40 | /* 0x003c */ tint_array<int8_t, 4> tint_pad_3; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 41 | /* 0x0040 */ packed_int3 vec3_i32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 42 | /* 0x004c */ tint_array<int8_t, 4> tint_pad_4; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 43 | /* 0x0050 */ packed_uint3 vec3_u32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 44 | /* 0x005c */ tint_array<int8_t, 4> tint_pad_5; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 45 | /* 0x0060 */ float4 vec4_f32; |
| 46 | /* 0x0070 */ int4 vec4_i32; |
| 47 | /* 0x0080 */ uint4 vec4_u32; |
| 48 | /* 0x0090 */ float2x2 mat2x2_f32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 49 | /* 0x00a0 */ tint_array<tint_packed_vec3_f32_array_element, 2> mat2x3_f32; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 50 | /* 0x00c0 */ float2x4 mat2x4_f32; |
| 51 | /* 0x00e0 */ float3x2 mat3x2_f32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 52 | /* 0x00f8 */ tint_array<int8_t, 8> tint_pad_6; |
| 53 | /* 0x0100 */ tint_array<tint_packed_vec3_f32_array_element, 3> mat3x3_f32; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 54 | /* 0x0130 */ float3x4 mat3x4_f32; |
| 55 | /* 0x0160 */ float4x2 mat4x2_f32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 56 | /* 0x0180 */ tint_array<tint_packed_vec3_f32_array_element, 4> mat4x3_f32; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 57 | /* 0x01c0 */ float4x4 mat4x4_f32; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 58 | /* 0x0200 */ tint_array<tint_packed_vec3_f32_array_element, 2> arr2_vec3_f32; |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 59 | /* 0x0220 */ Inner struct_inner; |
| 60 | /* 0x0228 */ tint_array<Inner, 4> array_struct_inner; |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 61 | /* 0x0248 */ tint_array<int8_t, 8> tint_pad_7; |
Ben Clayton | 51cfe26 | 2021-07-13 12:18:13 +0000 | [diff] [blame] | 62 | }; |
| 63 | |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 64 | struct 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 | |
| 91 | void 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 Price | 6176c85 | 2023-02-27 16:06:54 +0000 | [diff] [blame] | 94 | } |
| 95 | |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 96 | void 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 Price | 6176c85 | 2023-02-27 16:06:54 +0000 | [diff] [blame] | 100 | } |
| 101 | |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 102 | void 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 Price | 6176c85 | 2023-02-27 16:06:54 +0000 | [diff] [blame] | 107 | } |
| 108 | |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 109 | void assign_and_preserve_padding_3(device tint_array<tint_packed_vec3_f32_array_element, 2>* const dest, tint_array<float3, 2> value) { |
David Neto | 012551a | 2024-10-15 16:00:17 +0000 | [diff] [blame] | 110 | for(uint i = 0u; (i < 2u); i = (i + 1u)) { |
| 111 | TINT_ISOLATE_UB(tint_volatile_false); |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 112 | (*(dest))[i].elements = packed_float3(value[i]); |
James Price | 8753796 | 2022-12-06 18:32:19 +0000 | [diff] [blame] | 113 | } |
| 114 | } |
| 115 | |
James Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 116 | kernel void tint_symbol(device S_tint_packed_vec3* tint_symbol_4 [[buffer(0)]]) { |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 117 | (*(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 Price | 4d3af66 | 2023-02-27 20:21:03 +0000 | [diff] [blame] | 123 | (*(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 Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 126 | (*(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 Price | 6176c85 | 2023-02-27 16:06:54 +0000 | [diff] [blame] | 130 | assign_and_preserve_padding(&((*(tint_symbol_4)).mat2x3_f32), float2x3(float3(0.0f), float3(0.0f))); |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 131 | (*(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 Price | 6176c85 | 2023-02-27 16:06:54 +0000 | [diff] [blame] | 133 | assign_and_preserve_padding_1(&((*(tint_symbol_4)).mat3x3_f32), float3x3(float3(0.0f), float3(0.0f), float3(0.0f))); |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 134 | (*(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 Price | 6176c85 | 2023-02-27 16:06:54 +0000 | [diff] [blame] | 136 | assign_and_preserve_padding_2(&((*(tint_symbol_4)).mat4x3_f32), float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f))); |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 137 | (*(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 Price | 6176c85 | 2023-02-27 16:06:54 +0000 | [diff] [blame] | 139 | assign_and_preserve_padding_3(&((*(tint_symbol_4)).arr2_vec3_f32), tint_symbol_1); |
Zhaoming Jiang | 776b221 | 2022-11-30 02:47:27 +0000 | [diff] [blame] | 140 | 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 Clayton | 51cfe26 | 2021-07-13 12:18:13 +0000 | [diff] [blame] | 144 | return; |
| 145 | } |
| 146 | |