|
|
|
@ -407,161 +407,28 @@ public: |
|
|
|
|
template<typename _Tp> int set(int i, const _Tp& value) |
|
|
|
|
{ return set(i, &value, sizeof(value)); } |
|
|
|
|
|
|
|
|
|
template<typename _Tp0> |
|
|
|
|
Kernel& args(const _Tp0& a0) |
|
|
|
|
{ |
|
|
|
|
set(0, a0); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); set(i, a1); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); set(i, a2); return *this; |
|
|
|
|
} |
|
|
|
|
protected: |
|
|
|
|
template<typename _Tp0> inline |
|
|
|
|
int set_args_(int i, const _Tp0& a0) { return set(i, a0); } |
|
|
|
|
template<typename _Tp0, typename... _Tps> inline |
|
|
|
|
int set_args_(int i, const _Tp0& a0, const _Tps&... rest_args) { i = set(i, a0); return set_args_(i, rest_args...); } |
|
|
|
|
public: |
|
|
|
|
/** @brief Setup OpenCL Kernel arguments.
|
|
|
|
|
Avoid direct using of set(i, ...) methods. |
|
|
|
|
@code |
|
|
|
|
bool ok = kernel |
|
|
|
|
.args( |
|
|
|
|
srcUMat, dstUMat, |
|
|
|
|
(float)some_float_param |
|
|
|
|
).run(ndims, globalSize, localSize); |
|
|
|
|
if (!ok) return false; |
|
|
|
|
@endcode |
|
|
|
|
*/ |
|
|
|
|
template<typename... _Tps> inline |
|
|
|
|
Kernel& args(const _Tps&... kernel_args) { set_args_(0, kernel_args...); return *this; } |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, |
|
|
|
|
const _Tp3& a3, const _Tp4& a4) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); |
|
|
|
|
i = set(i, a3); set(i, a4); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, |
|
|
|
|
typename _Tp3, typename _Tp4, typename _Tp5> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, |
|
|
|
|
const _Tp3& a3, const _Tp4& a4, const _Tp5& a5) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); |
|
|
|
|
i = set(i, a3); i = set(i, a4); set(i, a5); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, |
|
|
|
|
typename _Tp4, typename _Tp5, typename _Tp6> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); |
|
|
|
|
i = set(i, a4); i = set(i, a5); set(i, a6); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, |
|
|
|
|
typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); |
|
|
|
|
i = set(i, a4); i = set(i, a5); i = set(i, a6); set(i, a7); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4, |
|
|
|
|
typename _Tp5, typename _Tp6, typename _Tp7, typename _Tp8> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7, |
|
|
|
|
const _Tp8& a8) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); |
|
|
|
|
i = set(i, a5); i = set(i, a6); i = set(i, a7); set(i, a8); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4, |
|
|
|
|
typename _Tp5, typename _Tp6, typename _Tp7, typename _Tp8, typename _Tp9> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7, |
|
|
|
|
const _Tp8& a8, const _Tp9& a9) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5); |
|
|
|
|
i = set(i, a6); i = set(i, a7); i = set(i, a8); set(i, a9); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, |
|
|
|
|
typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, |
|
|
|
|
typename _Tp8, typename _Tp9, typename _Tp10> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7, |
|
|
|
|
const _Tp8& a8, const _Tp9& a9, const _Tp10& a10) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5); |
|
|
|
|
i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); set(i, a10); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, |
|
|
|
|
typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, |
|
|
|
|
typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7, |
|
|
|
|
const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5); |
|
|
|
|
i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); set(i, a11); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, |
|
|
|
|
typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, |
|
|
|
|
typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11, typename _Tp12> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7, |
|
|
|
|
const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11, |
|
|
|
|
const _Tp12& a12) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5); |
|
|
|
|
i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); i = set(i, a11); |
|
|
|
|
set(i, a12); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, |
|
|
|
|
typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, |
|
|
|
|
typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11, typename _Tp12, |
|
|
|
|
typename _Tp13> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7, |
|
|
|
|
const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11, |
|
|
|
|
const _Tp12& a12, const _Tp13& a13) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5); |
|
|
|
|
i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); i = set(i, a11); |
|
|
|
|
i = set(i, a12); set(i, a13); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, |
|
|
|
|
typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, |
|
|
|
|
typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11, typename _Tp12, |
|
|
|
|
typename _Tp13, typename _Tp14> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7, |
|
|
|
|
const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11, |
|
|
|
|
const _Tp12& a12, const _Tp13& a13, const _Tp14& a14) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5); |
|
|
|
|
i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); i = set(i, a11); |
|
|
|
|
i = set(i, a12); i = set(i, a13); set(i, a14); return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, |
|
|
|
|
typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, |
|
|
|
|
typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11, typename _Tp12, |
|
|
|
|
typename _Tp13, typename _Tp14, typename _Tp15> |
|
|
|
|
Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3, |
|
|
|
|
const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7, |
|
|
|
|
const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11, |
|
|
|
|
const _Tp12& a12, const _Tp13& a13, const _Tp14& a14, const _Tp15& a15) |
|
|
|
|
{ |
|
|
|
|
int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5); |
|
|
|
|
i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); i = set(i, a11); |
|
|
|
|
i = set(i, a12); i = set(i, a13); i = set(i, a14); set(i, a15); return *this; |
|
|
|
|
} |
|
|
|
|
/** @brief Run the OpenCL kernel.
|
|
|
|
|
@param dims the work problem dimensions. It is the length of globalsize and localsize. It can be either 1, 2 or 3. |
|
|
|
|
@param globalsize work items for each dimension. It is not the final globalsize passed to |
|
|
|
|