18 __kernel
void sobel(__global
const uchar* restrict inputImage,
20 __global
char* restrict outputImageDX,
21 __global
char* restrict outputImageDY)
29 const int column = get_global_id(0) * 16;
30 const int row = get_global_id(1) * 1;
33 const int offset = row * width + column;
45 uchar16 leftLoad = vload16(0, inputImage + (offset + 0));
46 uchar16 middleLoad = vload16(0, inputImage + (offset + 1));
47 uchar16 rightLoad = vload16(0, inputImage + (offset + 2));
56 short16 leftData = convert_short16(leftLoad);
57 short16 middleData = convert_short16(middleLoad);
58 short16 rightData = convert_short16(rightLoad);
71 short16 dx = rightData - leftData;
72 short16 dy = rightData + leftData + middleData * (short)2;
80 leftLoad = vload16(0, inputImage + (offset + width * 1 + 0));
81 rightLoad = vload16(0, inputImage + (offset + width * 1 + 2));
83 leftData = convert_short16(leftLoad);
84 rightData = convert_short16(rightLoad);
91 dx += (rightData - leftData) * (
short)2;
94 leftLoad = vload16(0, inputImage + (offset + width * 2 + 0));
95 middleLoad = vload16(0, inputImage + (offset + width * 2 + 1));
96 rightLoad = vload16(0, inputImage + (offset + width * 2 + 2));
98 leftData = convert_short16(leftLoad);
99 middleData = convert_short16(middleLoad);
100 rightData = convert_short16(rightLoad);
107 dx += rightData - leftData;
108 dy -= rightData + leftData + middleData * (short)2;
119 vstore16(convert_char16(dx >> 3), 0, outputImageDX + offset + width + 1);
120 vstore16(convert_char16(dy >> 3), 0, outputImageDY + offset + width + 1);