@group(0) @binding(0) var gridHashes: array; @group(0) @binding(1) var indices: array; @group(0) @binding(2) var startIndices: array; @group(0) @binding(3) var endIndices: array; @group(0) @binding(4) var totalCount: u32; @compute @workgroup_size(256) fn findStartEndIndices(@builtin(global_invocation_id) globalId: vec3) { let i = globalId.x; if (i >= totalCount) { return; } let currentHash = gridHashes[i]; if (i == 0u || gridHashes[i - 1u] != currentHash) { startIndices[currentHash] = i; } if (i == totalCount - 1u || gridHashes[i + 1u] != currentHash) { endIndices[currentHash] = i; } }