struct Plane { inner: vec4; }; struct Frustum { left: Plane; right: Plane; top: Plane; bottom: Plane; near: Plane; }; struct CullingUniforms { view: mat4x4; view_proj: mat4x4; frustum: Frustum; object_count: u32; }; struct ObjectInputUniforms { uniforms: CullingUniforms; }; struct ObjectOutputData { model_view: mat4x4; model_view_proj: mat4x4; material_idx: u32; inv_squared_scale: vec3; }; struct ObjectOutputDataBuffer { object_output: [[stride(160)]] array; }; struct IndirectCall { vertex_count: u32; instance_count: u32; base_index: u32; vertex_offset: i32; base_instance: u32; }; struct IndirectBuffer { draw_call_count: u32; pad0_: u32; pad1_: u32; pad2_: u32; indirect_call: [[stride(20)]] array; }; struct IntermediateBufferA { result_index_a: [[stride(4)]] array; }; struct ObjectInputData { start_idx: u32; count: u32; vertex_offset: i32; material_idx: u32; transform: mat4x4; bounding_sphere: vec4; }; struct ObjectInputDataBuffer { object_input: [[stride(96)]] array; }; [[group(0), binding(1)]] var unnamed: ObjectInputUniforms; [[group(0), binding(4)]] var unnamed_1: ObjectOutputDataBuffer; [[group(0), binding(5)]] var unnamed_2: IndirectBuffer; var gl_GlobalInvocationID_1: vec3; [[group(0), binding(2)]] var unnamed_3: IntermediateBufferA; [[group(0), binding(0)]] var unnamed_4: ObjectInputDataBuffer; fn main_1() { switch(bitcast(0u)) { default: { let _e27 = gl_GlobalInvocationID_1[0u]; let _e30 = unnamed.uniforms.object_count; if ((_e27 >= _e30)) { break; } let _e34 = unnamed_3.result_index_a[_e27]; let _e37 = extractBits(_e34, bitcast(0), bitcast(31)); let _e38 = (_e37 - 1u); if ((_e27 == (_e30 - 1u))) { unnamed_2.draw_call_count = _e37; } if (!((extractBits(_e34, bitcast(31), bitcast(1)) != 0u))) { break; } let _e50 = unnamed_4.object_input[_e27].start_idx; let _e52 = unnamed_4.object_input[_e27].count; let _e54 = unnamed_4.object_input[_e27].vertex_offset; let _e56 = unnamed_4.object_input[_e27].material_idx; let _e58 = unnamed_4.object_input[_e27].transform; let _e61 = unnamed.uniforms.view; let _e62 = (_e61 * _e58); let _e65 = unnamed.uniforms.view_proj; let _e68 = _e62[0].xyz; let _e70 = _e62[1].xyz; let _e72 = _e62[2].xyz; unnamed_1.object_output[_e38].model_view = _e62; unnamed_1.object_output[_e38].model_view_proj = (_e65 * _e58); unnamed_1.object_output[_e38].material_idx = _e56; unnamed_1.object_output[_e38].inv_squared_scale = (vec3(1.0, 1.0, 1.0) / vec3(dot(_e68, _e68), dot(_e70, _e70), dot(_e72, _e72))); unnamed_2.indirect_call[_e38].vertex_count = _e52; unnamed_2.indirect_call[_e38].instance_count = 1u; unnamed_2.indirect_call[_e38].base_index = _e50; unnamed_2.indirect_call[_e38].vertex_offset = _e54; unnamed_2.indirect_call[_e38].base_instance = _e38; break; } } return; } [[stage(compute), workgroup_size(256, 1, 1)]] fn main([[builtin(global_invocation_id)]] gl_GlobalInvocationID: vec3) { gl_GlobalInvocationID_1 = gl_GlobalInvocationID; main_1(); }