
386 GPGPU Programming for Games and Science
void CSMai n ( i nt2 dt : SV DispatchThreadID)
{
// Load the neighborhood of the pixel .
float data [NUM
DATA ] ;
int i=0;
int2 offset ;
[ unroll ]
for (offset.y =−RADIUS ; o f f s e t . y <= RADIUS ; ++o f f s e t . y )
{
[ unroll ]
for (offset.x =−RADIUS ; o f f s e t . x <= RADIUS ; ++o f f s e t . x )
{
data[ i ] = input [dt + offset ];
++ i ;
}
}
// Use an i ns er ti o n s or t to lo cate the median value .
for ( int i0 = 1; i0 < NUM
DATA ; + +i 0 )
{
float value = data [ i0 ];
int i1 ;
for (i1 = i0; i1 > 0; −− i1)
{
if (value < data [ i1 − 1])
{
data [ i1 ] = data [ i1 − 1];
}
else
{
break ;
}
}
data [ i1 ] = value ;
}
output