Merge pull request #11361 from alalek:ocl_use_host_mem_ptr_workaround

pull/11363/head
Alexander Alekhin 7 years ago
commit 52172e6f92
  1. 4
      modules/core/src/ocl.cpp
  2. 2
      modules/core/src/umatrix.cpp

@ -4666,7 +4666,9 @@ public:
#endif #endif
{ {
tempUMatFlags = UMatData::TEMP_UMAT; tempUMatFlags = UMatData::TEMP_UMAT;
if (u->origdata == cv::alignPtr(u->origdata, 4)) // There are OpenCL runtime issues for less aligned data if (u->origdata == cv::alignPtr(u->origdata, 4) // There are OpenCL runtime issues for less aligned data
&& !(u->originalUMatData && u->originalUMatData->handle) // Avoid sharing of host memory between OpenCL buffers
)
{ {
handle = clCreateBuffer(ctx_handle, CL_MEM_USE_HOST_PTR|createFlags, handle = clCreateBuffer(ctx_handle, CL_MEM_USE_HOST_PTR|createFlags,
u->size, u->origdata, &retval); u->size, u->origdata, &retval);

@ -381,6 +381,7 @@ UMat Mat::getUMat(int accessFlags, UMatUsageFlags usageFlags) const
if(!a) if(!a)
a = a0; a = a0;
new_u = a->allocate(dims, size.p, type(), data, step.p, accessFlags, usageFlags); new_u = a->allocate(dims, size.p, type(), data, step.p, accessFlags, usageFlags);
new_u->originalUMatData = u;
} }
bool allocated = false; bool allocated = false;
CV_TRY CV_TRY
@ -404,7 +405,6 @@ UMat Mat::getUMat(int accessFlags, UMatUsageFlags usageFlags) const
CV_Assert(new_u->tempUMat()); CV_Assert(new_u->tempUMat());
} }
#endif #endif
new_u->originalUMatData = u;
CV_XADD(&(u->refcount), 1); CV_XADD(&(u->refcount), 1);
CV_XADD(&(u->urefcount), 1); CV_XADD(&(u->urefcount), 1);
} }

Loading…
Cancel
Save