Merge pull request #2892 from greg-lunarg/mb
[platform/upstream/glslang.git] / Test / hlsl.wavereduction.comp
1 struct Types\r
2 {\r
3         uint4 u;\r
4         int4 i;\r
5         float4 f;\r
6         double4 d;\r
7 };\r
8 \r
9 RWStructuredBuffer<Types> data;\r
10 \r
11 [numthreads(32, 16, 1)]\r
12 void CSMain(uint3 dti : SV_DispatchThreadID)\r
13 {\r
14         data[dti.x].u = WaveActiveSum(data[dti.x].u);\r
15         data[dti.x].u.x = WaveActiveSum(data[dti.x].u.x);\r
16         data[dti.x].u.xy = WaveActiveSum(data[dti.x].u.xy);\r
17         data[dti.x].u.xyz = WaveActiveSum(data[dti.x].u.xyz);\r
18 \r
19         data[dti.x].i = WaveActiveSum(data[dti.x].i);\r
20         data[dti.x].i.x = WaveActiveSum(data[dti.x].i.x);\r
21         data[dti.x].i.xy = WaveActiveSum(data[dti.x].i.xy);\r
22         data[dti.x].i.xyz = WaveActiveSum(data[dti.x].i.xyz);\r
23 \r
24         data[dti.x].f = WaveActiveSum(data[dti.x].f);\r
25         data[dti.x].f.x = WaveActiveSum(data[dti.x].f.x);\r
26         data[dti.x].f.xy = WaveActiveSum(data[dti.x].f.xy);\r
27         data[dti.x].f.xyz = WaveActiveSum(data[dti.x].f.xyz);\r
28 \r
29         data[dti.x].d = WaveActiveSum(data[dti.x].d);\r
30         data[dti.x].d.x = WaveActiveSum(data[dti.x].d.x);\r
31         data[dti.x].d.xy = WaveActiveSum(data[dti.x].d.xy);\r
32         data[dti.x].d.xyz = WaveActiveSum(data[dti.x].d.xyz);\r
33 \r
34         data[dti.x].u = WaveActiveProduct(data[dti.x].u);\r
35         data[dti.x].u.x = WaveActiveProduct(data[dti.x].u.x);\r
36         data[dti.x].u.xy = WaveActiveProduct(data[dti.x].u.xy);\r
37         data[dti.x].u.xyz = WaveActiveProduct(data[dti.x].u.xyz);\r
38 \r
39         data[dti.x].i = WaveActiveProduct(data[dti.x].i);\r
40         data[dti.x].i.x = WaveActiveProduct(data[dti.x].i.x);\r
41         data[dti.x].i.xy = WaveActiveProduct(data[dti.x].i.xy);\r
42         data[dti.x].i.xyz = WaveActiveProduct(data[dti.x].i.xyz);\r
43 \r
44         data[dti.x].f = WaveActiveProduct(data[dti.x].f);\r
45         data[dti.x].f.x = WaveActiveProduct(data[dti.x].f.x);\r
46         data[dti.x].f.xy = WaveActiveProduct(data[dti.x].f.xy);\r
47         data[dti.x].f.xyz = WaveActiveProduct(data[dti.x].f.xyz);\r
48 \r
49         data[dti.x].d = WaveActiveProduct(data[dti.x].d);\r
50         data[dti.x].d.x = WaveActiveProduct(data[dti.x].d.x);\r
51         data[dti.x].d.xy = WaveActiveProduct(data[dti.x].d.xy);\r
52         data[dti.x].d.xyz = WaveActiveProduct(data[dti.x].d.xyz);\r
53 \r
54         data[dti.x].u = WaveActiveMin(data[dti.x].u);\r
55         data[dti.x].u.x = WaveActiveMin(data[dti.x].u.x);\r
56         data[dti.x].u.xy = WaveActiveMin(data[dti.x].u.xy);\r
57         data[dti.x].u.xyz = WaveActiveMin(data[dti.x].u.xyz);\r
58 \r
59         data[dti.x].i = WaveActiveMin(data[dti.x].i);\r
60         data[dti.x].i.x = WaveActiveMin(data[dti.x].i.x);\r
61         data[dti.x].i.xy = WaveActiveMin(data[dti.x].i.xy);\r
62         data[dti.x].i.xyz = WaveActiveMin(data[dti.x].i.xyz);\r
63 \r
64         data[dti.x].f = WaveActiveMin(data[dti.x].f);\r
65         data[dti.x].f.x = WaveActiveMin(data[dti.x].f.x);\r
66         data[dti.x].f.xy = WaveActiveMin(data[dti.x].f.xy);\r
67         data[dti.x].f.xyz = WaveActiveMin(data[dti.x].f.xyz);\r
68 \r
69         data[dti.x].d = WaveActiveMin(data[dti.x].d);\r
70         data[dti.x].d.x = WaveActiveMin(data[dti.x].d.x);\r
71         data[dti.x].d.xy = WaveActiveMin(data[dti.x].d.xy);\r
72         data[dti.x].d.xyz = WaveActiveMin(data[dti.x].d.xyz);\r
73 \r
74         data[dti.x].u = WaveActiveMax(data[dti.x].u);\r
75         data[dti.x].u.x = WaveActiveMax(data[dti.x].u.x);\r
76         data[dti.x].u.xy = WaveActiveMax(data[dti.x].u.xy);\r
77         data[dti.x].u.xyz = WaveActiveMax(data[dti.x].u.xyz);\r
78 \r
79         data[dti.x].i = WaveActiveMax(data[dti.x].i);\r
80         data[dti.x].i.x = WaveActiveMax(data[dti.x].i.x);\r
81         data[dti.x].i.xy = WaveActiveMax(data[dti.x].i.xy);\r
82         data[dti.x].i.xyz = WaveActiveMax(data[dti.x].i.xyz);\r
83 \r
84         data[dti.x].f = WaveActiveMax(data[dti.x].f);\r
85         data[dti.x].f.x = WaveActiveMax(data[dti.x].f.x);\r
86         data[dti.x].f.xy = WaveActiveMax(data[dti.x].f.xy);\r
87         data[dti.x].f.xyz = WaveActiveMax(data[dti.x].f.xyz);\r
88 \r
89         data[dti.x].d = WaveActiveMax(data[dti.x].d);\r
90         data[dti.x].d.x = WaveActiveMax(data[dti.x].d.x);\r
91         data[dti.x].d.xy = WaveActiveMax(data[dti.x].d.xy);\r
92         data[dti.x].d.xyz = WaveActiveMax(data[dti.x].d.xyz);\r
93 \r
94         data[dti.x].u = WaveActiveBitAnd(data[dti.x].u);\r
95         data[dti.x].u.x = WaveActiveBitAnd(data[dti.x].u.x);\r
96         data[dti.x].u.xy = WaveActiveBitAnd(data[dti.x].u.xy);\r
97         data[dti.x].u.xyz = WaveActiveBitAnd(data[dti.x].u.xyz);\r
98 \r
99         data[dti.x].i = WaveActiveBitAnd(data[dti.x].i);\r
100         data[dti.x].i.x = WaveActiveBitAnd(data[dti.x].i.x);\r
101         data[dti.x].i.xy = WaveActiveBitAnd(data[dti.x].i.xy);\r
102         data[dti.x].i.xyz = WaveActiveBitAnd(data[dti.x].i.xyz);\r
103 \r
104         data[dti.x].u = WaveActiveBitOr(data[dti.x].u);\r
105         data[dti.x].u.x = WaveActiveBitOr(data[dti.x].u.x);\r
106         data[dti.x].u.xy = WaveActiveBitOr(data[dti.x].u.xy);\r
107         data[dti.x].u.xyz = WaveActiveBitOr(data[dti.x].u.xyz);\r
108 \r
109         data[dti.x].i = WaveActiveBitOr(data[dti.x].i);\r
110         data[dti.x].i.x = WaveActiveBitOr(data[dti.x].i.x);\r
111         data[dti.x].i.xy = WaveActiveBitOr(data[dti.x].i.xy);\r
112         data[dti.x].i.xyz = WaveActiveBitOr(data[dti.x].i.xyz);\r
113 \r
114         data[dti.x].u = WaveActiveBitXor(data[dti.x].u);\r
115         data[dti.x].u.x = WaveActiveBitXor(data[dti.x].u.x);\r
116         data[dti.x].u.xy = WaveActiveBitXor(data[dti.x].u.xy);\r
117         data[dti.x].u.xyz = WaveActiveBitXor(data[dti.x].u.xyz);\r
118 \r
119         data[dti.x].i = WaveActiveBitXor(data[dti.x].i);\r
120         data[dti.x].i.x = WaveActiveBitXor(data[dti.x].i.x);\r
121         data[dti.x].i.xy = WaveActiveBitXor(data[dti.x].i.xy);\r
122         data[dti.x].i.xyz = WaveActiveBitXor(data[dti.x].i.xyz);\r
123 \r
124         data[dti.x].u.x = WaveActiveCountBits(data[dti.x].u.x == 0);\r
125 }\r