groupshared int a; groupshared int b; groupshared int c; void uses_a() { a = (a + 1); } void uses_b() { b = (b * 2); } void uses_a_and_b() { b = a; } void no_uses() { } void outer() { a = 0; uses_a(); uses_a_and_b(); uses_b(); no_uses(); } struct tint_symbol_1 { uint local_invocation_index : SV_GroupIndex; }; [numthreads(1, 1, 1)] void main1(tint_symbol_1 tint_symbol) { const uint local_invocation_index = tint_symbol.local_invocation_index; if ((local_invocation_index == 0u)) { a = 0; } GroupMemoryBarrierWithGroupSync(); a = 42; uses_a(); return; } struct tint_symbol_3 { uint local_invocation_index_1 : SV_GroupIndex; }; [numthreads(1, 1, 1)] void main2(tint_symbol_3 tint_symbol_2) { const uint local_invocation_index_1 = tint_symbol_2.local_invocation_index_1; if ((local_invocation_index_1 == 0u)) { b = 0; } GroupMemoryBarrierWithGroupSync(); b = 7; uses_b(); return; } struct tint_symbol_5 { uint local_invocation_index_2 : SV_GroupIndex; }; [numthreads(1, 1, 1)] void main3(tint_symbol_5 tint_symbol_4) { const uint local_invocation_index_2 = tint_symbol_4.local_invocation_index_2; if ((local_invocation_index_2 == 0u)) { a = 0; b = 0; } GroupMemoryBarrierWithGroupSync(); outer(); no_uses(); return; } [numthreads(1, 1, 1)] void main4() { no_uses(); return; }