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