1struct Types
2{
3	uint4 u;
4	int4 i;
5	float4 f;
6	double4 d;
7};
8
9RWStructuredBuffer<Types> data;
10
11[numthreads(32, 16, 1)]
12void CSMain(uint3 dti : SV_DispatchThreadID)
13{
14	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 0);
15	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 0);
16	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 0);
17	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 0);
18
19	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 0);
20	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 0);
21	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 0);
22	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 0);
23
24	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 0);
25	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 0);
26	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 0);
27	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 0);
28
29	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 0);
30	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 0);
31	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 0);
32	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 0);
33
34	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 1);
35	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 1);
36	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 1);
37	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 1);
38
39	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 1);
40	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 1);
41	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 1);
42	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 1);
43
44	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 1);
45	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 1);
46	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 1);
47	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 1);
48
49	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 1);
50	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 1);
51	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 1);
52	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 1);
53
54	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 2);
55	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 2);
56	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 2);
57	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 2);
58
59	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 2);
60	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 2);
61	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 2);
62	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 2);
63
64	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 2);
65	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 2);
66	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 2);
67	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 2);
68
69	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 2);
70	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 2);
71	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 2);
72	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 2);
73
74	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 3);
75	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 3);
76	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 3);
77	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 3);
78
79	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 3);
80	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 3);
81	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 3);
82	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 3);
83
84	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 3);
85	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 3);
86	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 3);
87	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 3);
88
89	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 3);
90	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 3);
91	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 3);
92	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 3);
93
94	data[dti.x].u = QuadReadAcrossX(data[dti.x].u);
95	data[dti.x].u.x = QuadReadAcrossX(data[dti.x].u.x);
96	data[dti.x].u.xy = QuadReadAcrossX(data[dti.x].u.xy);
97	data[dti.x].u.xyz = QuadReadAcrossX(data[dti.x].u.xyz);
98
99	data[dti.x].i = QuadReadAcrossX(data[dti.x].i);
100	data[dti.x].i.x = QuadReadAcrossX(data[dti.x].i.x);
101	data[dti.x].i.xy = QuadReadAcrossX(data[dti.x].i.xy);
102	data[dti.x].i.xyz = QuadReadAcrossX(data[dti.x].i.xyz);
103
104	data[dti.x].f = QuadReadAcrossX(data[dti.x].f);
105	data[dti.x].f.x = QuadReadAcrossX(data[dti.x].f.x);
106	data[dti.x].f.xy = QuadReadAcrossX(data[dti.x].f.xy);
107	data[dti.x].f.xyz = QuadReadAcrossX(data[dti.x].f.xyz);
108
109	data[dti.x].d = QuadReadAcrossX(data[dti.x].d);
110	data[dti.x].d.x = QuadReadAcrossX(data[dti.x].d.x);
111	data[dti.x].d.xy = QuadReadAcrossX(data[dti.x].d.xy);
112	data[dti.x].d.xyz = QuadReadAcrossX(data[dti.x].d.xyz);
113
114	data[dti.x].u = QuadReadAcrossY(data[dti.x].u);
115	data[dti.x].u.x = QuadReadAcrossY(data[dti.x].u.x);
116	data[dti.x].u.xy = QuadReadAcrossY(data[dti.x].u.xy);
117	data[dti.x].u.xyz = QuadReadAcrossY(data[dti.x].u.xyz);
118
119	data[dti.x].i = QuadReadAcrossY(data[dti.x].i);
120	data[dti.x].i.x = QuadReadAcrossY(data[dti.x].i.x);
121	data[dti.x].i.xy = QuadReadAcrossY(data[dti.x].i.xy);
122	data[dti.x].i.xyz = QuadReadAcrossY(data[dti.x].i.xyz);
123
124	data[dti.x].f = QuadReadAcrossY(data[dti.x].f);
125	data[dti.x].f.x = QuadReadAcrossY(data[dti.x].f.x);
126	data[dti.x].f.xy = QuadReadAcrossY(data[dti.x].f.xy);
127	data[dti.x].f.xyz = QuadReadAcrossY(data[dti.x].f.xyz);
128
129	data[dti.x].d = QuadReadAcrossY(data[dti.x].d);
130	data[dti.x].d.x = QuadReadAcrossY(data[dti.x].d.x);
131	data[dti.x].d.xy = QuadReadAcrossY(data[dti.x].d.xy);
132	data[dti.x].d.xyz = QuadReadAcrossY(data[dti.x].d.xyz);
133
134	data[dti.x].u = QuadReadAcrossDiagonal(data[dti.x].u);
135	data[dti.x].u.x = QuadReadAcrossDiagonal(data[dti.x].u.x);
136	data[dti.x].u.xy = QuadReadAcrossDiagonal(data[dti.x].u.xy);
137	data[dti.x].u.xyz = QuadReadAcrossDiagonal(data[dti.x].u.xyz);
138
139	data[dti.x].i = QuadReadAcrossDiagonal(data[dti.x].i);
140	data[dti.x].i.x = QuadReadAcrossDiagonal(data[dti.x].i.x);
141	data[dti.x].i.xy = QuadReadAcrossDiagonal(data[dti.x].i.xy);
142	data[dti.x].i.xyz = QuadReadAcrossDiagonal(data[dti.x].i.xyz);
143
144	data[dti.x].f = QuadReadAcrossDiagonal(data[dti.x].f);
145	data[dti.x].f.x = QuadReadAcrossDiagonal(data[dti.x].f.x);
146	data[dti.x].f.xy = QuadReadAcrossDiagonal(data[dti.x].f.xy);
147	data[dti.x].f.xyz = QuadReadAcrossDiagonal(data[dti.x].f.xyz);
148
149	data[dti.x].d = QuadReadAcrossDiagonal(data[dti.x].d);
150	data[dti.x].d.x = QuadReadAcrossDiagonal(data[dti.x].d.x);
151	data[dti.x].d.xy = QuadReadAcrossDiagonal(data[dti.x].d.xy);
152	data[dti.x].d.xyz = QuadReadAcrossDiagonal(data[dti.x].d.xyz);
153}
154