Commit e5ea0181 authored by peng xiao's avatar peng xiao

Let surf.ocl use the new queryDeviceInfo interface.

parent bfa0f023
...@@ -59,32 +59,28 @@ namespace cv ...@@ -59,32 +59,28 @@ namespace cv
const char noImage2dOption [] = "-D DISABLE_IMAGE2D"; const char noImage2dOption [] = "-D DISABLE_IMAGE2D";
static char SURF_OPTIONS [1024] = ""; static bool use_image2d = false;
static bool USE_IMAGE2d = false;
static void openCLExecuteKernelSURF(Context *clCxt , const char **source, String kernelName, size_t globalThreads[3], static void openCLExecuteKernelSURF(Context *clCxt , const char **source, String kernelName, size_t globalThreads[3],
size_t localThreads[3], std::vector< std::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 * pSURF_OPTIONS = SURF_OPTIONS; char optBuf [100] = {0};
static bool OPTION_INIT = false; char * optBufPtr = optBuf;
if(!OPTION_INIT) if( !use_image2d )
{ {
if( !USE_IMAGE2d ) strcat(optBufPtr, noImage2dOption);
{ optBufPtr += strlen(noImage2dOption);
strcat(pSURF_OPTIONS, noImage2dOption);
pSURF_OPTIONS += strlen(noImage2dOption);
}
size_t wave_size = 0;
queryDeviceInfo(WAVEFRONT_SIZE, &wave_size);
std::sprintf(pSURF_OPTIONS, "-D WAVE_SIZE=%d", static_cast<int>(wave_size));
OPTION_INIT = true;
} }
openCLExecuteKernel(clCxt, source, kernelName, globalThreads, localThreads, args, channels, depth, SURF_OPTIONS); cl_kernel kernel;
kernel = openCLGetKernelFromSource(clCxt, source, kernelName, optBufPtr);
size_t wave_size = queryDeviceInfo<WAVEFRONT_SIZE, size_t>(kernel);
CV_Assert(clReleaseKernel(kernel) == CL_SUCCESS);
sprintf(optBufPtr, "-D WAVE_SIZE=%d", static_cast<int>(wave_size));
openCLExecuteKernel(clCxt, source, kernelName, globalThreads, localThreads, args, channels, depth, optBufPtr);
} }
} }
} }
static inline size_t divUp(size_t total, size_t grain) static inline size_t divUp(size_t total, size_t grain)
{ {
return (total + grain - 1) / grain; return (total + grain - 1) / grain;
...@@ -166,11 +162,11 @@ public: ...@@ -166,11 +162,11 @@ public:
{ {
bindImgTex(img, imgTex); bindImgTex(img, imgTex);
bindImgTex(surf_.sum, sumTex); bindImgTex(surf_.sum, sumTex);
USE_IMAGE2d = true; use_image2d = true;
} }
catch (const cv::Exception& e) catch (const cv::Exception& e)
{ {
USE_IMAGE2d = false; use_image2d = false;
if(e.code != CL_IMAGE_FORMAT_NOT_SUPPORTED && e.code != -217) if(e.code != CL_IMAGE_FORMAT_NOT_SUPPORTED && e.code != -217)
{ {
throw e; throw e;
......
...@@ -128,7 +128,7 @@ namespace cv ...@@ -128,7 +128,7 @@ namespace cv
enum DEVICE_INFO enum DEVICE_INFO
{ {
WAVEFRONT_SIZE, WAVEFRONT_SIZE,
IS_CPU_DEVICE //supports IS_CPU_DEVICE
}; };
template<DEVICE_INFO _it, typename _ty> template<DEVICE_INFO _it, typename _ty>
_ty queryDeviceInfo(cl_kernel kernel = NULL); _ty queryDeviceInfo(cl_kernel kernel = NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment