{
CV_Assert( sz[i] <= (size_t)INT_MAX );
if( sz[i] == 0 )
- return;
+ return;
if( srcofs )
- srcptr += srcofs[i]*(i <= dims-2 ? srcstep[i] : 1);
+ srcptr += srcofs[i]*(i <= dims-2 ? srcstep[i] : 1);
if( dstofs )
- dstptr += dstofs[i]*(i <= dims-2 ? dststep[i] : 1);
+ dstptr += dstofs[i]*(i <= dims-2 ? dststep[i] : 1);
isz[i] = (int)sz[i];
}
if( _dst.kind() == _InputArray::UMAT )
{
UMat dst = _dst.getUMat();
- void* srchandle = handle(ACCESS_READ);
- void* dsthandle = dst.handle(ACCESS_WRITE);
- if( srchandle == dsthandle && dst.offset == offset )
+ if( u == dst.u && dst.offset == offset )
return;
dst.ndoffset(dstofs);
+ dstofs[dims-1] *= esz;
CV_Assert(u->currAllocator == dst.u->currAllocator);
u->currAllocator->copy(u, dst.u, dims, sz, srcofs, step.p, dstofs, dst.step.p, false);
}
}
}
+typedef MatrixTestBase CopyTo;
+
+OCL_TEST_P(CopyTo, Accuracy)
+{
+ for (int j = 0; j < test_loop_times; j++)
+ {
+ generateTestData();
+
+ OCL_OFF(src_roi.copyTo(dst_roi));
+ OCL_ON(usrc_roi.copyTo(udst_roi));
+
+ OCL_EXPECT_MATS_NEAR(dst, 0);
+ }
+}
+
OCL_INSTANTIATE_TEST_CASE_P(MatrixOperation, ConvertTo, Combine(
OCL_ALL_DEPTHS, OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
+OCL_INSTANTIATE_TEST_CASE_P(MatrixOperation, CopyTo, Combine(
+ OCL_ALL_DEPTHS, Values((MatDepth)0), OCL_ALL_CHANNELS, Bool()));
+
} } // namespace cvtest::ocl
#endif