mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
[wgsl-in] support const-expressions in attributes allow `Splat` as an evaluated const-expression type
216 lines
8.4 KiB
Plaintext
216 lines
8.4 KiB
Plaintext
// language: metal2.0
|
|
#include <metal_stdlib>
|
|
#include <simd/simd.h>
|
|
|
|
using metal::uint;
|
|
|
|
constant metal::float4 v_f32_one = metal::float4(1.0, 1.0, 1.0, 1.0);
|
|
constant metal::float4 v_f32_zero = metal::float4(0.0, 0.0, 0.0, 0.0);
|
|
constant metal::float4 v_f32_half = metal::float4(0.5, 0.5, 0.5, 0.5);
|
|
constant metal::int4 v_i32_one = metal::int4(1, 1, 1, 1);
|
|
|
|
metal::float4 builtins(
|
|
) {
|
|
int s1_ = true ? 1 : 0;
|
|
metal::float4 s2_ = true ? v_f32_one : v_f32_zero;
|
|
metal::float4 s3_ = metal::select(v_f32_one, v_f32_zero, metal::bool4(false, false, false, false));
|
|
metal::float4 m1_ = metal::mix(v_f32_zero, v_f32_one, v_f32_half);
|
|
metal::float4 m2_ = metal::mix(v_f32_zero, v_f32_one, 0.1);
|
|
float b1_ = as_type<float>(1);
|
|
metal::float4 b2_ = as_type<metal::float4>(v_i32_one);
|
|
metal::int4 v_i32_zero = metal::int4(0, 0, 0, 0);
|
|
return ((((static_cast<metal::float4>(metal::int4(s1_) + v_i32_zero) + s2_) + m1_) + m2_) + metal::float4(b1_)) + b2_;
|
|
}
|
|
|
|
metal::float4 splat(
|
|
) {
|
|
metal::float2 a_2 = ((metal::float2(1.0) + metal::float2(2.0)) - metal::float2(3.0)) / metal::float2(4.0);
|
|
metal::int4 b = metal::int4(5) % metal::int4(2);
|
|
return a_2.xyxy + static_cast<metal::float4>(b);
|
|
}
|
|
|
|
metal::float2 splat_assignment(
|
|
) {
|
|
metal::float2 a = {};
|
|
a = metal::float2(2.0);
|
|
metal::float2 _e4 = a;
|
|
a = _e4 + metal::float2(1.0);
|
|
metal::float2 _e8 = a;
|
|
a = _e8 - metal::float2(3.0);
|
|
metal::float2 _e12 = a;
|
|
a = _e12 / metal::float2(4.0);
|
|
metal::float2 _e15 = a;
|
|
return _e15;
|
|
}
|
|
|
|
metal::float3 bool_cast(
|
|
metal::float3 x
|
|
) {
|
|
metal::bool3 y = static_cast<metal::bool3>(x);
|
|
return static_cast<metal::float3>(y);
|
|
}
|
|
|
|
void logical(
|
|
) {
|
|
metal::bool2 neg1_ = metal::bool2(false, false);
|
|
bool bitwise_or0_ = true | false;
|
|
metal::bool3 bitwise_or1_ = metal::bool3(true) | metal::bool3(false);
|
|
bool bitwise_and0_ = true & false;
|
|
metal::bool4 bitwise_and1_ = metal::bool4(true) & metal::bool4(false);
|
|
}
|
|
|
|
void arithmetic(
|
|
) {
|
|
metal::int2 neg1_1 = metal::int2(-1, -1);
|
|
metal::float2 neg2_ = metal::float2(-1.0, -1.0);
|
|
metal::int2 add3_ = metal::int2(2) + metal::int2(1);
|
|
metal::uint3 add4_ = metal::uint3(2u) + metal::uint3(1u);
|
|
metal::float4 add5_ = metal::float4(2.0) + metal::float4(1.0);
|
|
metal::int2 sub3_ = metal::int2(2) - metal::int2(1);
|
|
metal::uint3 sub4_ = metal::uint3(2u) - metal::uint3(1u);
|
|
metal::float4 sub5_ = metal::float4(2.0) - metal::float4(1.0);
|
|
metal::int2 mul3_ = metal::int2(2) * metal::int2(1);
|
|
metal::uint3 mul4_ = metal::uint3(2u) * metal::uint3(1u);
|
|
metal::float4 mul5_ = metal::float4(2.0) * metal::float4(1.0);
|
|
metal::int2 div3_ = metal::int2(2) / metal::int2(1);
|
|
metal::uint3 div4_ = metal::uint3(2u) / metal::uint3(1u);
|
|
metal::float4 div5_ = metal::float4(2.0) / metal::float4(1.0);
|
|
metal::int2 rem3_ = metal::int2(2) % metal::int2(1);
|
|
metal::uint3 rem4_ = metal::uint3(2u) % metal::uint3(1u);
|
|
metal::float4 rem5_ = metal::fmod(metal::float4(2.0), metal::float4(1.0));
|
|
{
|
|
metal::int2 add0_ = metal::int2(2) + metal::int2(1);
|
|
metal::int2 add1_ = metal::int2(2) + metal::int2(1);
|
|
metal::uint2 add2_ = metal::uint2(2u) + metal::uint2(1u);
|
|
metal::uint2 add3_1 = metal::uint2(2u) + metal::uint2(1u);
|
|
metal::float2 add4_1 = metal::float2(2.0) + metal::float2(1.0);
|
|
metal::float2 add5_1 = metal::float2(2.0) + metal::float2(1.0);
|
|
metal::int2 sub0_ = metal::int2(2) - metal::int2(1);
|
|
metal::int2 sub1_ = metal::int2(2) - metal::int2(1);
|
|
metal::uint2 sub2_ = metal::uint2(2u) - metal::uint2(1u);
|
|
metal::uint2 sub3_1 = metal::uint2(2u) - metal::uint2(1u);
|
|
metal::float2 sub4_1 = metal::float2(2.0) - metal::float2(1.0);
|
|
metal::float2 sub5_1 = metal::float2(2.0) - metal::float2(1.0);
|
|
metal::int2 mul0_ = metal::int2(2, 2);
|
|
metal::int2 mul1_ = metal::int2(2, 2);
|
|
metal::uint2 mul2_ = metal::uint2(2u, 2u);
|
|
metal::uint2 mul3_1 = metal::uint2(2u, 2u);
|
|
metal::float2 mul4_1 = metal::float2(2.0, 2.0);
|
|
metal::float2 mul5_1 = metal::float2(2.0, 2.0);
|
|
metal::int2 div0_ = metal::int2(2) / metal::int2(1);
|
|
metal::int2 div1_ = metal::int2(2) / metal::int2(1);
|
|
metal::uint2 div2_ = metal::uint2(2u) / metal::uint2(1u);
|
|
metal::uint2 div3_1 = metal::uint2(2u) / metal::uint2(1u);
|
|
metal::float2 div4_1 = metal::float2(2.0) / metal::float2(1.0);
|
|
metal::float2 div5_1 = metal::float2(2.0) / metal::float2(1.0);
|
|
metal::int2 rem0_ = metal::int2(2) % metal::int2(1);
|
|
metal::int2 rem1_ = metal::int2(2) % metal::int2(1);
|
|
metal::uint2 rem2_ = metal::uint2(2u) % metal::uint2(1u);
|
|
metal::uint2 rem3_1 = metal::uint2(2u) % metal::uint2(1u);
|
|
metal::float2 rem4_1 = metal::fmod(metal::float2(2.0), metal::float2(1.0));
|
|
metal::float2 rem5_1 = metal::fmod(metal::float2(2.0), metal::float2(1.0));
|
|
}
|
|
metal::float3x3 add = metal::float3x3 {} + metal::float3x3 {};
|
|
metal::float3x3 sub = metal::float3x3 {} - metal::float3x3 {};
|
|
metal::float3x3 mul_scalar0_ = metal::float3x3(metal::float3(0.0, 0.0, 0.0), metal::float3(0.0, 0.0, 0.0), metal::float3(0.0, 0.0, 0.0));
|
|
metal::float3x3 mul_scalar1_ = metal::float3x3(metal::float3(0.0, 0.0, 0.0), metal::float3(0.0, 0.0, 0.0), metal::float3(0.0, 0.0, 0.0));
|
|
metal::float3 mul_vector0_ = metal::float4x3 {} * metal::float4(1.0);
|
|
metal::float4 mul_vector1_ = metal::float3(2.0) * metal::float4x3 {};
|
|
metal::float3x3 mul = metal::float4x3 {} * metal::float3x4 {};
|
|
}
|
|
|
|
void bit(
|
|
) {
|
|
metal::int2 flip2_ = metal::int2(-2, -2);
|
|
metal::uint3 flip3_ = metal::uint3(4294967294u, 4294967294u, 4294967294u);
|
|
metal::int2 or2_ = metal::int2(2) | metal::int2(1);
|
|
metal::uint3 or3_ = metal::uint3(2u) | metal::uint3(1u);
|
|
metal::int2 and2_ = metal::int2(2) & metal::int2(1);
|
|
metal::uint3 and3_ = metal::uint3(2u) & metal::uint3(1u);
|
|
metal::int2 xor2_ = metal::int2(2) ^ metal::int2(1);
|
|
metal::uint3 xor3_ = metal::uint3(2u) ^ metal::uint3(1u);
|
|
metal::int2 shl2_ = metal::int2(2) << metal::uint2(1u);
|
|
metal::uint3 shl3_ = metal::uint3(2u) << metal::uint3(1u);
|
|
metal::int2 shr2_ = metal::int2(2) >> metal::uint2(1u);
|
|
metal::uint3 shr3_ = metal::uint3(2u) >> metal::uint3(1u);
|
|
}
|
|
|
|
void comparison(
|
|
) {
|
|
metal::bool2 eq3_ = metal::int2(2) == metal::int2(1);
|
|
metal::bool3 eq4_ = metal::uint3(2u) == metal::uint3(1u);
|
|
metal::bool4 eq5_ = metal::float4(2.0) == metal::float4(1.0);
|
|
metal::bool2 neq3_ = metal::int2(2) != metal::int2(1);
|
|
metal::bool3 neq4_ = metal::uint3(2u) != metal::uint3(1u);
|
|
metal::bool4 neq5_ = metal::float4(2.0) != metal::float4(1.0);
|
|
metal::bool2 lt3_ = metal::int2(2) < metal::int2(1);
|
|
metal::bool3 lt4_ = metal::uint3(2u) < metal::uint3(1u);
|
|
metal::bool4 lt5_ = metal::float4(2.0) < metal::float4(1.0);
|
|
metal::bool2 lte3_ = metal::int2(2) <= metal::int2(1);
|
|
metal::bool3 lte4_ = metal::uint3(2u) <= metal::uint3(1u);
|
|
metal::bool4 lte5_ = metal::float4(2.0) <= metal::float4(1.0);
|
|
metal::bool2 gt3_ = metal::int2(2) > metal::int2(1);
|
|
metal::bool3 gt4_ = metal::uint3(2u) > metal::uint3(1u);
|
|
metal::bool4 gt5_ = metal::float4(2.0) > metal::float4(1.0);
|
|
metal::bool2 gte3_ = metal::int2(2) >= metal::int2(1);
|
|
metal::bool3 gte4_ = metal::uint3(2u) >= metal::uint3(1u);
|
|
metal::bool4 gte5_ = metal::float4(2.0) >= metal::float4(1.0);
|
|
}
|
|
|
|
void assignment(
|
|
) {
|
|
int a_1 = {};
|
|
metal::int3 vec0_ = {};
|
|
a_1 = 1;
|
|
int _e3 = a_1;
|
|
a_1 = _e3 + 1;
|
|
int _e6 = a_1;
|
|
a_1 = _e6 - 1;
|
|
int _e8 = a_1;
|
|
int _e9 = a_1;
|
|
a_1 = _e9 * _e8;
|
|
int _e11 = a_1;
|
|
int _e12 = a_1;
|
|
a_1 = _e12 / _e11;
|
|
int _e15 = a_1;
|
|
a_1 = _e15 % 1;
|
|
int _e18 = a_1;
|
|
a_1 = _e18 & 0;
|
|
int _e21 = a_1;
|
|
a_1 = _e21 | 0;
|
|
int _e24 = a_1;
|
|
a_1 = _e24 ^ 0;
|
|
int _e27 = a_1;
|
|
a_1 = _e27 << 2u;
|
|
int _e30 = a_1;
|
|
a_1 = _e30 >> 1u;
|
|
int _e33 = a_1;
|
|
a_1 = _e33 + 1;
|
|
int _e36 = a_1;
|
|
a_1 = _e36 - 1;
|
|
vec0_ = metal::int3 {};
|
|
int _e42 = vec0_.y;
|
|
vec0_.y = _e42 + 1;
|
|
int _e46 = vec0_.y;
|
|
vec0_.y = _e46 - 1;
|
|
return;
|
|
}
|
|
|
|
void negation_avoids_prefix_decrement(
|
|
) {
|
|
return;
|
|
}
|
|
|
|
kernel void main_(
|
|
) {
|
|
metal::float4 _e0 = builtins();
|
|
metal::float4 _e1 = splat();
|
|
metal::float3 _e6 = bool_cast(metal::float3(1.0, 1.0, 1.0));
|
|
logical();
|
|
arithmetic();
|
|
bit();
|
|
comparison();
|
|
assignment();
|
|
return;
|
|
}
|