Context *clCxt = I.clCxt;
int elemCntPerRow = I.step / I.elemSize();
string kernelName = "lkSparse";
- size_t localThreads[3] = { 8, 8, 1 };
- size_t globalThreads[3] = { 8 * ptcount, 8, 1};
+ bool isImageSupported = support_image2d();
+ size_t localThreads[3] = { 8, isImageSupported ? 8 : 32, 1 };
+ size_t globalThreads[3] = { 8 * ptcount, isImageSupported ? 8 : 32, 1};
int cn = I.oclchannels();
char calcErr;
if (level == 0)
}
vector<pair<size_t , const void *> > args;
- cl_mem ITex = bindTexture(I);
- cl_mem JTex = bindTexture(J);
+
+ cl_mem ITex = isImageSupported ? bindTexture(I) : (cl_mem)I.data;
+ cl_mem JTex = isImageSupported ? bindTexture(J) : (cl_mem)J.data;
args.push_back( make_pair( sizeof(cl_mem), (void *)&ITex ));
args.push_back( make_pair( sizeof(cl_mem), (void *)&JTex ));
args.push_back( make_pair( sizeof(cl_int), (void *)&level ));
args.push_back( make_pair( sizeof(cl_int), (void *)&I.rows ));
args.push_back( make_pair( sizeof(cl_int), (void *)&I.cols ));
+ if (!isImageSupported)
+ args.push_back( make_pair( sizeof(cl_int), (void *)&elemCntPerRow ) );
args.push_back( make_pair( sizeof(cl_int), (void *)&patch.x ));
args.push_back( make_pair( sizeof(cl_int), (void *)&patch.y ));
args.push_back( make_pair( sizeof(cl_int), (void *)&cn ));
args.push_back( make_pair( sizeof(cl_int), (void *)&iters ));
args.push_back( make_pair( sizeof(cl_char), (void *)&calcErr ));
- try
+ if(isImageSupported)
{
openCLExecuteKernel2(clCxt, &pyrlk, kernelName, globalThreads, localThreads, args, I.oclchannels(), I.depth(), CLFLUSH);
- }
- catch(Exception&)
- {
- printf("Warning: The image2d_t is not supported by the device. Using alternative method!\n");
releaseTexture(ITex);
releaseTexture(JTex);
- ITex = (cl_mem)I.data;
- JTex = (cl_mem)J.data;
- localThreads[1] = globalThreads[1] = 32;
- args.insert( args.begin()+11, make_pair( sizeof(cl_int), (void *)&elemCntPerRow ) );
+ }
+ else
+ {
openCLExecuteKernel2(clCxt, &pyrlk_no_image, kernelName, globalThreads, localThreads, args, I.oclchannels(), I.depth(), CLFLUSH);
}
}
oclMat &prevU, oclMat &prevV, oclMat *err, Size winSize, int iters)
{
Context *clCxt = I.clCxt;
- bool isImageSupported = clCxt->impl->devName.find("Intel(R) HD Graphics") == string::npos;
+ bool isImageSupported = support_image2d();
int elemCntPerRow = I.step / I.elemSize();
string kernelName = "lkDense";