1#import bevy_hanabi::vfx_common::EffectMetadata 16 pairs: array<KeyValuePair>, 21struct RawParticleBuffer { 25@group(0) @binding(0) var<storage, read_write> sort_buffer : SortBuffer; 26@group(0) @binding(1) var<storage, read> particle_buffer : RawParticleBuffer; 27@group(0) @binding(2) var<storage, read> indirect_index_buffer : array<u32>; 29@group(0) @binding(3) var<storage, read_write> effect_metadata : EffectMetadata; 32@compute @workgroup_size(64) 33fn main(@builtin(global_invocation_id) global_invocation_id: vec3<u32>) { 34 let thread_index = global_invocation_id.x; 35 let count = atomicLoad(&effect_metadata.instance_count); 36 if (thread_index >= count) { 40 let read_index = effect_metadata.ping; 41 let particle_index = indirect_index_buffer[thread_index * 3u + read_index]; 43 let particle_offset = particle_index * effect_metadata.particle_stride; 44 let key_offset = particle_offset + effect_metadata.sort_key_offset; 45 let key2_offset = particle_offset + effect_metadata.sort_key2_offset; 47 let pair_index = atomicAdd(&sort_buffer.count, 1); 48 sort_buffer.pairs[pair_index].key = particle_buffer.data[key_offset]; 49 sort_buffer.pairs[pair_index].key2 = particle_buffer.data[key2_offset]; 50 sort_buffer.pairs[pair_index].value = particle_index;