#version 430 #define SORT_SIZE 512 layout(std430, row_major) buffer ParticleDistances{ float particle_distances[]; } ; layout(std430, row_major) buffer AliveParticles1{ uint alive_particles_1[]; } ; layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in ; uniform int elements; uniform vec4 job_params; void main(); void _GLSLTK_main_1(){ uvec4 tgp = uvec4((gl_WorkGroupID.x * 256), 0, elements, clamp((elements - (gl_WorkGroupID.x * 512)), uint(0), uint(512))); uint local_id = (tgp.x + gl_LocalInvocationID.x); uint index_low = (local_id & (uint(job_params.x) - 1)); uint index_high = (2 * (local_id - index_low)); uint index = (tgp.y + (index_high + index_low)); uint candidate = (tgp.y + (index_high + (uint(job_params.y) + (uint(job_params.z) * index_low)))); if((candidate < (tgp.y + tgp.z))){ float a = particle_distances[index]; float b = particle_distances[candidate]; if((b < a)){ particle_distances[index] = b; particle_distances[candidate] = a; uint a_index = alive_particles_1[index]; uint b_index = alive_particles_1[candidate]; alive_particles_1[index] = b_index; alive_particles_1[candidate] = a_index; }; }; } void main(){ _GLSLTK_main_1(); }