struct Types | |
{ | |
uint4 u; | |
int4 i; | |
float4 f; | |
double4 d; | |
}; | |
RWStructuredBuffer<Types> data; | |
[numthreads(32, 16, 1)] | |
void CSMain(uint3 dti : SV_DispatchThreadID) | |
{ | |
data[dti.x].u = WaveAllSum(data[dti.x].u); | |
data[dti.x].u.x = WaveAllSum(data[dti.x].u.x); | |
data[dti.x].u.xy = WaveAllSum(data[dti.x].u.xy); | |
data[dti.x].u.xyz = WaveAllSum(data[dti.x].u.xyz); | |
data[dti.x].i = WaveAllSum(data[dti.x].i); | |
data[dti.x].i.x = WaveAllSum(data[dti.x].i.x); | |
data[dti.x].i.xy = WaveAllSum(data[dti.x].i.xy); | |
data[dti.x].i.xyz = WaveAllSum(data[dti.x].i.xyz); | |
data[dti.x].f = WaveAllSum(data[dti.x].f); | |
data[dti.x].f.x = WaveAllSum(data[dti.x].f.x); | |
data[dti.x].f.xy = WaveAllSum(data[dti.x].f.xy); | |
data[dti.x].f.xyz = WaveAllSum(data[dti.x].f.xyz); | |
data[dti.x].d = WaveAllSum(data[dti.x].d); | |
data[dti.x].d.x = WaveAllSum(data[dti.x].d.x); | |
data[dti.x].d.xy = WaveAllSum(data[dti.x].d.xy); | |
data[dti.x].d.xyz = WaveAllSum(data[dti.x].d.xyz); | |
data[dti.x].u = WaveAllProduct(data[dti.x].u); | |
data[dti.x].u.x = WaveAllProduct(data[dti.x].u.x); | |
data[dti.x].u.xy = WaveAllProduct(data[dti.x].u.xy); | |
data[dti.x].u.xyz = WaveAllProduct(data[dti.x].u.xyz); | |
data[dti.x].i = WaveAllProduct(data[dti.x].i); | |
data[dti.x].i.x = WaveAllProduct(data[dti.x].i.x); | |
data[dti.x].i.xy = WaveAllProduct(data[dti.x].i.xy); | |
data[dti.x].i.xyz = WaveAllProduct(data[dti.x].i.xyz); | |
data[dti.x].f = WaveAllProduct(data[dti.x].f); | |
data[dti.x].f.x = WaveAllProduct(data[dti.x].f.x); | |
data[dti.x].f.xy = WaveAllProduct(data[dti.x].f.xy); | |
data[dti.x].f.xyz = WaveAllProduct(data[dti.x].f.xyz); | |
data[dti.x].d = WaveAllProduct(data[dti.x].d); | |
data[dti.x].d.x = WaveAllProduct(data[dti.x].d.x); | |
data[dti.x].d.xy = WaveAllProduct(data[dti.x].d.xy); | |
data[dti.x].d.xyz = WaveAllProduct(data[dti.x].d.xyz); | |
data[dti.x].u = WaveAllMin(data[dti.x].u); | |
data[dti.x].u.x = WaveAllMin(data[dti.x].u.x); | |
data[dti.x].u.xy = WaveAllMin(data[dti.x].u.xy); | |
data[dti.x].u.xyz = WaveAllMin(data[dti.x].u.xyz); | |
data[dti.x].i = WaveAllMin(data[dti.x].i); | |
data[dti.x].i.x = WaveAllMin(data[dti.x].i.x); | |
data[dti.x].i.xy = WaveAllMin(data[dti.x].i.xy); | |
data[dti.x].i.xyz = WaveAllMin(data[dti.x].i.xyz); | |
data[dti.x].f = WaveAllMin(data[dti.x].f); | |
data[dti.x].f.x = WaveAllMin(data[dti.x].f.x); | |
data[dti.x].f.xy = WaveAllMin(data[dti.x].f.xy); | |
data[dti.x].f.xyz = WaveAllMin(data[dti.x].f.xyz); | |
data[dti.x].d = WaveAllMin(data[dti.x].d); | |
data[dti.x].d.x = WaveAllMin(data[dti.x].d.x); | |
data[dti.x].d.xy = WaveAllMin(data[dti.x].d.xy); | |
data[dti.x].d.xyz = WaveAllMin(data[dti.x].d.xyz); | |
data[dti.x].u = WaveAllMax(data[dti.x].u); | |
data[dti.x].u.x = WaveAllMax(data[dti.x].u.x); | |
data[dti.x].u.xy = WaveAllMax(data[dti.x].u.xy); | |
data[dti.x].u.xyz = WaveAllMax(data[dti.x].u.xyz); | |
data[dti.x].i = WaveAllMax(data[dti.x].i); | |
data[dti.x].i.x = WaveAllMax(data[dti.x].i.x); | |
data[dti.x].i.xy = WaveAllMax(data[dti.x].i.xy); | |
data[dti.x].i.xyz = WaveAllMax(data[dti.x].i.xyz); | |
data[dti.x].f = WaveAllMax(data[dti.x].f); | |
data[dti.x].f.x = WaveAllMax(data[dti.x].f.x); | |
data[dti.x].f.xy = WaveAllMax(data[dti.x].f.xy); | |
data[dti.x].f.xyz = WaveAllMax(data[dti.x].f.xyz); | |
data[dti.x].d = WaveAllMax(data[dti.x].d); | |
data[dti.x].d.x = WaveAllMax(data[dti.x].d.x); | |
data[dti.x].d.xy = WaveAllMax(data[dti.x].d.xy); | |
data[dti.x].d.xyz = WaveAllMax(data[dti.x].d.xyz); | |
data[dti.x].u = WaveAllBitAnd(data[dti.x].u); | |
data[dti.x].u.x = WaveAllBitAnd(data[dti.x].u.x); | |
data[dti.x].u.xy = WaveAllBitAnd(data[dti.x].u.xy); | |
data[dti.x].u.xyz = WaveAllBitAnd(data[dti.x].u.xyz); | |
data[dti.x].i = WaveAllBitAnd(data[dti.x].i); | |
data[dti.x].i.x = WaveAllBitAnd(data[dti.x].i.x); | |
data[dti.x].i.xy = WaveAllBitAnd(data[dti.x].i.xy); | |
data[dti.x].i.xyz = WaveAllBitAnd(data[dti.x].i.xyz); | |
data[dti.x].u = WaveAllBitOr(data[dti.x].u); | |
data[dti.x].u.x = WaveAllBitOr(data[dti.x].u.x); | |
data[dti.x].u.xy = WaveAllBitOr(data[dti.x].u.xy); | |
data[dti.x].u.xyz = WaveAllBitOr(data[dti.x].u.xyz); | |
data[dti.x].i = WaveAllBitOr(data[dti.x].i); | |
data[dti.x].i.x = WaveAllBitOr(data[dti.x].i.x); | |
data[dti.x].i.xy = WaveAllBitOr(data[dti.x].i.xy); | |
data[dti.x].i.xyz = WaveAllBitOr(data[dti.x].i.xyz); | |
data[dti.x].u = WaveAllBitXor(data[dti.x].u); | |
data[dti.x].u.x = WaveAllBitXor(data[dti.x].u.x); | |
data[dti.x].u.xy = WaveAllBitXor(data[dti.x].u.xy); | |
data[dti.x].u.xyz = WaveAllBitXor(data[dti.x].u.xyz); | |
data[dti.x].i = WaveAllBitXor(data[dti.x].i); | |
data[dti.x].i.x = WaveAllBitXor(data[dti.x].i.x); | |
data[dti.x].i.xy = WaveAllBitXor(data[dti.x].i.xy); | |
data[dti.x].i.xyz = WaveAllBitXor(data[dti.x].i.xyz); | |
} |