fixed gpu::device::transform with non-aligned sources (Ticket #1567)
This commit is contained in:
parent
aba37e54b3
commit
3ec2f7f5f0
@ -72,6 +72,11 @@ namespace cv { namespace gpu
|
|||||||
{
|
{
|
||||||
return reinterpret_cast<size_t>(ptr) % size == 0;
|
return reinterpret_cast<size_t>(ptr) % size == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool isAligned(size_t step, size_t size)
|
||||||
|
{
|
||||||
|
return step % size == 0;
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
|
|
||||||
static inline void ___cudaSafeCall(cudaError_t err, const char *file, const int line, const char *func = "")
|
static inline void ___cudaSafeCall(cudaError_t err, const char *file, const int line, const char *func = "")
|
||||||
|
@ -347,7 +347,8 @@ namespace cv { namespace gpu { namespace device
|
|||||||
|
|
||||||
StaticAssert<ft::smart_shift != 1>::check();
|
StaticAssert<ft::smart_shift != 1>::check();
|
||||||
|
|
||||||
if (!isAligned(src.data, ft::smart_shift * sizeof(T)) || !isAligned(dst.data, ft::smart_shift * sizeof(D)))
|
if (!isAligned(src.data, ft::smart_shift * sizeof(T)) || !isAligned(src.step, ft::smart_shift * sizeof(T)) ||
|
||||||
|
!isAligned(dst.data, ft::smart_shift * sizeof(D)) || !isAligned(dst.step, ft::smart_shift * sizeof(D)))
|
||||||
{
|
{
|
||||||
TransformDispatcher<false>::call(src, dst, op, mask, stream);
|
TransformDispatcher<false>::call(src, dst, op, mask, stream);
|
||||||
return;
|
return;
|
||||||
@ -370,7 +371,9 @@ namespace cv { namespace gpu { namespace device
|
|||||||
|
|
||||||
StaticAssert<ft::smart_shift != 1>::check();
|
StaticAssert<ft::smart_shift != 1>::check();
|
||||||
|
|
||||||
if (!isAligned(src1.data, ft::smart_shift * sizeof(T1)) || !isAligned(src2.data, ft::smart_shift * sizeof(T2)) || !isAligned(dst.data, ft::smart_shift * sizeof(D)))
|
if (!isAligned(src1.data, ft::smart_shift * sizeof(T1)) || !isAligned(src1.step, ft::smart_shift * sizeof(T1)) ||
|
||||||
|
!isAligned(src2.data, ft::smart_shift * sizeof(T2)) || !isAligned(src2.step, ft::smart_shift * sizeof(T2)) ||
|
||||||
|
!isAligned(dst.data, ft::smart_shift * sizeof(D)) || !isAligned(dst.step, ft::smart_shift * sizeof(D)))
|
||||||
{
|
{
|
||||||
TransformDispatcher<false>::call(src1, src2, dst, op, mask, stream);
|
TransformDispatcher<false>::call(src1, src2, dst, op, mask, stream);
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user