struct GridGeneric_std430_0
{
@align(4) num_active_blocks_0 : u32,
@align(4) cell_width_0 : f32,
@align(4) hmap_capacity_0 : u32,
@align(4) capacity_0 : u32,
};
@binding(0) @group(0) var<storage, read> entryPointParams_grid_0 : array<GridGeneric_std430_0>;
struct BlockVirtualId_std430_0
{
@align(16) id_0 : vec3<i32>,
};
struct BlockHeaderId_std430_0
{
@align(4) id_1 : u32,
};
struct GridHashMapEntryGeneric_std430_0
{
@align(16) state_0 : u32,
@align(16) key_0 : BlockVirtualId_std430_0,
@align(16) value_0 : BlockHeaderId_std430_0,
};
@binding(1) @group(0) var<storage, read> entryPointParams_hmap_entries_0 : array<GridHashMapEntryGeneric_std430_0>;
struct ActiveBlockHeaderGeneric_std430_0
{
@align(16) virtual_id_0 : BlockVirtualId_std430_0,
@align(16) first_particle_0 : u32,
@align(4) num_particles_0 : u32,
};
@binding(2) @group(0) var<storage, read> entryPointParams_active_blocks_0 : array<ActiveBlockHeaderGeneric_std430_0>;
struct NodeLinkedListGeneric_std430_0
{
@align(4) head_0 : u32,
@align(4) len_0 : u32,
};
@binding(3) @group(0) var<storage, read> entryPointParams_rigid_nodes_linked_lists_0 : array<NodeLinkedListGeneric_std430_0>;
@binding(4) @group(0) var<storage, read> entryPointParams_particle_node_linked_lists_0 : array<u32>;
@binding(5) @group(0) var<storage, read> entryPointParams_collider_vertices_0 : array<vec3<f32>>;
struct RigidParticleIndices_std430_0
{
@align(16) triangle_0 : vec3<u32>,
@align(4) collider_0 : u32,
};
@binding(6) @group(0) var<storage, read> entryPointParams_rigid_particle_indices_0 : array<RigidParticleIndices_std430_0>;
struct NodeCdf_std430_0
{
@align(4) distance_0 : f32,
@align(4) affinities_0 : u32,
@align(4) closest_id_0 : u32,
};
struct Node_std430_0
{
@align(16) momentum_velocity_mass_0 : vec4<f32>,
@align(16) cdf_0 : NodeCdf_std430_0,
};
@binding(7) @group(0) var<storage, read_write> entryPointParams_nodes_0 : array<Node_std430_0>;
var<workgroup> max_linked_list_length_0 : atomic<u32>;
struct BlockVirtualId_0
{
id_0 : vec3<i32>,
};
fn BlockVirtualId_x24init_0( i_0 : vec3<i32>) -> BlockVirtualId_0
{
var _S1 : BlockVirtualId_0;
_S1.id_0 = i_0;
return _S1;
}
fn pack_key_0( key_1 : BlockVirtualId_0) -> u32
{
return (((((bitcast<u32>(key_1.id_0.x + i32(1023)) & (u32(2047)))) | (((((bitcast<u32>(key_1.id_0.y + i32(511)) & (u32(1023)))) << (u32(11))))))) | (((((bitcast<u32>(key_1.id_0.z + i32(1023)) & (u32(2047)))) << (u32(21))))));
}
fn hash_0( packed_key_0 : u32) -> u32
{
var key_2 : u32 = packed_key_0 * u32(3432918353);
return ((((key_2 << (u32(15)))) | (((key_2 >> (u32(17))))))) * u32(461845907);
}
struct BlockHeaderId_0
{
id_1 : u32,
};
fn BlockHeaderId_x24init_0( i_1 : u32) -> BlockHeaderId_0
{
var _S2 : BlockHeaderId_0;
_S2.id_1 = i_1;
return _S2;
}
struct BlockPhysicalId_0
{
id_2 : u32,
};
fn BlockPhysicalId_x24init_0( i_2 : u32) -> BlockPhysicalId_0
{
var _S3 : BlockPhysicalId_0;
_S3.id_2 = i_2;
return _S3;
}
fn block_header_id_to_physical_id_0( hid_0 : BlockHeaderId_0) -> BlockPhysicalId_0
{
return BlockPhysicalId_x24init_0(hid_0.id_1 * u32(64));
}
struct NodePhysicalId_0
{
id_3 : u32,
};
fn NodePhysicalId_x24init_0( i_3 : u32) -> NodePhysicalId_0
{
var _S4 : NodePhysicalId_0;
_S4.id_3 = i_3;
return _S4;
}
fn node_id_0( pid_0 : BlockPhysicalId_0, shift_in_block_0 : vec3<u32>) -> NodePhysicalId_0
{
return NodePhysicalId_x24init_0(pid_0.id_2 + shift_in_block_0.x + shift_in_block_0.y * u32(4) + shift_in_block_0.z * u32(4) * u32(4));
}
var<workgroup> max_linked_list_length_uniform_0 : u32;
fn flatten_shared_index_0( x_0 : u32, y_0 : u32, z_0 : u32) -> u32
{
return x_0 - u32(2) + (y_0 - u32(2)) * u32(6) + (z_0 - u32(2)) * u32(6) * u32(6);
}
struct SharedNode_0
{
particle_id_0 : u32,
global_id_0 : u32,
};
var<workgroup> shared_nodes_0 : array<SharedNode_0, i32(216)>;
var<workgroup> shared_collider_ids_0 : array<u32, i32(216)>;
struct Triangle_0
{
a_0 : vec3<f32>,
b_0 : vec3<f32>,
c_0 : vec3<f32>,
};
var<workgroup> shared_primitives_0 : array<Triangle_0, i32(216)>;
fn Triangle_x24init_0( a_1 : vec3<f32>, b_1 : vec3<f32>, c_1 : vec3<f32>) -> Triangle_0
{
var _S5 : Triangle_0;
_S5.a_0 = a_1;
_S5.b_0 = b_1;
_S5.c_0 = c_1;
return _S5;
}
fn flatten_shared_shift_0( x_1 : u32, y_1 : u32, z_1 : u32) -> u32
{
return x_1 + y_1 * u32(6) + z_1 * u32(6) * u32(6);
}
struct NodeCdf_0
{
distance_0 : f32,
affinities_0 : u32,
closest_id_0 : u32,
};
fn NodeCdf_x24init_0( distance_1 : f32, affinities_1 : u32, closest_id_1 : u32) -> NodeCdf_0
{
var _S6 : NodeCdf_0;
_S6.distance_0 = distance_1;
_S6.affinities_0 = affinities_1;
_S6.closest_id_0 = closest_id_1;
return _S6;
}
fn p2g_step_0( packed_cell_index_in_block_0 : u32, cell_width_1 : f32, cell_pos_0 : vec3<f32>) -> NodeCdf_0
{
var _S7 : u32;
var _S8 : u32 = flatten_shared_shift_0(u32(2), u32(2), u32(2));
var result_0 : NodeCdf_0 = NodeCdf_x24init_0(1.0e+10f, u32(0), u32(4294967295));
for(;;)
{
var _S9 : bool;
for(;;)
{
for(;;)
{
var _S10 : u32 = packed_cell_index_in_block_0 - _S8;
_S7 = _S10;
var _S11 : u32 = _S10 + u32(86);
var _S12 : u32 = shared_collider_ids_0[_S11];
if((shared_collider_ids_0[_S11]) == u32(4294967295))
{
break;
}
var _S13 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S11].a_0;
var _S14 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S11].b_0;
var _S15 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S11].c_0;
var _S16 : vec3<f32> = shared_primitives_0[_S11].b_0 - shared_primitives_0[_S11].a_0;
var _S17 : vec3<f32> = shared_primitives_0[_S11].c_0 - shared_primitives_0[_S11].a_0;
var _S18 : vec3<f32> = shared_primitives_0[_S11].c_0 - shared_primitives_0[_S11].b_0;
var _S19 : vec3<f32> = cross(_S16, _S17);
var _S20 : f32 = length(_S19);
if(_S20 != 0.0f)
{
_S9 = (dot(cross(_S16, _S19), _S13)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S18, _S19), _S14)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S17, _S19), _S15)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S21 : f32 = dot(_S19, _S13) / _S20;
var _S22 : f32 = abs(_S21);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S12))) | (((u32(_S21 < 0.0f) << ((_S12 + u32(16))))))))));
if(_S22 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S22);
result_0.closest_id_0 = _S12;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S23 : u32 = _S7 + u32(74);
var _S24 : u32 = shared_collider_ids_0[_S23];
if((shared_collider_ids_0[_S23]) == u32(4294967295))
{
break;
}
var _S25 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S23].a_0;
var _S26 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S23].b_0;
var _S27 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S23].c_0;
var _S28 : vec3<f32> = shared_primitives_0[_S23].b_0 - shared_primitives_0[_S23].a_0;
var _S29 : vec3<f32> = shared_primitives_0[_S23].c_0 - shared_primitives_0[_S23].a_0;
var _S30 : vec3<f32> = shared_primitives_0[_S23].c_0 - shared_primitives_0[_S23].b_0;
var _S31 : vec3<f32> = cross(_S28, _S29);
var _S32 : f32 = length(_S31);
if(_S32 != 0.0f)
{
_S9 = (dot(cross(_S28, _S31), _S25)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S30, _S31), _S26)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S29, _S31), _S27)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S33 : f32 = dot(_S31, _S25) / _S32;
var _S34 : f32 = abs(_S33);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S24))) | (((u32(_S33 < 0.0f) << ((_S24 + u32(16))))))))));
if(_S34 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S34);
result_0.closest_id_0 = _S24;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S35 : u32 = _S7 + u32(80);
var _S36 : u32 = shared_collider_ids_0[_S35];
if((shared_collider_ids_0[_S35]) == u32(4294967295))
{
break;
}
var _S37 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S35].a_0;
var _S38 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S35].b_0;
var _S39 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S35].c_0;
var _S40 : vec3<f32> = shared_primitives_0[_S35].b_0 - shared_primitives_0[_S35].a_0;
var _S41 : vec3<f32> = shared_primitives_0[_S35].c_0 - shared_primitives_0[_S35].a_0;
var _S42 : vec3<f32> = shared_primitives_0[_S35].c_0 - shared_primitives_0[_S35].b_0;
var _S43 : vec3<f32> = cross(_S40, _S41);
var _S44 : f32 = length(_S43);
if(_S44 != 0.0f)
{
_S9 = (dot(cross(_S40, _S43), _S37)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S42, _S43), _S38)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S41, _S43), _S39)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S45 : f32 = dot(_S43, _S37) / _S44;
var _S46 : f32 = abs(_S45);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S36))) | (((u32(_S45 < 0.0f) << ((_S36 + u32(16))))))))));
if(_S46 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S46);
result_0.closest_id_0 = _S36;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S47 : u32 = _S7 + u32(84);
var _S48 : u32 = shared_collider_ids_0[_S47];
if((shared_collider_ids_0[_S47]) == u32(4294967295))
{
break;
}
var _S49 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S47].a_0;
var _S50 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S47].b_0;
var _S51 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S47].c_0;
var _S52 : vec3<f32> = shared_primitives_0[_S47].b_0 - shared_primitives_0[_S47].a_0;
var _S53 : vec3<f32> = shared_primitives_0[_S47].c_0 - shared_primitives_0[_S47].a_0;
var _S54 : vec3<f32> = shared_primitives_0[_S47].c_0 - shared_primitives_0[_S47].b_0;
var _S55 : vec3<f32> = cross(_S52, _S53);
var _S56 : f32 = length(_S55);
if(_S56 != 0.0f)
{
_S9 = (dot(cross(_S52, _S55), _S49)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S54, _S55), _S50)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S53, _S55), _S51)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S57 : f32 = dot(_S55, _S49) / _S56;
var _S58 : f32 = abs(_S57);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S48))) | (((u32(_S57 < 0.0f) << ((_S48 + u32(16))))))))));
if(_S58 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S58);
result_0.closest_id_0 = _S48;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S59 : u32 = _S7 + u32(72);
var _S60 : u32 = shared_collider_ids_0[_S59];
if((shared_collider_ids_0[_S59]) == u32(4294967295))
{
break;
}
var _S61 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S59].a_0;
var _S62 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S59].b_0;
var _S63 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S59].c_0;
var _S64 : vec3<f32> = shared_primitives_0[_S59].b_0 - shared_primitives_0[_S59].a_0;
var _S65 : vec3<f32> = shared_primitives_0[_S59].c_0 - shared_primitives_0[_S59].a_0;
var _S66 : vec3<f32> = shared_primitives_0[_S59].c_0 - shared_primitives_0[_S59].b_0;
var _S67 : vec3<f32> = cross(_S64, _S65);
var _S68 : f32 = length(_S67);
if(_S68 != 0.0f)
{
_S9 = (dot(cross(_S64, _S67), _S61)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S66, _S67), _S62)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S65, _S67), _S63)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S69 : f32 = dot(_S67, _S61) / _S68;
var _S70 : f32 = abs(_S69);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S60))) | (((u32(_S69 < 0.0f) << ((_S60 + u32(16))))))))));
if(_S70 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S70);
result_0.closest_id_0 = _S60;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S71 : u32 = _S7 + u32(78);
var _S72 : u32 = shared_collider_ids_0[_S71];
if((shared_collider_ids_0[_S71]) == u32(4294967295))
{
break;
}
var _S73 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S71].a_0;
var _S74 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S71].b_0;
var _S75 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S71].c_0;
var _S76 : vec3<f32> = shared_primitives_0[_S71].b_0 - shared_primitives_0[_S71].a_0;
var _S77 : vec3<f32> = shared_primitives_0[_S71].c_0 - shared_primitives_0[_S71].a_0;
var _S78 : vec3<f32> = shared_primitives_0[_S71].c_0 - shared_primitives_0[_S71].b_0;
var _S79 : vec3<f32> = cross(_S76, _S77);
var _S80 : f32 = length(_S79);
if(_S80 != 0.0f)
{
_S9 = (dot(cross(_S76, _S79), _S73)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S78, _S79), _S74)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S77, _S79), _S75)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S81 : f32 = dot(_S79, _S73) / _S80;
var _S82 : f32 = abs(_S81);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S72))) | (((u32(_S81 < 0.0f) << ((_S72 + u32(16))))))))));
if(_S82 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S82);
result_0.closest_id_0 = _S72;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S83 : u32 = _S7 + u32(85);
var _S84 : u32 = shared_collider_ids_0[_S83];
if((shared_collider_ids_0[_S83]) == u32(4294967295))
{
break;
}
var _S85 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S83].a_0;
var _S86 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S83].b_0;
var _S87 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S83].c_0;
var _S88 : vec3<f32> = shared_primitives_0[_S83].b_0 - shared_primitives_0[_S83].a_0;
var _S89 : vec3<f32> = shared_primitives_0[_S83].c_0 - shared_primitives_0[_S83].a_0;
var _S90 : vec3<f32> = shared_primitives_0[_S83].c_0 - shared_primitives_0[_S83].b_0;
var _S91 : vec3<f32> = cross(_S88, _S89);
var _S92 : f32 = length(_S91);
if(_S92 != 0.0f)
{
_S9 = (dot(cross(_S88, _S91), _S85)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S90, _S91), _S86)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S89, _S91), _S87)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S93 : f32 = dot(_S91, _S85) / _S92;
var _S94 : f32 = abs(_S93);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S84))) | (((u32(_S93 < 0.0f) << ((_S84 + u32(16))))))))));
if(_S94 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S94);
result_0.closest_id_0 = _S84;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S95 : u32 = _S7 + u32(73);
var _S96 : u32 = shared_collider_ids_0[_S95];
if((shared_collider_ids_0[_S95]) == u32(4294967295))
{
break;
}
var _S97 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S95].a_0;
var _S98 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S95].b_0;
var _S99 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S95].c_0;
var _S100 : vec3<f32> = shared_primitives_0[_S95].b_0 - shared_primitives_0[_S95].a_0;
var _S101 : vec3<f32> = shared_primitives_0[_S95].c_0 - shared_primitives_0[_S95].a_0;
var _S102 : vec3<f32> = shared_primitives_0[_S95].c_0 - shared_primitives_0[_S95].b_0;
var _S103 : vec3<f32> = cross(_S100, _S101);
var _S104 : f32 = length(_S103);
if(_S104 != 0.0f)
{
_S9 = (dot(cross(_S100, _S103), _S97)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S102, _S103), _S98)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S101, _S103), _S99)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S105 : f32 = dot(_S103, _S97) / _S104;
var _S106 : f32 = abs(_S105);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S96))) | (((u32(_S105 < 0.0f) << ((_S96 + u32(16))))))))));
if(_S106 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S106);
result_0.closest_id_0 = _S96;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S107 : u32 = _S7 + u32(79);
var _S108 : u32 = shared_collider_ids_0[_S107];
if((shared_collider_ids_0[_S107]) == u32(4294967295))
{
break;
}
var _S109 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S107].a_0;
var _S110 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S107].b_0;
var _S111 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S107].c_0;
var _S112 : vec3<f32> = shared_primitives_0[_S107].b_0 - shared_primitives_0[_S107].a_0;
var _S113 : vec3<f32> = shared_primitives_0[_S107].c_0 - shared_primitives_0[_S107].a_0;
var _S114 : vec3<f32> = shared_primitives_0[_S107].c_0 - shared_primitives_0[_S107].b_0;
var _S115 : vec3<f32> = cross(_S112, _S113);
var _S116 : f32 = length(_S115);
if(_S116 != 0.0f)
{
_S9 = (dot(cross(_S112, _S115), _S109)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S114, _S115), _S110)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S113, _S115), _S111)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S117 : f32 = dot(_S115, _S109) / _S116;
var _S118 : f32 = abs(_S117);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S108))) | (((u32(_S117 < 0.0f) << ((_S108 + u32(16))))))))));
if(_S118 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S118);
result_0.closest_id_0 = _S108;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S119 : u32 = _S7 + u32(14);
var _S120 : u32 = shared_collider_ids_0[_S119];
if((shared_collider_ids_0[_S119]) == u32(4294967295))
{
break;
}
var _S121 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S119].a_0;
var _S122 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S119].b_0;
var _S123 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S119].c_0;
var _S124 : vec3<f32> = shared_primitives_0[_S119].b_0 - shared_primitives_0[_S119].a_0;
var _S125 : vec3<f32> = shared_primitives_0[_S119].c_0 - shared_primitives_0[_S119].a_0;
var _S126 : vec3<f32> = shared_primitives_0[_S119].c_0 - shared_primitives_0[_S119].b_0;
var _S127 : vec3<f32> = cross(_S124, _S125);
var _S128 : f32 = length(_S127);
if(_S128 != 0.0f)
{
_S9 = (dot(cross(_S124, _S127), _S121)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S126, _S127), _S122)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S125, _S127), _S123)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S129 : f32 = dot(_S127, _S121) / _S128;
var _S130 : f32 = abs(_S129);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S120))) | (((u32(_S129 < 0.0f) << ((_S120 + u32(16))))))))));
if(_S130 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S130);
result_0.closest_id_0 = _S120;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S131 : u32 = _S7 + u32(2);
var _S132 : u32 = shared_collider_ids_0[_S131];
if((shared_collider_ids_0[_S131]) == u32(4294967295))
{
break;
}
var _S133 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S131].a_0;
var _S134 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S131].b_0;
var _S135 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S131].c_0;
var _S136 : vec3<f32> = shared_primitives_0[_S131].b_0 - shared_primitives_0[_S131].a_0;
var _S137 : vec3<f32> = shared_primitives_0[_S131].c_0 - shared_primitives_0[_S131].a_0;
var _S138 : vec3<f32> = shared_primitives_0[_S131].c_0 - shared_primitives_0[_S131].b_0;
var _S139 : vec3<f32> = cross(_S136, _S137);
var _S140 : f32 = length(_S139);
if(_S140 != 0.0f)
{
_S9 = (dot(cross(_S136, _S139), _S133)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S138, _S139), _S134)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S137, _S139), _S135)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S141 : f32 = dot(_S139, _S133) / _S140;
var _S142 : f32 = abs(_S141);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S132))) | (((u32(_S141 < 0.0f) << ((_S132 + u32(16))))))))));
if(_S142 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S142);
result_0.closest_id_0 = _S132;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S143 : u32 = _S7 + u32(8);
var _S144 : u32 = shared_collider_ids_0[_S143];
if((shared_collider_ids_0[_S143]) == u32(4294967295))
{
break;
}
var _S145 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S143].a_0;
var _S146 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S143].b_0;
var _S147 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S143].c_0;
var _S148 : vec3<f32> = shared_primitives_0[_S143].b_0 - shared_primitives_0[_S143].a_0;
var _S149 : vec3<f32> = shared_primitives_0[_S143].c_0 - shared_primitives_0[_S143].a_0;
var _S150 : vec3<f32> = shared_primitives_0[_S143].c_0 - shared_primitives_0[_S143].b_0;
var _S151 : vec3<f32> = cross(_S148, _S149);
var _S152 : f32 = length(_S151);
if(_S152 != 0.0f)
{
_S9 = (dot(cross(_S148, _S151), _S145)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S150, _S151), _S146)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S149, _S151), _S147)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S153 : f32 = dot(_S151, _S145) / _S152;
var _S154 : f32 = abs(_S153);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S144))) | (((u32(_S153 < 0.0f) << ((_S144 + u32(16))))))))));
if(_S154 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S154);
result_0.closest_id_0 = _S144;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S155 : u32 = _S7 + u32(12);
var _S156 : u32 = shared_collider_ids_0[_S155];
if((shared_collider_ids_0[_S155]) == u32(4294967295))
{
break;
}
var _S157 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S155].a_0;
var _S158 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S155].b_0;
var _S159 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S155].c_0;
var _S160 : vec3<f32> = shared_primitives_0[_S155].b_0 - shared_primitives_0[_S155].a_0;
var _S161 : vec3<f32> = shared_primitives_0[_S155].c_0 - shared_primitives_0[_S155].a_0;
var _S162 : vec3<f32> = shared_primitives_0[_S155].c_0 - shared_primitives_0[_S155].b_0;
var _S163 : vec3<f32> = cross(_S160, _S161);
var _S164 : f32 = length(_S163);
if(_S164 != 0.0f)
{
_S9 = (dot(cross(_S160, _S163), _S157)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S162, _S163), _S158)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S161, _S163), _S159)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S165 : f32 = dot(_S163, _S157) / _S164;
var _S166 : f32 = abs(_S165);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S156))) | (((u32(_S165 < 0.0f) << ((_S156 + u32(16))))))))));
if(_S166 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S166);
result_0.closest_id_0 = _S156;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S167 : u32 = shared_collider_ids_0[_S7];
if((shared_collider_ids_0[_S7]) == u32(4294967295))
{
break;
}
var _S168 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S7].a_0;
var _S169 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S7].b_0;
var _S170 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S7].c_0;
var _S171 : vec3<f32> = shared_primitives_0[_S7].b_0 - shared_primitives_0[_S7].a_0;
var _S172 : vec3<f32> = shared_primitives_0[_S7].c_0 - shared_primitives_0[_S7].a_0;
var _S173 : vec3<f32> = shared_primitives_0[_S7].c_0 - shared_primitives_0[_S7].b_0;
var _S174 : vec3<f32> = cross(_S171, _S172);
var _S175 : f32 = length(_S174);
if(_S175 != 0.0f)
{
_S9 = (dot(cross(_S171, _S174), _S168)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S173, _S174), _S169)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S172, _S174), _S170)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S176 : f32 = dot(_S174, _S168) / _S175;
var _S177 : f32 = abs(_S176);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S167))) | (((u32(_S176 < 0.0f) << ((_S167 + u32(16))))))))));
if(_S177 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S177);
result_0.closest_id_0 = _S167;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S178 : u32 = _S7 + u32(6);
var _S179 : u32 = shared_collider_ids_0[_S178];
if((shared_collider_ids_0[_S178]) == u32(4294967295))
{
break;
}
var _S180 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S178].a_0;
var _S181 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S178].b_0;
var _S182 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S178].c_0;
var _S183 : vec3<f32> = shared_primitives_0[_S178].b_0 - shared_primitives_0[_S178].a_0;
var _S184 : vec3<f32> = shared_primitives_0[_S178].c_0 - shared_primitives_0[_S178].a_0;
var _S185 : vec3<f32> = shared_primitives_0[_S178].c_0 - shared_primitives_0[_S178].b_0;
var _S186 : vec3<f32> = cross(_S183, _S184);
var _S187 : f32 = length(_S186);
if(_S187 != 0.0f)
{
_S9 = (dot(cross(_S183, _S186), _S180)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S185, _S186), _S181)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S184, _S186), _S182)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S188 : f32 = dot(_S186, _S180) / _S187;
var _S189 : f32 = abs(_S188);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S179))) | (((u32(_S188 < 0.0f) << ((_S179 + u32(16))))))))));
if(_S189 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S189);
result_0.closest_id_0 = _S179;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S190 : u32 = _S7 + u32(13);
var _S191 : u32 = shared_collider_ids_0[_S190];
if((shared_collider_ids_0[_S190]) == u32(4294967295))
{
break;
}
var _S192 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S190].a_0;
var _S193 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S190].b_0;
var _S194 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S190].c_0;
var _S195 : vec3<f32> = shared_primitives_0[_S190].b_0 - shared_primitives_0[_S190].a_0;
var _S196 : vec3<f32> = shared_primitives_0[_S190].c_0 - shared_primitives_0[_S190].a_0;
var _S197 : vec3<f32> = shared_primitives_0[_S190].c_0 - shared_primitives_0[_S190].b_0;
var _S198 : vec3<f32> = cross(_S195, _S196);
var _S199 : f32 = length(_S198);
if(_S199 != 0.0f)
{
_S9 = (dot(cross(_S195, _S198), _S192)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S197, _S198), _S193)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S196, _S198), _S194)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S200 : f32 = dot(_S198, _S192) / _S199;
var _S201 : f32 = abs(_S200);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S191))) | (((u32(_S200 < 0.0f) << ((_S191 + u32(16))))))))));
if(_S201 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S201);
result_0.closest_id_0 = _S191;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S202 : u32 = _S7 + u32(1);
var _S203 : u32 = shared_collider_ids_0[_S202];
if((shared_collider_ids_0[_S202]) == u32(4294967295))
{
break;
}
var _S204 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S202].a_0;
var _S205 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S202].b_0;
var _S206 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S202].c_0;
var _S207 : vec3<f32> = shared_primitives_0[_S202].b_0 - shared_primitives_0[_S202].a_0;
var _S208 : vec3<f32> = shared_primitives_0[_S202].c_0 - shared_primitives_0[_S202].a_0;
var _S209 : vec3<f32> = shared_primitives_0[_S202].c_0 - shared_primitives_0[_S202].b_0;
var _S210 : vec3<f32> = cross(_S207, _S208);
var _S211 : f32 = length(_S210);
if(_S211 != 0.0f)
{
_S9 = (dot(cross(_S207, _S210), _S204)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S209, _S210), _S205)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S208, _S210), _S206)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S212 : f32 = dot(_S210, _S204) / _S211;
var _S213 : f32 = abs(_S212);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S203))) | (((u32(_S212 < 0.0f) << ((_S203 + u32(16))))))))));
if(_S213 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S213);
result_0.closest_id_0 = _S203;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S214 : u32 = _S7 + u32(7);
var _S215 : u32 = shared_collider_ids_0[_S214];
if((shared_collider_ids_0[_S214]) == u32(4294967295))
{
break;
}
var _S216 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S214].a_0;
var _S217 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S214].b_0;
var _S218 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S214].c_0;
var _S219 : vec3<f32> = shared_primitives_0[_S214].b_0 - shared_primitives_0[_S214].a_0;
var _S220 : vec3<f32> = shared_primitives_0[_S214].c_0 - shared_primitives_0[_S214].a_0;
var _S221 : vec3<f32> = shared_primitives_0[_S214].c_0 - shared_primitives_0[_S214].b_0;
var _S222 : vec3<f32> = cross(_S219, _S220);
var _S223 : f32 = length(_S222);
if(_S223 != 0.0f)
{
_S9 = (dot(cross(_S219, _S222), _S216)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S221, _S222), _S217)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S220, _S222), _S218)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S224 : f32 = dot(_S222, _S216) / _S223;
var _S225 : f32 = abs(_S224);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S215))) | (((u32(_S224 < 0.0f) << ((_S215 + u32(16))))))))));
if(_S225 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S225);
result_0.closest_id_0 = _S215;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S226 : u32 = _S7 + u32(50);
var _S227 : u32 = shared_collider_ids_0[_S226];
if((shared_collider_ids_0[_S226]) == u32(4294967295))
{
break;
}
var _S228 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S226].a_0;
var _S229 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S226].b_0;
var _S230 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S226].c_0;
var _S231 : vec3<f32> = shared_primitives_0[_S226].b_0 - shared_primitives_0[_S226].a_0;
var _S232 : vec3<f32> = shared_primitives_0[_S226].c_0 - shared_primitives_0[_S226].a_0;
var _S233 : vec3<f32> = shared_primitives_0[_S226].c_0 - shared_primitives_0[_S226].b_0;
var _S234 : vec3<f32> = cross(_S231, _S232);
var _S235 : f32 = length(_S234);
if(_S235 != 0.0f)
{
_S9 = (dot(cross(_S231, _S234), _S228)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S233, _S234), _S229)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S232, _S234), _S230)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S236 : f32 = dot(_S234, _S228) / _S235;
var _S237 : f32 = abs(_S236);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S227))) | (((u32(_S236 < 0.0f) << ((_S227 + u32(16))))))))));
if(_S237 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S237);
result_0.closest_id_0 = _S227;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S238 : u32 = _S7 + u32(38);
var _S239 : u32 = shared_collider_ids_0[_S238];
if((shared_collider_ids_0[_S238]) == u32(4294967295))
{
break;
}
var _S240 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S238].a_0;
var _S241 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S238].b_0;
var _S242 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S238].c_0;
var _S243 : vec3<f32> = shared_primitives_0[_S238].b_0 - shared_primitives_0[_S238].a_0;
var _S244 : vec3<f32> = shared_primitives_0[_S238].c_0 - shared_primitives_0[_S238].a_0;
var _S245 : vec3<f32> = shared_primitives_0[_S238].c_0 - shared_primitives_0[_S238].b_0;
var _S246 : vec3<f32> = cross(_S243, _S244);
var _S247 : f32 = length(_S246);
if(_S247 != 0.0f)
{
_S9 = (dot(cross(_S243, _S246), _S240)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S245, _S246), _S241)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S244, _S246), _S242)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S248 : f32 = dot(_S246, _S240) / _S247;
var _S249 : f32 = abs(_S248);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S239))) | (((u32(_S248 < 0.0f) << ((_S239 + u32(16))))))))));
if(_S249 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S249);
result_0.closest_id_0 = _S239;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S250 : u32 = _S7 + u32(44);
var _S251 : u32 = shared_collider_ids_0[_S250];
if((shared_collider_ids_0[_S250]) == u32(4294967295))
{
break;
}
var _S252 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S250].a_0;
var _S253 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S250].b_0;
var _S254 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S250].c_0;
var _S255 : vec3<f32> = shared_primitives_0[_S250].b_0 - shared_primitives_0[_S250].a_0;
var _S256 : vec3<f32> = shared_primitives_0[_S250].c_0 - shared_primitives_0[_S250].a_0;
var _S257 : vec3<f32> = shared_primitives_0[_S250].c_0 - shared_primitives_0[_S250].b_0;
var _S258 : vec3<f32> = cross(_S255, _S256);
var _S259 : f32 = length(_S258);
if(_S259 != 0.0f)
{
_S9 = (dot(cross(_S255, _S258), _S252)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S257, _S258), _S253)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S256, _S258), _S254)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S260 : f32 = dot(_S258, _S252) / _S259;
var _S261 : f32 = abs(_S260);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S251))) | (((u32(_S260 < 0.0f) << ((_S251 + u32(16))))))))));
if(_S261 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S261);
result_0.closest_id_0 = _S251;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S262 : u32 = _S7 + u32(48);
var _S263 : u32 = shared_collider_ids_0[_S262];
if((shared_collider_ids_0[_S262]) == u32(4294967295))
{
break;
}
var _S264 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S262].a_0;
var _S265 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S262].b_0;
var _S266 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S262].c_0;
var _S267 : vec3<f32> = shared_primitives_0[_S262].b_0 - shared_primitives_0[_S262].a_0;
var _S268 : vec3<f32> = shared_primitives_0[_S262].c_0 - shared_primitives_0[_S262].a_0;
var _S269 : vec3<f32> = shared_primitives_0[_S262].c_0 - shared_primitives_0[_S262].b_0;
var _S270 : vec3<f32> = cross(_S267, _S268);
var _S271 : f32 = length(_S270);
if(_S271 != 0.0f)
{
_S9 = (dot(cross(_S267, _S270), _S264)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S269, _S270), _S265)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S268, _S270), _S266)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S272 : f32 = dot(_S270, _S264) / _S271;
var _S273 : f32 = abs(_S272);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S263))) | (((u32(_S272 < 0.0f) << ((_S263 + u32(16))))))))));
if(_S273 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S273);
result_0.closest_id_0 = _S263;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S274 : u32 = _S7 + u32(36);
var _S275 : u32 = shared_collider_ids_0[_S274];
if((shared_collider_ids_0[_S274]) == u32(4294967295))
{
break;
}
var _S276 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S274].a_0;
var _S277 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S274].b_0;
var _S278 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S274].c_0;
var _S279 : vec3<f32> = shared_primitives_0[_S274].b_0 - shared_primitives_0[_S274].a_0;
var _S280 : vec3<f32> = shared_primitives_0[_S274].c_0 - shared_primitives_0[_S274].a_0;
var _S281 : vec3<f32> = shared_primitives_0[_S274].c_0 - shared_primitives_0[_S274].b_0;
var _S282 : vec3<f32> = cross(_S279, _S280);
var _S283 : f32 = length(_S282);
if(_S283 != 0.0f)
{
_S9 = (dot(cross(_S279, _S282), _S276)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S281, _S282), _S277)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S280, _S282), _S278)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S284 : f32 = dot(_S282, _S276) / _S283;
var _S285 : f32 = abs(_S284);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S275))) | (((u32(_S284 < 0.0f) << ((_S275 + u32(16))))))))));
if(_S285 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S285);
result_0.closest_id_0 = _S275;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S286 : u32 = _S7 + u32(42);
var _S287 : u32 = shared_collider_ids_0[_S286];
if((shared_collider_ids_0[_S286]) == u32(4294967295))
{
break;
}
var _S288 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S286].a_0;
var _S289 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S286].b_0;
var _S290 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S286].c_0;
var _S291 : vec3<f32> = shared_primitives_0[_S286].b_0 - shared_primitives_0[_S286].a_0;
var _S292 : vec3<f32> = shared_primitives_0[_S286].c_0 - shared_primitives_0[_S286].a_0;
var _S293 : vec3<f32> = shared_primitives_0[_S286].c_0 - shared_primitives_0[_S286].b_0;
var _S294 : vec3<f32> = cross(_S291, _S292);
var _S295 : f32 = length(_S294);
if(_S295 != 0.0f)
{
_S9 = (dot(cross(_S291, _S294), _S288)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S293, _S294), _S289)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S292, _S294), _S290)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S296 : f32 = dot(_S294, _S288) / _S295;
var _S297 : f32 = abs(_S296);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S287))) | (((u32(_S296 < 0.0f) << ((_S287 + u32(16))))))))));
if(_S297 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S297);
result_0.closest_id_0 = _S287;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S298 : u32 = _S7 + u32(49);
var _S299 : u32 = shared_collider_ids_0[_S298];
if((shared_collider_ids_0[_S298]) == u32(4294967295))
{
break;
}
var _S300 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S298].a_0;
var _S301 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S298].b_0;
var _S302 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S298].c_0;
var _S303 : vec3<f32> = shared_primitives_0[_S298].b_0 - shared_primitives_0[_S298].a_0;
var _S304 : vec3<f32> = shared_primitives_0[_S298].c_0 - shared_primitives_0[_S298].a_0;
var _S305 : vec3<f32> = shared_primitives_0[_S298].c_0 - shared_primitives_0[_S298].b_0;
var _S306 : vec3<f32> = cross(_S303, _S304);
var _S307 : f32 = length(_S306);
if(_S307 != 0.0f)
{
_S9 = (dot(cross(_S303, _S306), _S300)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S305, _S306), _S301)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S304, _S306), _S302)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S308 : f32 = dot(_S306, _S300) / _S307;
var _S309 : f32 = abs(_S308);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S299))) | (((u32(_S308 < 0.0f) << ((_S299 + u32(16))))))))));
if(_S309 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S309);
result_0.closest_id_0 = _S299;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S310 : u32 = _S7 + u32(37);
var _S311 : u32 = shared_collider_ids_0[_S310];
if((shared_collider_ids_0[_S310]) == u32(4294967295))
{
break;
}
var _S312 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S310].a_0;
var _S313 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S310].b_0;
var _S314 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S310].c_0;
var _S315 : vec3<f32> = shared_primitives_0[_S310].b_0 - shared_primitives_0[_S310].a_0;
var _S316 : vec3<f32> = shared_primitives_0[_S310].c_0 - shared_primitives_0[_S310].a_0;
var _S317 : vec3<f32> = shared_primitives_0[_S310].c_0 - shared_primitives_0[_S310].b_0;
var _S318 : vec3<f32> = cross(_S315, _S316);
var _S319 : f32 = length(_S318);
if(_S319 != 0.0f)
{
_S9 = (dot(cross(_S315, _S318), _S312)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S317, _S318), _S313)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S316, _S318), _S314)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S320 : f32 = dot(_S318, _S312) / _S319;
var _S321 : f32 = abs(_S320);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S311))) | (((u32(_S320 < 0.0f) << ((_S311 + u32(16))))))))));
if(_S321 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S321);
result_0.closest_id_0 = _S311;
}
}
break;
}
break;
}
for(;;)
{
for(;;)
{
var _S322 : u32 = _S7 + u32(43);
var _S323 : u32 = shared_collider_ids_0[_S322];
if((shared_collider_ids_0[_S322]) == u32(4294967295))
{
break;
}
var _S324 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S322].a_0;
var _S325 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S322].b_0;
var _S326 : vec3<f32> = cell_pos_0 - shared_primitives_0[_S322].c_0;
var _S327 : vec3<f32> = shared_primitives_0[_S322].b_0 - shared_primitives_0[_S322].a_0;
var _S328 : vec3<f32> = shared_primitives_0[_S322].c_0 - shared_primitives_0[_S322].a_0;
var _S329 : vec3<f32> = shared_primitives_0[_S322].c_0 - shared_primitives_0[_S322].b_0;
var _S330 : vec3<f32> = cross(_S327, _S328);
var _S331 : f32 = length(_S330);
if(_S331 != 0.0f)
{
_S9 = (dot(cross(_S327, _S330), _S324)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S329, _S330), _S325)) <= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
_S9 = (dot(cross(_S328, _S330), _S326)) >= 0.0f;
}
else
{
_S9 = false;
}
if(_S9)
{
var _S332 : f32 = dot(_S330, _S324) / _S331;
var _S333 : f32 = abs(_S332);
result_0.affinities_0 = ((result_0.affinities_0) | (((((u32(1) << (_S323))) | (((u32(_S332 < 0.0f) << ((_S323 + u32(16))))))))));
if(_S333 < (result_0.distance_0))
{
result_0.distance_0 = min(result_0.distance_0, _S333);
result_0.closest_id_0 = _S323;
}
}
break;
}
break;
}
break;
}
return result_0;
}
fn find_block_header_id_0( _S334 : BlockVirtualId_0) -> BlockHeaderId_0
{
var _S335 : u32 = pack_key_0(_S334);
var slot_0 : u32 = ((hash_0(_S335)) & ((entryPointParams_grid_0[i32(0)].hmap_capacity_0 - u32(1))));
for(;;)
{
var _S336 : GridHashMapEntryGeneric_std430_0 = entryPointParams_hmap_entries_0[slot_0];
if((_S336.state_0) == _S335)
{
var _S337 : BlockHeaderId_0 = BlockHeaderId_0( entryPointParams_hmap_entries_0[slot_0].value_0.id_1 );
return _S337;
}
else
{
if((_S336.state_0) == u32(4294967295))
{
break;
}
}
slot_0 = ((slot_0 + u32(1)) & ((entryPointParams_grid_0[i32(0)].hmap_capacity_0 - u32(1))));
}
return BlockHeaderId_x24init_0(u32(4294967295));
}
fn fetch_max_linked_lists_length_0( _S338 : vec3<u32>, _S339 : ptr<function, BlockVirtualId_std430_0>, _S340 : u32)
{
var _S341 : vec3<i32> = (*_S339).id_0 - vec3<i32>(i32(1), i32(1), i32(1));
var i_4 : u32 = u32(0);
for(;;)
{
if(i_4 <= u32(1))
{
}
else
{
break;
}
var j_0 : u32 = u32(0);
for(;;)
{
if(j_0 <= u32(1))
{
}
else
{
break;
}
var k_0 : u32 = u32(0);
for(;;)
{
if(k_0 <= u32(1))
{
}
else
{
break;
}
var _S342 : bool;
if(i_4 == u32(0))
{
_S342 = (_S338.x) < u32(2);
}
else
{
_S342 = false;
}
var _S343 : bool;
if(_S342)
{
_S343 = true;
}
else
{
if(j_0 == u32(0))
{
_S343 = (_S338.y) < u32(2);
}
else
{
_S343 = false;
}
}
var _S344 : bool;
if(_S343)
{
_S344 = true;
}
else
{
if(k_0 == u32(0))
{
_S344 = (_S338.z) < u32(2);
}
else
{
_S344 = false;
}
}
if(_S344)
{
k_0 = k_0 + u32(1);
continue;
}
var _S345 : BlockHeaderId_0 = find_block_header_id_0(BlockVirtualId_x24init_0(_S341 + vec3<i32>(vec3<u32>(i_4, j_0, k_0))));
if((_S345.id_1) != u32(4294967295))
{
var _S346 : u32 = atomicMax(&(max_linked_list_length_0), entryPointParams_rigid_nodes_linked_lists_0[node_id_0(block_header_id_to_physical_id_0(_S345), _S338).id_3].len_0);
}
k_0 = k_0 + u32(1);
}
j_0 = j_0 + u32(1);
}
i_4 = i_4 + u32(1);
}
return;
}
fn fetch_nodes_0( _S347 : vec3<u32>, _S348 : ptr<function, BlockVirtualId_std430_0>, _S349 : u32)
{
var _S350 : vec3<i32> = (*_S348).id_0 - vec3<i32>(i32(1), i32(1), i32(1));
var i_5 : u32 = u32(0);
for(;;)
{
if(i_5 <= u32(1))
{
}
else
{
break;
}
var j_1 : u32 = u32(0);
for(;;)
{
if(j_1 <= u32(1))
{
}
else
{
break;
}
var k_1 : u32 = u32(0);
for(;;)
{
if(k_1 <= u32(1))
{
}
else
{
break;
}
var _S351 : bool;
if(i_5 == u32(0))
{
_S351 = (_S347.x) < u32(2);
}
else
{
_S351 = false;
}
var _S352 : bool;
if(_S351)
{
_S352 = true;
}
else
{
if(j_1 == u32(0))
{
_S352 = (_S347.y) < u32(2);
}
else
{
_S352 = false;
}
}
var _S353 : bool;
if(_S352)
{
_S353 = true;
}
else
{
if(k_1 == u32(0))
{
_S353 = (_S347.z) < u32(2);
}
else
{
_S353 = false;
}
}
if(_S353)
{
k_1 = k_1 + u32(1);
continue;
}
var _S354 : vec3<u32> = vec3<u32>(i_5, j_1, k_1);
var _S355 : BlockHeaderId_0 = find_block_header_id_0(BlockVirtualId_x24init_0(_S350 + vec3<i32>(_S354)));
var _S356 : vec3<u32> = _S354 * vec3<u32>(u32(4)) + _S347;
var _S357 : u32 = flatten_shared_index_0(_S356.x, _S356.y, _S356.z);
if((_S355.id_1) != u32(4294967295))
{
var _S358 : NodePhysicalId_0 = node_id_0(block_header_id_to_physical_id_0(_S355), _S347);
shared_nodes_0[_S357].particle_id_0 = entryPointParams_rigid_nodes_linked_lists_0[_S358.id_3].head_0;
shared_nodes_0[_S357].global_id_0 = _S358.id_3;
}
else
{
shared_nodes_0[_S357].particle_id_0 = u32(4294967295);
}
k_1 = k_1 + u32(1);
}
j_1 = j_1 + u32(1);
}
i_5 = i_5 + u32(1);
}
return;
}
fn fetch_next_particle_0( _S359 : vec3<u32>)
{
var i_6 : u32 = u32(0);
for(;;)
{
if(i_6 <= u32(1))
{
}
else
{
break;
}
var j_2 : u32 = u32(0);
for(;;)
{
if(j_2 <= u32(1))
{
}
else
{
break;
}
var k_2 : u32 = u32(0);
for(;;)
{
if(k_2 <= u32(1))
{
}
else
{
break;
}
var _S360 : bool;
if(i_6 == u32(0))
{
_S360 = (_S359.x) < u32(2);
}
else
{
_S360 = false;
}
var _S361 : bool;
if(_S360)
{
_S361 = true;
}
else
{
if(j_2 == u32(0))
{
_S361 = (_S359.y) < u32(2);
}
else
{
_S361 = false;
}
}
var _S362 : bool;
if(_S361)
{
_S362 = true;
}
else
{
if(k_2 == u32(0))
{
_S362 = (_S359.z) < u32(2);
}
else
{
_S362 = false;
}
}
if(_S362)
{
k_2 = k_2 + u32(1);
continue;
}
var _S363 : vec3<u32> = vec3<u32>(i_6, j_2, k_2) * vec3<u32>(u32(4)) + _S359;
var _S364 : u32 = flatten_shared_index_0(_S363.x, _S363.y, _S363.z);
var _S365 : u32 = shared_nodes_0[_S364].particle_id_0;
if((shared_nodes_0[_S364].particle_id_0) != u32(4294967295))
{
var _S366 : RigidParticleIndices_std430_0 = entryPointParams_rigid_particle_indices_0[_S365];
shared_collider_ids_0[_S364] = _S366.collider_0;
shared_primitives_0[_S364] = Triangle_x24init_0(entryPointParams_collider_vertices_0[_S366.triangle_0.x], entryPointParams_collider_vertices_0[_S366.triangle_0.y], entryPointParams_collider_vertices_0[_S366.triangle_0.z]);
shared_nodes_0[_S364].particle_id_0 = entryPointParams_particle_node_linked_lists_0[_S365];
}
else
{
shared_collider_ids_0[_S364] = u32(4294967295);
var _S367 : vec3<f32> = vec3<f32>(0.0f);
shared_primitives_0[_S364] = Triangle_x24init_0(_S367, _S367, _S367);
}
k_2 = k_2 + u32(1);
}
j_2 = j_2 + u32(1);
}
i_6 = i_6 + u32(1);
}
return;
}
@compute
@workgroup_size(4, 4, 4)
fn p2g_cdf(@builtin(workgroup_id) block_id_0 : vec3<u32>, @builtin(local_invocation_id) tid_0 : vec3<u32>, @builtin(local_invocation_index) tid_flat_0 : u32)
{
var _S368 : u32 = block_id_0.x;
var _S369 : ActiveBlockHeaderGeneric_std430_0 = entryPointParams_active_blocks_0[_S368];
if(tid_flat_0 == u32(0))
{
atomicStore(&(max_linked_list_length_0), u32(0));
}
workgroupBarrier();
fetch_max_linked_lists_length_0(tid_0, &(_S369.virtual_id_0), _S368);
workgroupBarrier();
var _S370 : u32 = atomicLoad(&(max_linked_list_length_0));
max_linked_list_length_uniform_0 = _S370;
fetch_nodes_0(tid_0, &(_S369.virtual_id_0), _S368);
var _S371 : u32 = flatten_shared_index_0(tid_0.x + u32(4), tid_0.y + u32(4), tid_0.z + u32(4));
var _S372 : vec3<f32> = vec3<f32>(_S369.virtual_id_0.id_0 * vec3<i32>(i32(4)) + vec3<i32>(tid_0)) * vec3<f32>(entryPointParams_grid_0[i32(0)].cell_width_0);
var _S373 : u32 = shared_nodes_0[_S371].global_id_0;
var node_cdf_0 : NodeCdf_0;
node_cdf_0.distance_0 = entryPointParams_nodes_0[shared_nodes_0[_S371].global_id_0].cdf_0.distance_0;
node_cdf_0.affinities_0 = entryPointParams_nodes_0[shared_nodes_0[_S371].global_id_0].cdf_0.affinities_0;
node_cdf_0.closest_id_0 = entryPointParams_nodes_0[shared_nodes_0[_S371].global_id_0].cdf_0.closest_id_0;
var _S374 : u32 = (workgroupUniformLoad(&((max_linked_list_length_uniform_0))));
var i_7 : u32 = u32(0);
for(;;)
{
if(i_7 < _S374)
{
}
else
{
break;
}
workgroupBarrier();
fetch_next_particle_0(tid_0);
workgroupBarrier();
var _S375 : NodeCdf_0 = p2g_step_0(_S371, entryPointParams_grid_0[i32(0)].cell_width_0, _S372);
if((_S375.closest_id_0) != u32(4294967295))
{
node_cdf_0.affinities_0 = ((node_cdf_0.affinities_0) | ((_S375.affinities_0)));
if((_S375.distance_0) < (node_cdf_0.distance_0))
{
node_cdf_0.distance_0 = _S375.distance_0;
node_cdf_0.closest_id_0 = _S375.closest_id_0;
}
}
i_7 = i_7 + u32(1);
}
entryPointParams_nodes_0[_S373].cdf_0.distance_0 = node_cdf_0.distance_0;
entryPointParams_nodes_0[_S373].cdf_0.affinities_0 = node_cdf_0.affinities_0;
entryPointParams_nodes_0[_S373].cdf_0.closest_id_0 = node_cdf_0.closest_id_0;
return;
}