layout(local_size_x = 16, local_size_y = 16) in; workgroup int outX, outY, outZ; int one() { return 1; } int two() { return 2; } int three() { return 3; } void main() { // This test is somewhat contrived, but it is possible to use a struct from the modules as part // of an expression, without ever declaring a variable of that type. We need to detect this // usage, and emit the struct type into the finished program. outX = IndirectDispatchArgs(one(), two(), three()).x; outY = IndirectDispatchArgs(one(), two(), three()).y; outZ = IndirectDispatchArgs(one(), two(), three()).z; }