//
//M*/
#include "precomp.hpp"
-#include <cstdio>
#ifdef HAVE_OPENCV_OCL
+#include <cstdio>
+#include "opencl_kernels.hpp"
using namespace cv;
using namespace cv::ocl;
-using namespace std;
namespace cv
{
namespace ocl
{
- ///////////////////////////OpenCL kernel strings///////////////////////////
- extern const char *surf;
-
const char noImage2dOption [] = "-D DISABLE_IMAGE2D";
static bool use_image2d = false;
static void openCLExecuteKernelSURF(Context *clCxt , const char **source, string kernelName, size_t globalThreads[3],
- size_t localThreads[3], vector< pair<size_t, const void *> > &args, int channels, int depth)
+ size_t localThreads[3], std::vector< std::pair<size_t, const void *> > &args, int channels, int depth)
{
char optBuf [100] = {0};
char * optBufPtr = optBuf;
Context *clCxt = det.clCxt;
string kernelName = "icvCalcLayerDetAndTrace";
- vector< pair<size_t, const void *> > args;
+ std::vector< std::pair<size_t, const void *> > args;
if(sumTex)
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&sumTex));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&sumTex));
}
else
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&surf_.sum.data)); // if image2d is not supported
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&surf_.sum.data)); // if image2d is not supported
}
- args.push_back( make_pair( sizeof(cl_mem), (void *)&det.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&trace.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&det.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&trace.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&img_rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&img_cols));
- args.push_back( make_pair( sizeof(cl_int), (void *)&nOctaveLayers));
- args.push_back( make_pair( sizeof(cl_int), (void *)&octave));
- args.push_back( make_pair( sizeof(cl_int), (void *)&c_layer_rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&surf_.sum.step));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&det.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&trace.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&det.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&trace.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&img_rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&img_cols));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&nOctaveLayers));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&octave));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&c_layer_rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&surf_.sum.step));
size_t localThreads[3] = {16, 16, 1};
size_t globalThreads[3] =
Context *clCxt = det.clCxt;
string kernelName = useMask ? "icvFindMaximaInLayer_withmask" : "icvFindMaximaInLayer";
- vector< pair<size_t, const void *> > args;
-
- args.push_back( make_pair( sizeof(cl_mem), (void *)&det.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&trace.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&maxPosBuffer.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&maxCounter.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&counterOffset));
- args.push_back( make_pair( sizeof(cl_int), (void *)&det.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&trace.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&img_rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&img_cols));
- args.push_back( make_pair( sizeof(cl_int), (void *)&nLayers));
- args.push_back( make_pair( sizeof(cl_int), (void *)&octave));
- args.push_back( make_pair( sizeof(cl_int), (void *)&layer_rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&layer_cols));
- args.push_back( make_pair( sizeof(cl_int), (void *)&maxCandidates));
- args.push_back( make_pair( sizeof(cl_float), (void *)&surf_.hessianThreshold));
+ std::vector< std::pair<size_t, const void *> > args;
+
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&det.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&trace.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&maxPosBuffer.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&maxCounter.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&counterOffset));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&det.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&trace.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&img_rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&img_cols));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&nLayers));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&octave));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&layer_rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&layer_cols));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&maxCandidates));
+ args.push_back( std::make_pair( sizeof(cl_float), (void *)&surf_.hessianThreshold));
if(useMask)
{
if(maskSumTex)
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&maskSumTex));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&maskSumTex));
}
else
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&surf_.maskSum.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&surf_.maskSum.data));
}
- args.push_back( make_pair( sizeof(cl_mem), (void *)&surf_.maskSum.step));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&surf_.maskSum.step));
}
size_t localThreads[3] = {16, 16, 1};
size_t globalThreads[3] = {divUp(layer_cols - 2 * min_margin, localThreads[0] - 2) *localThreads[0],
{
Context *clCxt = det.clCxt;
string kernelName = "icvInterpolateKeypoint";
- vector< pair<size_t, const void *> > args;
-
- args.push_back( make_pair( sizeof(cl_mem), (void *)&det.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&maxPosBuffer.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&keypoints.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&counters_.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&det.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&keypoints.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&img_rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&img_cols));
- args.push_back( make_pair( sizeof(cl_int), (void *)&octave));
- args.push_back( make_pair( sizeof(cl_int), (void *)&layer_rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&max_features));
+ std::vector< std::pair<size_t, const void *> > args;
+
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&det.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&maxPosBuffer.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&keypoints.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&counters_.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&det.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&keypoints.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&img_rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&img_cols));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&octave));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&layer_rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&max_features));
size_t localThreads[3] = {3, 3, 3};
size_t globalThreads[3] = {maxCounter *localThreads[0], localThreads[1], 1};
Context *clCxt = counters.clCxt;
string kernelName = "icvCalcOrientation";
- vector< pair<size_t, const void *> > args;
+ std::vector< std::pair<size_t, const void *> > args;
if(sumTex)
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&sumTex));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&sumTex));
}
else
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&surf_.sum.data)); // if image2d is not supported
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&surf_.sum.data)); // if image2d is not supported
}
- args.push_back( make_pair( sizeof(cl_mem), (void *)&keypoints.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&keypoints.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&img_rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&img_cols));
- args.push_back( make_pair( sizeof(cl_int), (void *)&surf_.sum.step));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&keypoints.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&keypoints.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&img_rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&img_cols));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&surf_.sum.step));
size_t localThreads[3] = {32, 4, 1};
size_t globalThreads[3] = {nFeatures *localThreads[0], localThreads[1], 1};
Context *clCxt = counters.clCxt;
string kernelName = "icvSetUpright";
- vector< pair<size_t, const void *> > args;
+ std::vector< std::pair<size_t, const void *> > args;
- args.push_back( make_pair( sizeof(cl_mem), (void *)&keypoints.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&keypoints.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&nFeatures));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&keypoints.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&keypoints.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&nFeatures));
size_t localThreads[3] = {256, 1, 1};
size_t globalThreads[3] = {saturate_cast<size_t>(nFeatures), 1, 1};
// compute unnormalized descriptors, then normalize them - odd indexing since grid must be 2D
Context *clCxt = descriptors.clCxt;
string kernelName;
- vector< pair<size_t, const void *> > args;
+ std::vector< std::pair<size_t, const void *> > args;
size_t localThreads[3] = {1, 1, 1};
size_t globalThreads[3] = {1, 1, 1};
args.clear();
if(imgTex)
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&imgTex));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&imgTex));
}
else
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&_img.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&_img.data));
}
- args.push_back( make_pair( sizeof(cl_mem), (void *)&descriptors.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&keypoints.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&descriptors.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&keypoints.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&_img.rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&_img.cols));
- args.push_back( make_pair( sizeof(cl_int), (void *)&_img.step));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&descriptors.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&keypoints.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&descriptors.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&keypoints.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&_img.rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&_img.cols));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&_img.step));
openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1);
globalThreads[1] = localThreads[1];
args.clear();
- args.push_back( make_pair( sizeof(cl_mem), (void *)&descriptors.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&descriptors.step));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&descriptors.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&descriptors.step));
openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1);
}
args.clear();
if(imgTex)
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&imgTex));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&imgTex));
}
else
{
- args.push_back( make_pair( sizeof(cl_mem), (void *)&_img.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&_img.data));
}
- args.push_back( make_pair( sizeof(cl_mem), (void *)&descriptors.data));
- args.push_back( make_pair( sizeof(cl_mem), (void *)&keypoints.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&descriptors.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&keypoints.step));
- args.push_back( make_pair( sizeof(cl_int), (void *)&_img.rows));
- args.push_back( make_pair( sizeof(cl_int), (void *)&_img.cols));
- args.push_back( make_pair( sizeof(cl_int), (void *)&_img.step));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&descriptors.data));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&keypoints.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&descriptors.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&keypoints.step));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&_img.rows));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&_img.cols));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&_img.step));
openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1);
globalThreads[1] = localThreads[1];
args.clear();
- args.push_back( make_pair( sizeof(cl_mem), (void *)&descriptors.data));
- args.push_back( make_pair( sizeof(cl_int), (void *)&descriptors.step));
+ args.push_back( std::make_pair( sizeof(cl_mem), (void *)&descriptors.data));
+ args.push_back( std::make_pair( sizeof(cl_int), (void *)&descriptors.step));
openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1);
}