return param_buildExtraOptions;
}
+static const bool CV_OPENCL_ENABLE_MEM_USE_HOST_PTR = utils::getConfigurationParameterBool("OPENCV_OPENCL_ENABLE_MEM_USE_HOST_PTR", true);
+static const size_t CV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR = utils::getConfigurationParameterSizeT("OPENCV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR", 4);
+
#endif // HAVE_OPENCL
struct UMat2D
bool allocate(UMatData* u, int accessFlags, UMatUsageFlags usageFlags) const CV_OVERRIDE
{
+#ifndef HAVE_OPENCL
+ return false;
+#else
if(!u)
return false;
#endif
{
tempUMatFlags = UMatData::TEMP_UMAT;
- 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
+ if (CV_OPENCL_ENABLE_MEM_USE_HOST_PTR
+ // There are OpenCL runtime issues for less aligned data
+ && (CV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR != 0
+ && u->origdata == cv::alignPtr(u->origdata, (int)CV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR))
+ // Avoid sharing of host memory between OpenCL buffers
+ && !(u->originalUMatData && u->originalUMatData->handle)
)
{
handle = clCreateBuffer(ctx_handle, CL_MEM_USE_HOST_PTR|createFlags,
u->markHostCopyObsolete(true);
opencl_allocator_stats.onAllocate(u->size);
return true;
+#endif // HAVE_OPENCL
}
/*void sync(UMatData* u) const
(CL_MAP_READ | CL_MAP_WRITE),
0, u->size, 0, 0, 0, &retval);
CV_OCL_CHECK_RESULT(retval, cv::format("clEnqueueMapBuffer(handle=%p, sz=%lld) => %p", (void*)u->handle, (long long int)u->size, data).c_str());
- CV_Assert(u->origdata == data);
+ CV_Assert(u->origdata == data && "Details: https://github.com/opencv/opencv/issues/6293");
if (u->originalUMatData)
{
CV_Assert(u->originalUMatData->data == data);