From 960a0eacf3a22390c6819f6db6b370afea0cb56c Mon Sep 17 00:00:00 2001 From: yao Date: Fri, 7 Jun 2013 15:27:44 +0800 Subject: [PATCH 1/2] merge openCLMallocPitch and openCLMallocPitchEx into one interface --- .../ocl/include/opencv2/ocl/private/util.hpp | 4 ++-- modules/ocl/src/initialization.cpp | 12 +++++------ modules/ocl/src/matrix_operations.cpp | 20 ++++++++++++++----- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/modules/ocl/include/opencv2/ocl/private/util.hpp b/modules/ocl/include/opencv2/ocl/private/util.hpp index 2463fc279..fa9ae1616 100644 --- a/modules/ocl/include/opencv2/ocl/private/util.hpp +++ b/modules/ocl/include/opencv2/ocl/private/util.hpp @@ -65,9 +65,9 @@ namespace cv clMemcpyDeviceToDevice }; ///////////////////////////OpenCL call wrappers//////////////////////////// + //void CV_EXPORTS openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, + // size_t widthInBytes, size_t height); void CV_EXPORTS openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, - size_t widthInBytes, size_t height); - void CV_EXPORTS openCLMallocPitchEx(Context *clCxt, void **dev_ptr, size_t *pitch, size_t widthInBytes, size_t height, DevMemRW rw_type, DevMemType mem_type, void* hptr = 0); void CV_EXPORTS openCLMemcpy2D(Context *clCxt, void *dst, size_t dpitch, diff --git a/modules/ocl/src/initialization.cpp b/modules/ocl/src/initialization.cpp index 1a96f785e..50b0873a1 100644 --- a/modules/ocl/src/initialization.cpp +++ b/modules/ocl/src/initialization.cpp @@ -422,13 +422,13 @@ namespace cv return buffer; } - void openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, - size_t widthInBytes, size_t height) - { - openCLMallocPitchEx(clCxt, dev_ptr, pitch, widthInBytes, height, gDeviceMemRW, gDeviceMemType); - } + //void openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, + // size_t widthInBytes, size_t height) + //{ + // openCLMallocPitchEx(clCxt, dev_ptr, pitch, widthInBytes, height, gDeviceMemRW, gDeviceMemType); + //} - void openCLMallocPitchEx(Context *clCxt, void **dev_ptr, size_t *pitch, + void openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, size_t widthInBytes, size_t height, DevMemRW rw_type, DevMemType mem_type, void* hptr) { diff --git a/modules/ocl/src/matrix_operations.cpp b/modules/ocl/src/matrix_operations.cpp index 25252eaac..4f23789b3 100644 --- a/modules/ocl/src/matrix_operations.cpp +++ b/modules/ocl/src/matrix_operations.cpp @@ -183,11 +183,21 @@ void cv::ocl::oclMat::upload(const Mat &m) int pitch = wholeSize.width * 3 * m.elemSize1(); int tail_padding = m.elemSize1() * 3072; int err; - cl_mem temp = clCreateBuffer((cl_context)clCxt->oclContext(), CL_MEM_READ_WRITE, - (pitch * wholeSize.height + tail_padding - 1) / tail_padding * tail_padding, 0, &err); - openCLVerifyCall(err); + cl_mem temp; + if(gDeviceMemType!=DEVICE_MEM_UHP && gDeviceMemType!=DEVICE_MEM_CHP){ + temp = clCreateBuffer((cl_context)clCxt->oclContext(), CL_MEM_READ_WRITE, + (pitch * wholeSize.height + tail_padding - 1) / tail_padding * tail_padding, 0, &err); + openCLVerifyCall(err); + openCLMemcpy2D(clCxt, temp, pitch, m.datastart, m.step, + wholeSize.width * m.elemSize(), wholeSize.height, clMemcpyHostToDevice, 3); + } + else{ + temp = clCreateBuffer((cl_context)clCxt->oclContext(), CL_MEM_READ_WRITE|CL_MEM_USE_HOST_PTR, + (pitch * wholeSize.height + tail_padding - 1) / tail_padding * tail_padding, m.datastart, &err); + openCLVerifyCall(err); + } - openCLMemcpy2D(clCxt, temp, pitch, m.datastart, m.step, wholeSize.width * m.elemSize(), wholeSize.height, clMemcpyHostToDevice, 3); + convert_C3C4(temp, *this); openCLSafeCall(clReleaseMemObject(temp)); } @@ -915,7 +925,7 @@ void cv::ocl::oclMat::createEx(int _rows, int _cols, int _type, size_t esz = elemSize(); void *dev_ptr; - openCLMallocPitchEx(clCxt, &dev_ptr, &step, GPU_MATRIX_MALLOC_STEP(esz * cols), + openCLMallocPitch(clCxt, &dev_ptr, &step, GPU_MATRIX_MALLOC_STEP(esz * cols), rows, rw_type, mem_type, hptr); if (esz * cols == step) From 9284c07a8492808be8aad41435526cc3f72f15f8 Mon Sep 17 00:00:00 2001 From: yao Date: Fri, 7 Jun 2013 15:31:12 +0800 Subject: [PATCH 2/2] remove commented lines --- modules/ocl/src/initialization.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modules/ocl/src/initialization.cpp b/modules/ocl/src/initialization.cpp index 50b0873a1..7c097a2c8 100644 --- a/modules/ocl/src/initialization.cpp +++ b/modules/ocl/src/initialization.cpp @@ -422,12 +422,6 @@ namespace cv return buffer; } - //void openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, - // size_t widthInBytes, size_t height) - //{ - // openCLMallocPitchEx(clCxt, dev_ptr, pitch, widthInBytes, height, gDeviceMemRW, gDeviceMemType); - //} - void openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, size_t widthInBytes, size_t height, DevMemRW rw_type, DevMemType mem_type, void* hptr)