| 30 | |
| 31 | template<typename T> |
| 32 | void susan(cl::Buffer* out, const cl::Buffer* in, const unsigned in_off, |
| 33 | const unsigned idim0, const unsigned idim1, const float t, |
| 34 | const float g, const unsigned edge, const unsigned radius) { |
| 35 | const size_t LOCAL_MEM_SIZE = |
| 36 | (SUSAN_THREADS_X + 2 * radius) * (SUSAN_THREADS_Y + 2 * radius); |
| 37 | |
| 38 | std::vector<TemplateArg> targs = { |
| 39 | TemplateTypename<T>(), |
| 40 | TemplateArg(radius), |
| 41 | }; |
| 42 | std::vector<std::string> compileOpts = { |
| 43 | DefineKeyValue(T, dtype_traits<T>::getName()), |
| 44 | DefineValue(LOCAL_MEM_SIZE), |
| 45 | DefineKeyValue(BLOCK_X, SUSAN_THREADS_X), |
| 46 | DefineKeyValue(BLOCK_Y, SUSAN_THREADS_Y), |
| 47 | DefineKeyValue(RADIUS, radius), |
| 48 | DefineKey(RESPONSE), |
| 49 | }; |
| 50 | compileOpts.emplace_back(getTypeBuildDefinition<T>()); |
| 51 | |
| 52 | auto susan = common::getKernel("susan_responses", {{susan_cl_src}}, targs, |
| 53 | compileOpts); |
| 54 | |
| 55 | cl::NDRange local(SUSAN_THREADS_X, SUSAN_THREADS_Y); |
| 56 | cl::NDRange global(divup(idim0 - 2 * edge, local[0]) * local[0], |
| 57 | divup(idim1 - 2 * edge, local[1]) * local[1]); |
| 58 | |
| 59 | susan(cl::EnqueueArgs(getQueue(), global, local), *out, *in, in_off, idim0, |
| 60 | idim1, t, g, edge); |
| 61 | CL_DEBUG_FINISH(getQueue()); |
| 62 | } |
| 63 | |
| 64 | template<typename T> |
| 65 | unsigned nonMaximal(cl::Buffer* x_out, cl::Buffer* y_out, cl::Buffer* resp_out, |
nothing calls this directly
no test coverage detected