1
- [[ group (0 ), binding (0 )]]
1
+ @ group (0 ) @ binding (0 )
2
2
var texture : texture_storage_2d <rgba8unorm , read_write >;
3
3
4
4
fn hash (value : u32 ) -> u32 {
@@ -15,8 +15,8 @@ fn randomFloat(value: u32) -> f32 {
15
15
return f32 (hash (value )) / 4294967295.0 ;
16
16
}
17
17
18
- [[ stage ( compute ), workgroup_size (8 , 8 , 1 )]]
19
- fn init ([[ builtin (global_invocation_id )]] invocation_id : vec3 <u32 >, [[ builtin (num_workgroups )]] num_workgroups : vec3 <u32 >) {
18
+ @ compute @ workgroup_size (8 , 8 , 1 )
19
+ fn init (@ builtin (global_invocation_id ) invocation_id : vec3 <u32 >, @ builtin (num_workgroups ) num_workgroups : vec3 <u32 >) {
20
20
let location = vec2 <i32 >(i32 (invocation_id . x), i32 (invocation_id . y));
21
21
let location_f32 = vec2 <f32 >(f32 (invocation_id . x), f32 (invocation_id . y));
22
22
@@ -28,24 +28,24 @@ fn init([[builtin(global_invocation_id)]] invocation_id: vec3<u32>, [[builtin(nu
28
28
}
29
29
30
30
31
- fn get (location : vec2 <i32 >, offset_x : i32 , offset_y : i32 ) -> i32 {
31
+ fn is_alive (location : vec2 <i32 >, offset_x : i32 , offset_y : i32 ) -> i32 {
32
32
let value : vec4 <f32 > = textureLoad (texture , location + vec2 <i32 >(offset_x , offset_y ));
33
33
return i32 (value . x);
34
34
}
35
35
36
36
fn count_alive (location : vec2 <i32 >) -> i32 {
37
- return get (location , - 1 , - 1 ) +
38
- get (location , - 1 , 0 ) +
39
- get (location , - 1 , 1 ) +
40
- get (location , 0 , - 1 ) +
41
- get (location , 0 , 1 ) +
42
- get (location , 1 , - 1 ) +
43
- get (location , 1 , 0 ) +
44
- get (location , 1 , 1 );
37
+ return is_alive (location , - 1 , - 1 ) +
38
+ is_alive (location , - 1 , 0 ) +
39
+ is_alive (location , - 1 , 1 ) +
40
+ is_alive (location , 0 , - 1 ) +
41
+ is_alive (location , 0 , 1 ) +
42
+ is_alive (location , 1 , - 1 ) +
43
+ is_alive (location , 1 , 0 ) +
44
+ is_alive (location , 1 , 1 );
45
45
}
46
46
47
- [[ stage ( compute ), workgroup_size (8 , 8 , 1 )]]
48
- fn update ([[ builtin (global_invocation_id )]] invocation_id : vec3 <u32 >) {
47
+ @ compute @ workgroup_size (8 , 8 , 1 )
48
+ fn update (@ builtin (global_invocation_id ) invocation_id : vec3 <u32 >) {
49
49
let location = vec2 <i32 >(i32 (invocation_id . x), i32 (invocation_id . y));
50
50
51
51
let n_alive = count_alive (location );
@@ -55,7 +55,7 @@ fn update([[builtin(global_invocation_id)]] invocation_id: vec3<u32>) {
55
55
if (n_alive == 3 ) {
56
56
alive = true ;
57
57
} else if (n_alive == 2 ) {
58
- let currently_alive = get (location , 0 , 0 );
58
+ let currently_alive = is_alive (location , 0 , 0 );
59
59
alive = bool (currently_alive );
60
60
} else {
61
61
alive = false ;
0 commit comments