% Test allowed syntax for the "numthreads" attribute. [require] shader model >= 5.0 [compute shader] [numthreads(1, 1, 1)] void main() {} [compute shader fail] [numthreads] void main() {} [compute shader fail] [numthreads(1, 1)] void main() {} [compute shader fail] [numthreads(1, 1, 1, 1)] void main() {} [compute shader fail] [numthreads(0, 1, 1)] void main() {} [compute shader fail] [numthreads(1, 0, 1)] void main() {} [compute shader fail] [numthreads(1, 1, 0)] void main() {} [compute shader fail todo] [numthreads(-1, 1, 1)] void main() {} [compute shader fail todo] [numthreads(1, -1, 1)] void main() {} [compute shader fail todo] [numthreads(1, 1, -1)] void main() {} [compute shader fail todo] [numthreads(1, -1, -1)] void main() {} [compute shader todo] [numthreads(uint(1), 1, 1)] void main() {} [compute shader todo] [numthreads(int(1), 1, 1)] void main() {} [compute shader fail] [numthreads(float(1), 1, 1)] void main() {} [compute shader fail] [numthreads(uint1(1), 1, 1)] void main() {} [compute shader todo] [numthreads(int(1), 1, 1)] void main() {} [compute shader todo] [numthreads(1 + 1, 1, 1)] void main() {} [compute shader fail] [numthreads("1", 1, 1)] void main() {} [compute shader todo fail(sm>=6)] static int x = 1; [numthreads(x, 1, 1)] void main() {} [compute shader fail] void main() {} [compute shader fail(sm<6)] [NumThreads(1, 1, 1)] void main() {} [compute shader] [numthreads(1, 1, 1)] void main(); void main() {} [compute shader fail] void main() {} [numthreads(1, 1, 1)] void main(); [compute shader fail(sm<6)] void main(); [numthreads(1, 1, 1)] void main() {} [compute shader fail todo] /* Expressions with side effects are forbidden in attributes (but not if the * attribute is ignored). */ static int x = 1; [numthreads(x++, 1, 1)] void main() {} [compute shader fail todo] static int x = 1; [numthreads(++x, 1, 1)] void main() {} [compute shader fail todo] static int x = 1; [numthreads((x = 2), 1, 1)] void main() {} [compute shader fail(sm>=6)] static int x = 1; [numthreads(++x, 1, 1)] void func() {} [bogus(++x)] [numthreads(1, 1, 1)] void main() { func(); } [require] shader model >= 5.0 format r32-float uav-load [uav 0] format r32-float size (2d, 2, 2) 1.0 1.0 1.0 1.0 [compute shader] /* In SM < 6.0, attributes are taken from the first function, and dropped from the second. */ RWTexture2D u; [numthreads(2, 1, 1)] void main(uint2 id); [numthreads(1, 2, 1)] void main(uint2 id : sv_dispatchthreadid) { u[id] = 2.0; } [test] dispatch 1 1 1 probe uav 0 (0, 0) r (2.0) if(sm<6) probe uav 0 (0, 1) r (1.0) if(sm<6) probe uav 0 (1, 0) r (2.0) probe uav 0 (1, 1) r (1.0) if(sm>=6) probe uav 0 (0, 1) r (2.0) if(sm>=6) probe uav 0 (1, 0) r (1.0)