Let surf.ocl use the new queryDeviceInfo interface.
This commit is contained in:
parent
bfa0f02303
commit
e5ea018185
@ -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:
|
|||||||
{
|
{
|
||||||
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
|
|||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user