Merge pull request #963 from bitwangyaoyao:master_oclMat
This commit is contained in:
commit
a5ffa1da34
@ -65,9 +65,9 @@ namespace cv
|
|||||||
clMemcpyDeviceToDevice
|
clMemcpyDeviceToDevice
|
||||||
};
|
};
|
||||||
///////////////////////////OpenCL call wrappers////////////////////////////
|
///////////////////////////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,
|
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,
|
size_t widthInBytes, size_t height,
|
||||||
DevMemRW rw_type, DevMemType mem_type, void* hptr = 0);
|
DevMemRW rw_type, DevMemType mem_type, void* hptr = 0);
|
||||||
void CV_EXPORTS openCLMemcpy2D(Context *clCxt, void *dst, size_t dpitch,
|
void CV_EXPORTS openCLMemcpy2D(Context *clCxt, void *dst, size_t dpitch,
|
||||||
|
@ -423,12 +423,6 @@ namespace cv
|
|||||||
}
|
}
|
||||||
|
|
||||||
void openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch,
|
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,
|
|
||||||
size_t widthInBytes, size_t height,
|
size_t widthInBytes, size_t height,
|
||||||
DevMemRW rw_type, DevMemType mem_type, void* hptr)
|
DevMemRW rw_type, DevMemType mem_type, void* hptr)
|
||||||
{
|
{
|
||||||
|
@ -183,11 +183,21 @@ void cv::ocl::oclMat::upload(const Mat &m)
|
|||||||
int pitch = wholeSize.width * 3 * m.elemSize1();
|
int pitch = wholeSize.width * 3 * m.elemSize1();
|
||||||
int tail_padding = m.elemSize1() * 3072;
|
int tail_padding = m.elemSize1() * 3072;
|
||||||
int err;
|
int err;
|
||||||
cl_mem temp = clCreateBuffer((cl_context)clCxt->oclContext(), CL_MEM_READ_WRITE,
|
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);
|
(pitch * wholeSize.height + tail_padding - 1) / tail_padding * tail_padding, 0, &err);
|
||||||
openCLVerifyCall(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);
|
convert_C3C4(temp, *this);
|
||||||
openCLSafeCall(clReleaseMemObject(temp));
|
openCLSafeCall(clReleaseMemObject(temp));
|
||||||
}
|
}
|
||||||
@ -915,7 +925,7 @@ void cv::ocl::oclMat::createEx(int _rows, int _cols, int _type,
|
|||||||
size_t esz = elemSize();
|
size_t esz = elemSize();
|
||||||
|
|
||||||
void *dev_ptr;
|
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);
|
rows, rw_type, mem_type, hptr);
|
||||||
|
|
||||||
if (esz * cols == step)
|
if (esz * cols == step)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user