From 1eca49f40b213d03751cb1667887261e4c8c4d5a Mon Sep 17 00:00:00 2001 From: peng xiao Date: Fri, 3 May 2013 09:45:56 +0800 Subject: [PATCH] ocl: Enable backward binary portability for setTo function. --- modules/ocl/src/matrix_operations.cpp | 20 ++++++++------------ modules/ocl/src/mcwutil.cpp | 14 +++++--------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/modules/ocl/src/matrix_operations.cpp b/modules/ocl/src/matrix_operations.cpp index 87d1d37..268a1fe 100644 --- a/modules/ocl/src/matrix_operations.cpp +++ b/modules/ocl/src/matrix_operations.cpp @@ -593,11 +593,16 @@ static void set_to_withoutmask_run(const oclMat &dst, const Scalar &scalar, stri CV_Error(CV_StsUnsupportedFormat, "unknown depth"); } #ifdef CL_VERSION_1_2 - if(dst.offset == 0 && dst.cols == dst.wholecols) + //this enables backwards portability to + //run on OpenCL 1.1 platform if library binaries are compiled with OpenCL 1.2 support + if(Context::getContext()->supportsFeature(Context::CL_VER_1_2) && + dst.offset == 0 && dst.cols == dst.wholecols) { - clEnqueueFillBuffer((cl_command_queue)dst.clCxt->oclCommandQueue(), (cl_mem)dst.data, args[0].second, args[0].first, 0, dst.step * dst.rows, 0, NULL, NULL); + clEnqueueFillBuffer((cl_command_queue)dst.clCxt->oclCommandQueue(), + (cl_mem)dst.data, args[0].second, args[0].first, 0, dst.step * dst.rows, 0, NULL, NULL); } else +#endif { args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst.data )); args.push_back( make_pair( sizeof(cl_int) , (void *)&dst.cols )); @@ -605,17 +610,8 @@ static void set_to_withoutmask_run(const oclMat &dst, const Scalar &scalar, stri args.push_back( make_pair( sizeof(cl_int) , (void *)&step_in_pixel )); args.push_back( make_pair( sizeof(cl_int) , (void *)&offset_in_pixel)); openCLExecuteKernel(dst.clCxt , &operator_setTo, kernelName, globalThreads, - localThreads, args, -1, -1, compile_option); + localThreads, args, -1, -1, compile_option); } -#else - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst.data )); - args.push_back( make_pair( sizeof(cl_int) , (void *)&dst.cols )); - args.push_back( make_pair( sizeof(cl_int) , (void *)&dst.rows )); - args.push_back( make_pair( sizeof(cl_int) , (void *)&step_in_pixel )); - args.push_back( make_pair( sizeof(cl_int) , (void *)&offset_in_pixel)); - openCLExecuteKernel(dst.clCxt , &operator_setTo, kernelName, globalThreads, - localThreads, args, -1, -1, compile_option); -#endif } static void set_to_withmask_run(const oclMat &dst, const Scalar &scalar, const oclMat &mask, string kernelName) diff --git a/modules/ocl/src/mcwutil.cpp b/modules/ocl/src/mcwutil.cpp index ed3258b..013af2d 100644 --- a/modules/ocl/src/mcwutil.cpp +++ b/modules/ocl/src/mcwutil.cpp @@ -45,10 +45,6 @@ #include "precomp.hpp" -#ifndef CL_VERSION_1_2 -#define CL_VERSION_1_2 0 -#endif - using namespace std; namespace cv @@ -162,9 +158,11 @@ namespace cv CV_Error(-1, "Image forma is not supported"); break; } +#ifdef CL_VERSION_1_2 + //this enables backwards portability to + //run on OpenCL 1.1 platform if library binaries are compiled with OpenCL 1.2 support if(Context::getContext()->supportsFeature(Context::CL_VER_1_2)) { -#if CL_VERSION_1_2 cl_image_desc desc; desc.image_type = CL_MEM_OBJECT_IMAGE2D; desc.image_width = mat.cols; @@ -176,12 +174,10 @@ namespace cv desc.buffer = NULL; desc.num_mip_levels = 0; desc.num_samples = 0; - texture = clCreateImage((cl_context)mat.clCxt->oclContext(), CL_MEM_READ_WRITE, &format, &desc, NULL, &err); -#else - CV_Error(CV_StsBadFunc, "Non-deprecated image creation API call is not supported."); -#endif + texture = clCreateImage((cl_context)mat.clCxt->oclContext(), CL_MEM_READ_WRITE, &format, &desc, NULL, &err); } else +#endif { texture = clCreateImage2D( (cl_context)mat.clCxt->oclContext(), -- 2.7.4