Home | History | Annotate | Download | only in stitching
      1 // This file is auto-generated. Do not edit!
      2 
      3 #include "precomp.hpp"
      4 #include "opencl_kernels_stitching.hpp"
      5 
      6 namespace cv
      7 {
      8 namespace ocl
      9 {
     10 namespace stitching
     11 {
     12 
     13 const struct ProgramEntry multibandblend={"multibandblend",
     14 "#ifndef NL\n"
     15 "#define NL\n"
     16 "#endif\n"
     17 "#define REF(x) x\n"
     18 "#define __CAT(x, y) x##y\n"
     19 "#define CAT(x, y) __CAT(x, y)\n"
     20 "#define DECLARE_MAT_ARG(name) \\\n"
     21 "__global uchar* restrict name ## Ptr, \\\n"
     22 "int name ## StepBytes, \\\n"
     23 "int name ## Offset, \\\n"
     24 "int name ## Height, \\\n"
     25 "int name ## Width NL\n"
     26 "#define MAT_BYTE_OFFSET(name, x, y) mad24((y), name ## StepBytes, ((x)) * (int)(name ## _TSIZE) + name ## Offset)\n"
     27 "#define MAT_RELATIVE_BYTE_OFFSET(name, x, y) mad24(y, name ## StepBytes, (x) * (int)(name ## _TSIZE))\n"
     28 "#define __LOAD_MAT_AT(name, byteOffset) *((const __global name ## _T*)(name ## Ptr + (byteOffset)))\n"
     29 "#define __vload_CN__(name_cn) vload ## name_cn\n"
     30 "#define __vload_CN_(name_cn) __vload_CN__(name_cn)\n"
     31 "#define __vload_CN(name) __vload_CN_(name ## _CN)\n"
     32 "#define __LOAD_MAT_AT_vload(name, byteOffset) __vload_CN(name)(0, ((const __global name ## _T1*)(name ## Ptr + (byteOffset))))\n"
     33 "#define __LOAD_MAT_AT_1 __LOAD_MAT_AT\n"
     34 "#define __LOAD_MAT_AT_2 __LOAD_MAT_AT\n"
     35 "#define __LOAD_MAT_AT_3 __LOAD_MAT_AT_vload\n"
     36 "#define __LOAD_MAT_AT_4 __LOAD_MAT_AT\n"
     37 "#define __LOAD_MAT_AT_CN__(name_cn) __LOAD_MAT_AT_ ## name_cn\n"
     38 "#define __LOAD_MAT_AT_CN_(name_cn) __LOAD_MAT_AT_CN__(name_cn)\n"
     39 "#define __LOAD_MAT_AT_CN(name) __LOAD_MAT_AT_CN_(name ## _CN)\n"
     40 "#define LOAD_MAT_AT(name, byteOffset) __LOAD_MAT_AT_CN(name)(name, byteOffset)\n"
     41 "#define __STORE_MAT_AT(name, byteOffset, v) *((__global name ## _T*)(name ## Ptr + (byteOffset))) = v\n"
     42 "#define __vstore_CN__(name_cn) vstore ## name_cn\n"
     43 "#define __vstore_CN_(name_cn) __vstore_CN__(name_cn)\n"
     44 "#define __vstore_CN(name) __vstore_CN_(name ## _CN)\n"
     45 "#define __STORE_MAT_AT_vstore(name, byteOffset, v) __vstore_CN(name)(v, 0, ((__global name ## _T1*)(name ## Ptr + (byteOffset))))\n"
     46 "#define __STORE_MAT_AT_1 __STORE_MAT_AT\n"
     47 "#define __STORE_MAT_AT_2 __STORE_MAT_AT\n"
     48 "#define __STORE_MAT_AT_3 __STORE_MAT_AT_vstore\n"
     49 "#define __STORE_MAT_AT_4 __STORE_MAT_AT\n"
     50 "#define __STORE_MAT_AT_CN__(name_cn) __STORE_MAT_AT_ ## name_cn\n"
     51 "#define __STORE_MAT_AT_CN_(name_cn) __STORE_MAT_AT_CN__(name_cn)\n"
     52 "#define __STORE_MAT_AT_CN(name) __STORE_MAT_AT_CN_(name ## _CN)\n"
     53 "#define STORE_MAT_AT(name, byteOffset, v) __STORE_MAT_AT_CN(name)(name, byteOffset, v)\n"
     54 "#define T1_uchar uchar\n"
     55 "#define T1_uchar2 uchar\n"
     56 "#define T1_uchar3 uchar\n"
     57 "#define T1_uchar4 uchar\n"
     58 "#define T1_char char\n"
     59 "#define T1_char2 char\n"
     60 "#define T1_char3 char\n"
     61 "#define T1_char4 char\n"
     62 "#define T1_ushort ushort\n"
     63 "#define T1_ushort2 ushort\n"
     64 "#define T1_ushort3 ushort\n"
     65 "#define T1_ushort4 ushort\n"
     66 "#define T1_short short\n"
     67 "#define T1_short2 short\n"
     68 "#define T1_short3 short\n"
     69 "#define T1_short4 short\n"
     70 "#define T1_int int\n"
     71 "#define T1_int2 int\n"
     72 "#define T1_int3 int\n"
     73 "#define T1_int4 int\n"
     74 "#define T1_float float\n"
     75 "#define T1_float2 float\n"
     76 "#define T1_float3 float\n"
     77 "#define T1_float4 float\n"
     78 "#define T1_double double\n"
     79 "#define T1_double2 double\n"
     80 "#define T1_double3 double\n"
     81 "#define T1_double4 double\n"
     82 "#define T1(type) REF(CAT(T1_, REF(type)))\n"
     83 "#define uchar1 uchar\n"
     84 "#define char1 char\n"
     85 "#define short1 short\n"
     86 "#define ushort1 ushort\n"
     87 "#define int1 int\n"
     88 "#define float1 float\n"
     89 "#define double1 double\n"
     90 "#define TYPE(type, cn) REF(CAT(REF(type), REF(cn)))\n"
     91 "#define __CONVERT_MODE_uchar_uchar __NO_CONVERT\n"
     92 "#define __CONVERT_MODE_uchar_char __CONVERT_sat\n"
     93 "#define __CONVERT_MODE_uchar_ushort __CONVERT\n"
     94 "#define __CONVERT_MODE_uchar_short __CONVERT\n"
     95 "#define __CONVERT_MODE_uchar_int __CONVERT\n"
     96 "#define __CONVERT_MODE_uchar_float __CONVERT\n"
     97 "#define __CONVERT_MODE_uchar_double __CONVERT\n"
     98 "#define __CONVERT_MODE_char_uchar __CONVERT_sat\n"
     99 "#define __CONVERT_MODE_char_char __NO_CONVERT\n"
    100 "#define __CONVERT_MODE_char_ushort __CONVERT_sat\n"
    101 "#define __CONVERT_MODE_char_short __CONVERT\n"
    102 "#define __CONVERT_MODE_char_int __CONVERT\n"
    103 "#define __CONVERT_MODE_char_float __CONVERT\n"
    104 "#define __CONVERT_MODE_char_double __CONVERT\n"
    105 "#define __CONVERT_MODE_ushort_uchar __CONVERT_sat\n"
    106 "#define __CONVERT_MODE_ushort_char __CONVERT_sat\n"
    107 "#define __CONVERT_MODE_ushort_ushort __NO_CONVERT\n"
    108 "#define __CONVERT_MODE_ushort_short __CONVERT_sat\n"
    109 "#define __CONVERT_MODE_ushort_int __CONVERT\n"
    110 "#define __CONVERT_MODE_ushort_float __CONVERT\n"
    111 "#define __CONVERT_MODE_ushort_double __CONVERT\n"
    112 "#define __CONVERT_MODE_short_uchar __CONVERT_sat\n"
    113 "#define __CONVERT_MODE_short_char __CONVERT_sat\n"
    114 "#define __CONVERT_MODE_short_ushort __CONVERT_sat\n"
    115 "#define __CONVERT_MODE_short_short __NO_CONVERT\n"
    116 "#define __CONVERT_MODE_short_int __CONVERT\n"
    117 "#define __CONVERT_MODE_short_float __CONVERT\n"
    118 "#define __CONVERT_MODE_short_double __CONVERT\n"
    119 "#define __CONVERT_MODE_int_uchar __CONVERT_sat\n"
    120 "#define __CONVERT_MODE_int_char __CONVERT_sat\n"
    121 "#define __CONVERT_MODE_int_ushort __CONVERT_sat\n"
    122 "#define __CONVERT_MODE_int_short __CONVERT_sat\n"
    123 "#define __CONVERT_MODE_int_int __NO_CONVERT\n"
    124 "#define __CONVERT_MODE_int_float __CONVERT\n"
    125 "#define __CONVERT_MODE_int_double __CONVERT\n"
    126 "#define __CONVERT_MODE_float_uchar __CONVERT_sat_rte\n"
    127 "#define __CONVERT_MODE_float_char __CONVERT_sat_rte\n"
    128 "#define __CONVERT_MODE_float_ushort __CONVERT_sat_rte\n"
    129 "#define __CONVERT_MODE_float_short __CONVERT_sat_rte\n"
    130 "#define __CONVERT_MODE_float_int __CONVERT_rte\n"
    131 "#define __CONVERT_MODE_float_float __NO_CONVERT\n"
    132 "#define __CONVERT_MODE_float_double __CONVERT\n"
    133 "#define __CONVERT_MODE_double_uchar __CONVERT_sat_rte\n"
    134 "#define __CONVERT_MODE_double_char __CONVERT_sat_rte\n"
    135 "#define __CONVERT_MODE_double_ushort __CONVERT_sat_rte\n"
    136 "#define __CONVERT_MODE_double_short __CONVERT_sat_rte\n"
    137 "#define __CONVERT_MODE_double_int __CONVERT_rte\n"
    138 "#define __CONVERT_MODE_double_float __CONVERT\n"
    139 "#define __CONVERT_MODE_double_double __NO_CONVERT\n"
    140 "#define __CONVERT_MODE(srcType, dstType) CAT(__CONVERT_MODE_, CAT(REF(T1(srcType)), CAT(_, REF(T1(dstType)))))\n"
    141 "#define __ROUND_MODE__NO_CONVERT\n"
    142 "#define __ROUND_MODE__CONVERT\n"
    143 "#define __ROUND_MODE__CONVERT_rte _rte\n"
    144 "#define __ROUND_MODE__CONVERT_sat _sat\n"
    145 "#define __ROUND_MODE__CONVERT_sat_rte _sat_rte\n"
    146 "#define ROUND_MODE(srcType, dstType) CAT(__ROUND_MODE_, __CONVERT_MODE(srcType, dstType))\n"
    147 "#define __CONVERT_ROUND(dstType, roundMode) CAT(CAT(convert_, REF(dstType)), roundMode)\n"
    148 "#define __NO_CONVERT(dstType)\n"
    149 "#define __CONVERT(dstType) __CONVERT_ROUND(dstType,)\n"
    150 "#define __CONVERT_rte(dstType) __CONVERT_ROUND(dstType,_rte)\n"
    151 "#define __CONVERT_sat(dstType) __CONVERT_ROUND(dstType,_sat)\n"
    152 "#define __CONVERT_sat_rte(dstType) __CONVERT_ROUND(dstType,_sat_rte)\n"
    153 "#define CONVERT(srcType, dstType) REF(__CONVERT_MODE(srcType,dstType))(dstType)\n"
    154 "#define CONVERT_TO(dstType) __CONVERT_ROUND(dstType,)\n"
    155 "#define CV_8U   0\n"
    156 "#define CV_8S   1\n"
    157 "#define CV_16U  2\n"
    158 "#define CV_16S  3\n"
    159 "#define CV_32S  4\n"
    160 "#define CV_32F  5\n"
    161 "#define CV_64F  6\n"
    162 "#if defined(DEFINE_feed)\n"
    163 "#define workType TYPE(weight_T1, src_CN)\n"
    164 "#if src_DEPTH == 3 && src_CN == 3\n"
    165 "#define convertSrcToWorkType convert_float3\n"
    166 "#else\n"
    167 "#define convertSrcToWorkType CONVERT_TO(workType)\n"
    168 "#endif\n"
    169 "#if dst_DEPTH == 3 && dst_CN == 3\n"
    170 "#define convertToDstType convert_short3\n"
    171 "#else\n"
    172 "#define convertToDstType CONVERT_TO(dst_T)\n"
    173 "#endif\n"
    174 "__kernel void feed(\n"
    175 "DECLARE_MAT_ARG(src), DECLARE_MAT_ARG(weight),\n"
    176 "DECLARE_MAT_ARG(dst), DECLARE_MAT_ARG(dstWeight)\n"
    177 ")\n"
    178 "{\n"
    179 "const int x = get_global_id(0);\n"
    180 "const int y = get_global_id(1);\n"
    181 "if (x < srcWidth && y < srcHeight)\n"
    182 "{\n"
    183 "int src_byteOffset = MAT_BYTE_OFFSET(src, x, y);\n"
    184 "int weight_byteOffset = MAT_BYTE_OFFSET(weight, x, y);\n"
    185 "int dst_byteOffset = MAT_BYTE_OFFSET(dst, x, y);\n"
    186 "int dstWeight_byteOffset = MAT_BYTE_OFFSET(dstWeight, x, y);\n"
    187 "weight_T w = LOAD_MAT_AT(weight, weight_byteOffset);\n"
    188 "workType src_value = convertSrcToWorkType(LOAD_MAT_AT(src, src_byteOffset));\n"
    189 "STORE_MAT_AT(dst, dst_byteOffset, LOAD_MAT_AT(dst, dst_byteOffset) + convertToDstType(src_value * w));\n"
    190 "STORE_MAT_AT(dstWeight, dstWeight_byteOffset, LOAD_MAT_AT(dstWeight, dstWeight_byteOffset) + w);\n"
    191 "}\n"
    192 "}\n"
    193 "#endif\n"
    194 "#if defined(DEFINE_normalizeUsingWeightMap)\n"
    195 "#if mat_DEPTH == 3 && mat_CN == 3\n"
    196 "#define workType float3\n"
    197 "#define convertSrcToWorkType convert_float3\n"
    198 "#define convertToDstType convert_short3\n"
    199 "#else\n"
    200 "#define workType TYPE(weight_T1, mat_CN)\n"
    201 "#define convertSrcToWorkType CONVERT_TO(workType)\n"
    202 "#define convertToDstType CONVERT_TO(mat_T)\n"
    203 "#endif\n"
    204 "#if weight_DEPTH >= CV_32F\n"
    205 "#define WEIGHT_EPS 1e-5f\n"
    206 "#else\n"
    207 "#define WEIGHT_EPS 0\n"
    208 "#endif\n"
    209 "__kernel void normalizeUsingWeightMap(\n"
    210 "DECLARE_MAT_ARG(mat), DECLARE_MAT_ARG(weight)\n"
    211 ")\n"
    212 "{\n"
    213 "const int x = get_global_id(0);\n"
    214 "const int y = get_global_id(1);\n"
    215 "if (x < matWidth && y < matHeight)\n"
    216 "{\n"
    217 "int mat_byteOffset = MAT_BYTE_OFFSET(mat, x, y);\n"
    218 "int weight_byteOffset = MAT_BYTE_OFFSET(weight, x, y);\n"
    219 "weight_T w = LOAD_MAT_AT(weight, weight_byteOffset);\n"
    220 "workType value = convertSrcToWorkType(LOAD_MAT_AT(mat, mat_byteOffset));\n"
    221 "value = value / (w + WEIGHT_EPS);\n"
    222 "STORE_MAT_AT(mat, mat_byteOffset, convertToDstType(value));\n"
    223 "}\n"
    224 "}\n"
    225 "#endif\n"
    226 , "3320d5f13a357c8ee3c223e66d598244"};
    227 ProgramSource multibandblend_oclsrc(multibandblend.programStr);
    228 const struct ProgramEntry warpers={"warpers",
    229 "__kernel void buildWarpPlaneMaps(__global uchar * xmapptr, int xmap_step, int xmap_offset,\n"
    230 "__global uchar * ymapptr, int ymap_step, int ymap_offset, int rows, int cols,\n"
    231 "__constant float * ck_rinv, __constant float * ct,\n"
    232 "int tl_u, int tl_v, float scale, int rowsPerWI)\n"
    233 "{\n"
    234 "int du = get_global_id(0);\n"
    235 "int dv0 = get_global_id(1) * rowsPerWI;\n"
    236 "if (du < cols)\n"
    237 "{\n"
    238 "int xmap_index = mad24(dv0, xmap_step, mad24(du, (int)sizeof(float), xmap_offset));\n"
    239 "int ymap_index = mad24(dv0, ymap_step, mad24(du, (int)sizeof(float), ymap_offset));\n"
    240 "float u = tl_u + du;\n"
    241 "float x_ = fma(u, scale, -ct[0]);\n"
    242 "float ct1 = 1 - ct[2];\n"
    243 "for (int dv = dv0, dv1 = min(rows, dv0 + rowsPerWI); dv < dv1; ++dv, xmap_index += xmap_step,\n"
    244 "ymap_index += ymap_step)\n"
    245 "{\n"
    246 "__global float * xmap = (__global float *)(xmapptr + xmap_index);\n"
    247 "__global float * ymap = (__global float *)(ymapptr + ymap_index);\n"
    248 "float v = tl_v + dv;\n"
    249 "float y_ = fma(v, scale, -ct[1]);\n"
    250 "float x = fma(ck_rinv[0], x_, fma(ck_rinv[1], y_, ck_rinv[2] * ct1));\n"
    251 "float y = fma(ck_rinv[3], x_, fma(ck_rinv[4], y_, ck_rinv[5] * ct1));\n"
    252 "float z = fma(ck_rinv[6], x_, fma(ck_rinv[7], y_, ck_rinv[8] * ct1));\n"
    253 "if (z != 0)\n"
    254 "x /= z, y /= z;\n"
    255 "else\n"
    256 "x = y = -1;\n"
    257 "xmap[0] = x;\n"
    258 "ymap[0] = y;\n"
    259 "}\n"
    260 "}\n"
    261 "}\n"
    262 "__kernel void buildWarpCylindricalMaps(__global uchar * xmapptr, int xmap_step, int xmap_offset,\n"
    263 "__global uchar * ymapptr, int ymap_step, int ymap_offset, int rows, int cols,\n"
    264 "__constant float * ck_rinv, int tl_u, int tl_v, float scale, int rowsPerWI)\n"
    265 "{\n"
    266 "int du = get_global_id(0);\n"
    267 "int dv0 = get_global_id(1) * rowsPerWI;\n"
    268 "if (du < cols)\n"
    269 "{\n"
    270 "int xmap_index = mad24(dv0, xmap_step, mad24(du, (int)sizeof(float), xmap_offset));\n"
    271 "int ymap_index = mad24(dv0, ymap_step, mad24(du, (int)sizeof(float), ymap_offset));\n"
    272 "float u = (tl_u + du) * scale;\n"
    273 "float x_, z_;\n"
    274 "x_ = sincos(u, &z_);\n"
    275 "for (int dv = dv0, dv1 = min(rows, dv0 + rowsPerWI); dv < dv1; ++dv, xmap_index += xmap_step,\n"
    276 "ymap_index += ymap_step)\n"
    277 "{\n"
    278 "__global float * xmap = (__global float *)(xmapptr + xmap_index);\n"
    279 "__global float * ymap = (__global float *)(ymapptr + ymap_index);\n"
    280 "float y_ = (tl_v + dv) * scale;\n"
    281 "float x, y, z;\n"
    282 "x = fma(ck_rinv[0], x_, fma(ck_rinv[1], y_, ck_rinv[2] * z_));\n"
    283 "y = fma(ck_rinv[3], x_, fma(ck_rinv[4], y_, ck_rinv[5] * z_));\n"
    284 "z = fma(ck_rinv[6], x_, fma(ck_rinv[7], y_, ck_rinv[8] * z_));\n"
    285 "if (z > 0)\n"
    286 "x /= z, y /= z;\n"
    287 "else\n"
    288 "x = y = -1;\n"
    289 "xmap[0] = x;\n"
    290 "ymap[0] = y;\n"
    291 "}\n"
    292 "}\n"
    293 "}\n"
    294 "__kernel void buildWarpSphericalMaps(__global uchar * xmapptr, int xmap_step, int xmap_offset,\n"
    295 "__global uchar * ymapptr, int ymap_step, int ymap_offset, int rows, int cols,\n"
    296 "__constant float * ck_rinv, int tl_u, int tl_v, float scale, int rowsPerWI)\n"
    297 "{\n"
    298 "int du = get_global_id(0);\n"
    299 "int dv0 = get_global_id(1) * rowsPerWI;\n"
    300 "if (du < cols)\n"
    301 "{\n"
    302 "int xmap_index = mad24(dv0, xmap_step, mad24(du, (int)sizeof(float), xmap_offset));\n"
    303 "int ymap_index = mad24(dv0, ymap_step, mad24(du, (int)sizeof(float), ymap_offset));\n"
    304 "float u = (tl_u + du) * scale;\n"
    305 "float cosu, sinu = sincos(u, &cosu);\n"
    306 "for (int dv = dv0, dv1 = min(rows, dv0 + rowsPerWI); dv < dv1; ++dv, xmap_index += xmap_step,\n"
    307 "ymap_index += ymap_step)\n"
    308 "{\n"
    309 "__global float * xmap = (__global float *)(xmapptr + xmap_index);\n"
    310 "__global float * ymap = (__global float *)(ymapptr + ymap_index);\n"
    311 "float v = (tl_v + dv) * scale;\n"
    312 "float cosv, sinv = sincos(v, &cosv);\n"
    313 "float x_ = sinv * sinu;\n"
    314 "float y_ = -cosv;\n"
    315 "float z_ = sinv * cosu;\n"
    316 "float x, y, z;\n"
    317 "x = fma(ck_rinv[0], x_, fma(ck_rinv[1], y_, ck_rinv[2] * z_));\n"
    318 "y = fma(ck_rinv[3], x_, fma(ck_rinv[4], y_, ck_rinv[5] * z_));\n"
    319 "z = fma(ck_rinv[6], x_, fma(ck_rinv[7], y_, ck_rinv[8] * z_));\n"
    320 "if (z > 0)\n"
    321 "x /= z, y /= z;\n"
    322 "else\n"
    323 "x = y = -1;\n"
    324 "xmap[0] = x;\n"
    325 "ymap[0] = y;\n"
    326 "}\n"
    327 "}\n"
    328 "}\n"
    329 , "83a61a49d8be5dcc09a00d8d4651c4f8"};
    330 ProgramSource warpers_oclsrc(warpers.programStr);
    331 }
    332 }}
    333