Merge pull request #3031 from rg3igalia/sub-group-size-arb-flat-fix
[platform/upstream/glslang.git] / Test / hlsl.rw.atomics.frag
1 SamplerState       g_sSamp;
2
3 RWTexture1D <float> g_tTex1df1;
4 RWTexture1D <int>   g_tTex1di1;
5 RWTexture1D <uint>  g_tTex1du1;
6
7 RWTexture2D <float> g_tTex2df1;
8 RWTexture2D <int>   g_tTex2di1;
9 RWTexture2D <uint>  g_tTex2du1;
10
11 RWTexture3D <float> g_tTex3df1;
12 RWTexture3D <int>   g_tTex3di1;
13 RWTexture3D <uint>  g_tTex3du1;
14
15 RWTexture1DArray <float> g_tTex1df1a;
16 RWTexture1DArray <int>   g_tTex1di1a;
17 RWTexture1DArray <uint>  g_tTex1du1a;
18
19 RWTexture2DArray <float> g_tTex2df1a;
20 RWTexture2DArray <int>   g_tTex2di1a;
21 RWTexture2DArray <uint>  g_tTex2du1a;
22
23 RWBuffer <float> g_tBuffF;
24 RWBuffer <int>   g_tBuffI;
25 RWBuffer <uint>  g_tBuffU;
26
27 struct PS_OUTPUT
28 {
29     float4 Color : SV_Target0;
30 };
31
32 uniform uint  u1;
33 uniform uint2 u2;
34 uniform uint3 u3;
35 uniform uint  u1b;
36 uniform uint  u1c;
37
38 uniform int   i1;
39 uniform int2  i2;
40 uniform int3  i3;
41 uniform int   i1b;
42 uniform int   i1c;
43
44 PS_OUTPUT main()
45 {
46     uint out_u1;
47     int out_i1;
48
49     // 1D int
50     InterlockedAdd(g_tTex1di1[i1], i1b);
51     InterlockedAdd(g_tTex1di1[i1], i1, out_i1);
52     InterlockedAnd(g_tTex1di1[i1], i1b);
53     InterlockedAnd(g_tTex1di1[i1], i1, out_i1);
54     InterlockedCompareExchange(g_tTex1di1[i1], i1b, i1c, out_i1);
55     InterlockedExchange(g_tTex1di1[i1], i1, out_i1);
56     InterlockedMax(g_tTex1di1[i1], i1b);
57     InterlockedMax(g_tTex1di1[i1], i1, out_i1);
58     InterlockedMin(g_tTex1di1[i1], i1b);
59     InterlockedMin(g_tTex1di1[i1], i1, out_i1);
60     InterlockedOr(g_tTex1di1[i1], i1b);
61     InterlockedOr(g_tTex1di1[i1], i1, out_i1);
62     InterlockedXor(g_tTex1di1[i1], i1b);
63     InterlockedXor(g_tTex1di1[i1], i1, out_i1);
64
65     // 1D uint
66     InterlockedAdd(g_tTex1du1[u1], u1);
67     InterlockedAdd(g_tTex1du1[u1], u1, out_u1);
68     InterlockedAnd(g_tTex1du1[u1], u1);
69     InterlockedAnd(g_tTex1du1[u1], u1, out_u1);
70     InterlockedCompareExchange(g_tTex1du1[u1], u1b, u1c, out_u1);
71     InterlockedExchange(g_tTex1du1[u1], u1, out_u1);
72     InterlockedMax(g_tTex1du1[u1], u1);
73     InterlockedMax(g_tTex1du1[u1], u1, out_u1);
74     InterlockedMin(g_tTex1du1[u1], u1);
75     InterlockedMin(g_tTex1du1[u1], u1, out_u1);
76     InterlockedOr(g_tTex1du1[u1], u1);
77     InterlockedOr(g_tTex1du1[u1], u1, out_u1);
78     InterlockedXor(g_tTex1du1[u1], u1);
79     InterlockedXor(g_tTex1du1[u1], u1, out_u1);
80
81     // 2D int
82     InterlockedAdd(g_tTex2di1[i2], i1b);
83     InterlockedAdd(g_tTex2di1[i2], i1, out_i1);
84     InterlockedAnd(g_tTex2di1[i2], i1b);
85     InterlockedAnd(g_tTex2di1[i2], i1, out_i1);
86     InterlockedCompareExchange(g_tTex2di1[i2], i1b, i1c, out_i1);
87     InterlockedExchange(g_tTex2di1[i2], i1, out_i1);
88     InterlockedMax(g_tTex2di1[i2], i1b);
89     InterlockedMax(g_tTex2di1[i2], i1, out_i1);
90     InterlockedMin(g_tTex2di1[i2], i1b);
91     InterlockedMin(g_tTex2di1[i2], i1, out_i1);
92     InterlockedOr(g_tTex2di1[i2], i1b);
93     InterlockedOr(g_tTex2di1[i2], i1, out_i1);
94     InterlockedXor(g_tTex2di1[i2], i1b);
95     InterlockedXor(g_tTex2di1[i2], i1, out_i1);
96
97     // 2D uint
98     InterlockedAdd(g_tTex2du1[u2], u1);
99     InterlockedAdd(g_tTex2du1[u2], u1, out_u1);
100     InterlockedAnd(g_tTex2du1[u2], u1);
101     InterlockedAnd(g_tTex2du1[u2], u1, out_u1);
102     InterlockedCompareExchange(g_tTex2du1[u2], u1b, u1c, out_u1);
103     InterlockedExchange(g_tTex2du1[u2], u1, out_u1);
104     InterlockedMax(g_tTex2du1[u2], u1);
105     InterlockedMax(g_tTex2du1[u2], u1, out_u1);
106     InterlockedMin(g_tTex2du1[u2], u1);
107     InterlockedMin(g_tTex2du1[u2], u1, out_u1);
108     InterlockedOr(g_tTex2du1[u2], u1);
109     InterlockedOr(g_tTex2du1[u2], u1, out_u1);
110     InterlockedXor(g_tTex2du1[u2], u1);
111     InterlockedXor(g_tTex2du1[u2], u1, out_u1);
112
113     // 3D int
114     InterlockedAdd(g_tTex3di1[i3], i1b);
115     InterlockedAdd(g_tTex3di1[i3], i1, out_i1);
116     InterlockedAnd(g_tTex3di1[i3], i1b);
117     InterlockedAnd(g_tTex3di1[i3], i1, out_i1);
118     InterlockedCompareExchange(g_tTex3di1[i3], i1b, i1c, out_i1);
119     InterlockedExchange(g_tTex3di1[i3], i1, out_i1);
120     InterlockedMax(g_tTex3di1[i3], i1b);
121     InterlockedMax(g_tTex3di1[i3], i1, out_i1);
122     InterlockedMin(g_tTex3di1[i3], i1b);
123     InterlockedMin(g_tTex3di1[i3], i1, out_i1);
124     InterlockedOr(g_tTex3di1[i3], i1b);
125     InterlockedOr(g_tTex3di1[i3], i1, out_i1);
126     InterlockedXor(g_tTex3di1[i3], i1b);
127     InterlockedXor(g_tTex3di1[i3], i1, out_i1);
128
129     // 3D uint
130     InterlockedAdd(g_tTex3du1[u3], u1);
131     InterlockedAdd(g_tTex3du1[u3], u1, out_u1);
132     InterlockedAnd(g_tTex3du1[u3], u1);
133     InterlockedAnd(g_tTex3du1[u3], u1, out_u1);
134     InterlockedCompareExchange(g_tTex3du1[u3], u1b, u1c, out_u1);
135     InterlockedExchange(g_tTex3du1[u3], u1, out_u1);
136     InterlockedMax(g_tTex3du1[u3], u1);
137     InterlockedMax(g_tTex3du1[u3], u1, out_u1);
138     InterlockedMin(g_tTex3du1[u3], u1);
139     InterlockedMin(g_tTex3du1[u3], u1, out_u1);
140     InterlockedOr(g_tTex3du1[u3], u1);
141     InterlockedOr(g_tTex3du1[u3], u1, out_u1);
142     InterlockedXor(g_tTex3du1[u3], u1);
143     InterlockedXor(g_tTex3du1[u3], u1, out_u1);
144
145     // 1D array int
146     InterlockedAdd(g_tTex1di1a[i2], i1b);
147     InterlockedAdd(g_tTex1di1a[i2], i1, out_i1);
148     InterlockedAnd(g_tTex1di1a[i2], i1b);
149     InterlockedAnd(g_tTex1di1a[i2], i1, out_i1);
150     InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1);
151     InterlockedExchange(g_tTex1di1a[i2], i1, out_i1);
152     InterlockedMax(g_tTex1di1a[i2], i1b);
153     InterlockedMax(g_tTex1di1a[i2], i1, out_i1);
154     InterlockedMin(g_tTex1di1a[i2], i1b);
155     InterlockedMin(g_tTex1di1a[i2], i1, out_i1);
156     InterlockedOr(g_tTex1di1a[i2], i1b);
157     InterlockedOr(g_tTex1di1a[i2], i1, out_i1);
158     InterlockedXor(g_tTex1di1a[i2], i1b);
159     InterlockedXor(g_tTex1di1a[i2], i1, out_i1);
160
161     // 1D array uint
162     InterlockedAdd(g_tTex1du1a[u2], u1);
163     InterlockedAdd(g_tTex1du1a[u2], u1, out_u1);
164     InterlockedAnd(g_tTex1du1a[u2], u1);
165     InterlockedAnd(g_tTex1du1a[u2], u1, out_u1);
166     InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1);
167     InterlockedExchange(g_tTex1du1a[u2], u1, out_u1);
168     InterlockedMax(g_tTex1du1a[u2], u1);
169     InterlockedMax(g_tTex1du1a[u2], u1, out_u1);
170     InterlockedMin(g_tTex1du1a[u2], u1);
171     InterlockedMin(g_tTex1du1a[u2], u1, out_u1);
172     InterlockedOr(g_tTex1du1a[u2], u1);
173     InterlockedOr(g_tTex1du1a[u2], u1, out_u1);
174     InterlockedXor(g_tTex1du1a[u2], u1);
175     InterlockedXor(g_tTex1du1a[u2], u1, out_u1);
176
177     // 2D array int
178     InterlockedAdd(g_tTex1di1a[i2], i1b);
179     InterlockedAdd(g_tTex1di1a[i2], i1, out_i1);
180     InterlockedAnd(g_tTex1di1a[i2], i1b);
181     InterlockedAnd(g_tTex1di1a[i2], i1, out_i1);
182     InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1);
183     InterlockedExchange(g_tTex1di1a[i2], i1, out_i1);
184     InterlockedMax(g_tTex1di1a[i2], i1b);
185     InterlockedMax(g_tTex1di1a[i2], i1, out_i1);
186     InterlockedMin(g_tTex1di1a[i2], i1b);
187     InterlockedMin(g_tTex1di1a[i2], i1, out_i1);
188     InterlockedOr(g_tTex1di1a[i2], i1b);
189     InterlockedOr(g_tTex1di1a[i2], i1, out_i1);
190     InterlockedXor(g_tTex1di1a[i2], i1b);
191     InterlockedXor(g_tTex1di1a[i2], i1, out_i1);
192
193     // 2D array uint
194     InterlockedAdd(g_tTex1du1a[u2], u1);
195     InterlockedAdd(g_tTex1du1a[u2], u1, out_u1);
196     InterlockedAnd(g_tTex1du1a[u2], u1);
197     InterlockedAnd(g_tTex1du1a[u2], u1, out_u1);
198     InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1);
199     InterlockedExchange(g_tTex1du1a[u2], u1, out_u1);
200     InterlockedMax(g_tTex1du1a[u2], u1);
201     InterlockedMax(g_tTex1du1a[u2], u1, out_u1);
202     InterlockedMin(g_tTex1du1a[u2], u1);
203     InterlockedMin(g_tTex1du1a[u2], u1, out_u1);
204     InterlockedOr(g_tTex1du1a[u2], u1);
205     InterlockedOr(g_tTex1du1a[u2], u1, out_u1);
206     InterlockedXor(g_tTex1du1a[u2], u1);
207     InterlockedXor(g_tTex1du1a[u2], u1, out_u1);
208
209     // buffer int
210     InterlockedAdd(g_tBuffI[i1], i1b);
211     InterlockedAdd(g_tBuffI[i1], i1, out_i1);
212     InterlockedAnd(g_tBuffI[i1], i1b);
213     InterlockedAnd(g_tBuffI[i1], i1, out_i1);
214     InterlockedCompareExchange(g_tBuffI[i1], i1b, i1c, out_i1);
215     InterlockedExchange(g_tBuffI[i1], i1, out_i1);
216     InterlockedMax(g_tBuffI[i1], i1b);
217     InterlockedMax(g_tBuffI[i1], i1, out_i1);
218     InterlockedMin(g_tBuffI[i1], i1b);
219     InterlockedMin(g_tBuffI[i1], i1, out_i1);
220     InterlockedOr(g_tBuffI[i1], i1b);
221     InterlockedOr(g_tBuffI[i1], i1, out_i1);
222     InterlockedXor(g_tBuffI[i1], i1b);
223     InterlockedXor(g_tBuffI[i1], i1, out_i1);
224
225     // buffer uint
226     InterlockedAdd(g_tBuffU[u1], u1);
227     InterlockedAdd(g_tBuffU[u1], u1, out_u1);
228     InterlockedAnd(g_tBuffU[u1], u1);
229     InterlockedAnd(g_tBuffU[u1], u1, out_u1);
230     InterlockedCompareExchange(g_tBuffU[u1], u1b, u1c, out_u1);
231     InterlockedExchange(g_tBuffU[u1], u1, out_u1);
232     InterlockedMax(g_tBuffU[u1], u1);
233     InterlockedMax(g_tBuffU[u1], u1, out_u1);
234     InterlockedMin(g_tBuffU[u1], u1);
235     InterlockedMin(g_tBuffU[u1], u1, out_u1);
236     InterlockedOr(g_tBuffU[u1], u1);
237     InterlockedOr(g_tBuffU[u1], u1, out_u1);
238     InterlockedXor(g_tBuffU[u1], u1);
239     InterlockedXor(g_tBuffU[u1], u1, out_u1);
240
241     PS_OUTPUT psout;
242     psout.Color = 1.0;
243     return psout;
244 }