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