2021-07-22 19:31:05 +00:00
|
|
|
//TODO: support splatting constructors for globals?
|
2021-09-08 13:35:54 +00:00
|
|
|
let v_f32_one = vec4<f32>(1.0, 1.0, 1.0, 1.0);
|
|
|
|
let v_f32_zero = vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
|
|
let v_f32_half = vec4<f32>(0.5, 0.5, 0.5, 0.5);
|
|
|
|
let v_i32_one = vec4<i32>(1, 1, 1, 1);
|
2021-07-22 19:31:05 +00:00
|
|
|
|
|
|
|
fn builtins() -> vec4<f32> {
|
|
|
|
// select()
|
|
|
|
let condition = true;
|
|
|
|
let s1 = select(0, 1, condition);
|
|
|
|
let s2 = select(v_f32_zero, v_f32_one, condition);
|
2021-08-04 22:59:25 +00:00
|
|
|
let s3 = select(v_f32_one, v_f32_zero, vec4<bool>(false, false, false, false));
|
2021-07-22 19:31:05 +00:00
|
|
|
// mix()
|
|
|
|
let m1 = mix(v_f32_zero, v_f32_one, v_f32_half);
|
|
|
|
let m2 = mix(v_f32_zero, v_f32_one, 0.1);
|
2021-08-20 00:21:35 +00:00
|
|
|
// bitcast()
|
|
|
|
let b1 = bitcast<f32>(v_i32_one.x);
|
|
|
|
let b2 = bitcast<vec4<f32>>(v_i32_one);
|
2021-09-10 01:04:38 +00:00
|
|
|
// convert
|
|
|
|
let v_i32_zero = vec4<i32>(v_f32_zero);
|
2021-07-22 19:31:05 +00:00
|
|
|
// done
|
2021-09-10 01:04:38 +00:00
|
|
|
return vec4<f32>(vec4<i32>(s1) + v_i32_zero) + s2 + m1 + m2 + b1 + b2;
|
2021-07-22 19:31:05 +00:00
|
|
|
}
|
|
|
|
|
2021-04-27 05:10:02 +00:00
|
|
|
fn splat() -> vec4<f32> {
|
2021-04-16 21:11:18 +00:00
|
|
|
let a = (1.0 + vec2<f32>(2.0) - 3.0) / 4.0;
|
|
|
|
let b = vec4<i32>(5) % 2;
|
|
|
|
return a.xyxy + vec4<f32>(b);
|
2021-04-14 14:05:48 +00:00
|
|
|
}
|
2021-04-27 05:10:02 +00:00
|
|
|
|
|
|
|
fn unary() -> i32 {
|
|
|
|
let a = 1;
|
2022-02-15 10:05:21 +00:00
|
|
|
if !true { return a; } else { return ~a; };
|
2021-04-27 05:10:02 +00:00
|
|
|
}
|
2021-06-28 18:25:30 +00:00
|
|
|
|
2021-10-12 15:42:20 +00:00
|
|
|
fn bool_cast(x: vec3<f32>) -> vec3<f32> {
|
|
|
|
let y = vec3<bool>(x);
|
|
|
|
return vec3<f32>(y);
|
|
|
|
}
|
|
|
|
|
2021-09-03 16:19:00 +00:00
|
|
|
struct Foo {
|
2022-03-12 21:48:10 +00:00
|
|
|
a: vec4<f32>,
|
|
|
|
b: i32,
|
2022-03-27 05:35:08 +00:00
|
|
|
}
|
2021-09-03 16:19:00 +00:00
|
|
|
|
|
|
|
fn constructors() -> f32 {
|
|
|
|
var foo: Foo;
|
|
|
|
foo = Foo(vec4<f32>(1.0), 1);
|
2021-12-17 15:28:22 +00:00
|
|
|
|
|
|
|
let mat2comp = mat2x2<f32>(
|
|
|
|
1.0, 0.0,
|
|
|
|
0.0, 1.0,
|
|
|
|
);
|
|
|
|
let mat4comp = mat4x4<f32>(
|
|
|
|
1.0, 0.0, 0.0, 0.0,
|
|
|
|
0.0, 1.0, 0.0, 0.0,
|
|
|
|
0.0, 0.0, 1.0, 0.0,
|
|
|
|
0.0, 0.0, 0.0, 1.0,
|
|
|
|
);
|
|
|
|
|
2021-09-03 16:19:00 +00:00
|
|
|
return foo.a.x;
|
|
|
|
}
|
|
|
|
|
2021-10-07 20:59:39 +00:00
|
|
|
fn modulo() {
|
|
|
|
// Modulo operator on float scalar or vector must be converted to mod function for GLSL
|
|
|
|
let a = 1 % 1;
|
|
|
|
let b = 1.0 % 1.0;
|
|
|
|
let c = vec3<i32>(1) % vec3<i32>(1);
|
|
|
|
let d = vec3<f32>(1.0) % vec3<f32>(1.0);
|
|
|
|
}
|
|
|
|
|
2021-11-15 00:07:38 +00:00
|
|
|
fn scalar_times_matrix() {
|
|
|
|
let model = mat4x4<f32>(
|
|
|
|
vec4<f32>(1.0, 0.0, 0.0, 0.0),
|
|
|
|
vec4<f32>(0.0, 1.0, 0.0, 0.0),
|
|
|
|
vec4<f32>(0.0, 0.0, 1.0, 0.0),
|
|
|
|
vec4<f32>(0.0, 0.0, 0.0, 1.0),
|
|
|
|
);
|
|
|
|
|
|
|
|
let assertion: mat4x4<f32> = 2.0 * model;
|
|
|
|
}
|
|
|
|
|
2022-01-11 15:56:41 +00:00
|
|
|
fn logical() {
|
2021-12-15 22:30:33 +00:00
|
|
|
let a = true | false;
|
2021-12-15 22:38:32 +00:00
|
|
|
let b = true & false;
|
2021-12-15 22:30:33 +00:00
|
|
|
}
|
|
|
|
|
2022-01-11 15:56:41 +00:00
|
|
|
fn binary_assignment() {
|
|
|
|
var a = 1;
|
|
|
|
a += 1;
|
|
|
|
a -= 1;
|
|
|
|
a *= a;
|
|
|
|
a /= a;
|
|
|
|
a %= 1;
|
|
|
|
a ^= 0;
|
|
|
|
a &= 0;
|
2022-03-22 15:07:54 +00:00
|
|
|
a++;
|
|
|
|
a--;
|
2022-01-11 15:56:41 +00:00
|
|
|
}
|
|
|
|
|
2022-01-19 15:33:06 +00:00
|
|
|
@stage(compute) @workgroup_size(1)
|
2021-06-28 18:25:30 +00:00
|
|
|
fn main() {
|
2021-07-22 19:31:05 +00:00
|
|
|
let a = builtins();
|
|
|
|
let b = splat();
|
|
|
|
let c = unary();
|
2021-10-12 15:42:20 +00:00
|
|
|
let d = bool_cast(v_f32_one.xyz);
|
|
|
|
let e = constructors();
|
2021-10-07 20:59:39 +00:00
|
|
|
modulo();
|
2021-11-15 00:07:38 +00:00
|
|
|
scalar_times_matrix();
|
2022-01-11 15:56:41 +00:00
|
|
|
logical();
|
|
|
|
binary_assignment();
|
2021-06-28 18:25:30 +00:00
|
|
|
}
|