Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
087db294
Commit
087db294
authored
Jun 05, 2013
by
Roman Donchenko
Committed by
OpenCV Buildbot
Jun 05, 2013
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #948 from jet47:cuda-5.5-support
parents
127a152f
89f3c40d
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
839 additions
and
246 deletions
+839
-246
vec_math.hpp
modules/gpu/include/opencv2/gpu/device/vec_math.hpp
+827
-235
perf_filters.cpp
modules/gpu/perf/perf_filters.cpp
+1
-1
perf_video.cpp
modules/gpu/perf/perf_video.cpp
+4
-4
ccomponetns.cu
modules/gpu/src/cuda/ccomponetns.cu
+2
-2
hough.cu
modules/gpu/src/cuda/hough.cu
+3
-2
test_optflow.cpp
modules/gpu/test/test_optflow.cpp
+2
-2
No files found.
modules/gpu/include/opencv2/gpu/device/vec_math.hpp
View file @
087db294
...
...
@@ -43,288 +43,880 @@
#ifndef __OPENCV_GPU_VECMATH_HPP__
#define __OPENCV_GPU_VECMATH_HPP__
#include "saturate_cast.hpp"
#include "vec_traits.hpp"
#include "
functional
.hpp"
#include "
saturate_cast
.hpp"
namespace
cv
{
namespace
gpu
{
namespace
device
{
namespace
vec_math_detail
// saturate_cast
namespace
vec_math_detail
{
template
<
int
cn
,
typename
VecD
>
struct
SatCastHelper
;
template
<
typename
VecD
>
struct
SatCastHelper
<
1
,
VecD
>
{
template
<
int
cn
,
typename
VecD
>
struct
SatCastHelper
;
template
<
typename
VecD
>
struct
SatCastHelper
<
1
,
VecD
>
template
<
typename
VecS
>
static
__device__
__forceinline__
VecD
cast
(
const
VecS
&
v
)
{
template
<
typename
VecS
>
static
__device__
__forceinline__
VecD
cast
(
const
VecS
&
v
)
{
typedef
typename
VecTraits
<
VecD
>::
elem_type
D
;
return
VecTraits
<
VecD
>::
make
(
saturate_cast
<
D
>
(
v
.
x
));
}
};
template
<
typename
VecD
>
struct
SatCastHelper
<
2
,
VecD
>
{
template
<
typename
VecS
>
static
__device__
__forceinline__
VecD
cast
(
const
VecS
&
v
)
{
typedef
typename
VecTraits
<
VecD
>::
elem_type
D
;
return
VecTraits
<
VecD
>::
make
(
saturate_cast
<
D
>
(
v
.
x
),
saturate_cast
<
D
>
(
v
.
y
));
}
};
template
<
typename
VecD
>
struct
SatCastHelper
<
3
,
VecD
>
typedef
typename
VecTraits
<
VecD
>::
elem_type
D
;
return
VecTraits
<
VecD
>::
make
(
saturate_cast
<
D
>
(
v
.
x
));
}
};
template
<
typename
VecD
>
struct
SatCastHelper
<
2
,
VecD
>
{
template
<
typename
VecS
>
static
__device__
__forceinline__
VecD
cast
(
const
VecS
&
v
)
{
t
emplate
<
typename
VecS
>
static
__device__
__forceinline__
VecD
cast
(
const
VecS
&
v
)
{
typedef
typename
VecTraits
<
VecD
>::
elem_type
D
;
return
VecTraits
<
VecD
>::
make
(
saturate_cast
<
D
>
(
v
.
x
),
saturate_cast
<
D
>
(
v
.
y
),
saturate_cast
<
D
>
(
v
.
z
))
;
}
};
template
<
typename
Vec
D
>
struct
SatCastHelper
<
4
,
VecD
>
t
ypedef
typename
VecTraits
<
VecD
>::
elem_type
D
;
return
VecTraits
<
VecD
>::
make
(
saturate_cast
<
D
>
(
v
.
x
),
saturate_cast
<
D
>
(
v
.
y
));
}
}
;
template
<
typename
VecD
>
struct
SatCastHelper
<
3
,
VecD
>
{
template
<
typename
Vec
S
>
static
__device__
__forceinline__
VecD
cast
(
const
VecS
&
v
)
{
template
<
typename
VecS
>
static
__device__
__forceinline__
VecD
cast
(
const
VecS
&
v
)
{
typedef
typename
VecTraits
<
VecD
>::
elem_type
D
;
return
VecTraits
<
VecD
>::
make
(
saturate_cast
<
D
>
(
v
.
x
),
saturate_cast
<
D
>
(
v
.
y
),
saturate_cast
<
D
>
(
v
.
z
),
saturate_cast
<
D
>
(
v
.
w
));
}
};
template
<
typename
VecD
,
typename
VecS
>
static
__device__
__forceinline__
VecD
saturate_cast_caller
(
const
VecS
&
v
)
typedef
typename
VecTraits
<
VecD
>::
elem_type
D
;
return
VecTraits
<
VecD
>::
make
(
saturate_cast
<
D
>
(
v
.
x
),
saturate_cast
<
D
>
(
v
.
y
),
saturate_cast
<
D
>
(
v
.
z
));
}
};
template
<
typename
VecD
>
struct
SatCastHelper
<
4
,
VecD
>
{
template
<
typename
VecS
>
static
__device__
__forceinline__
VecD
cast
(
const
VecS
&
v
)
{
return
SatCastHelper
<
VecTraits
<
VecD
>::
cn
,
VecD
>::
cast
(
v
);
typedef
typename
VecTraits
<
VecD
>::
elem_type
D
;
return
VecTraits
<
VecD
>::
make
(
saturate_cast
<
D
>
(
v
.
x
),
saturate_cast
<
D
>
(
v
.
y
),
saturate_cast
<
D
>
(
v
.
z
),
saturate_cast
<
D
>
(
v
.
w
));
}
};
template
<
typename
VecD
,
typename
VecS
>
static
__device__
__forceinline__
VecD
saturate_cast_helper
(
const
VecS
&
v
)
{
return
SatCastHelper
<
VecTraits
<
VecD
>::
cn
,
VecD
>::
cast
(
v
);
}
}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
uchar1
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
char1
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
ushort1
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
short1
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
uint1
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
int1
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
float1
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
double1
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
uchar2
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
char2
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
ushort2
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
short2
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
uint2
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
int2
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
float2
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
double2
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
uchar3
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
char3
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
ushort3
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
short3
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
uint3
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
int3
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
float3
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
double3
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
uchar4
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
char4
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
ushort4
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
short4
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
uint4
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
int4
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
float4
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
T
>
static
__device__
__forceinline__
T
saturate_cast
(
const
double4
&
v
)
{
return
vec_math_detail
::
saturate_cast_helper
<
T
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
uchar1
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
char1
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
ushort1
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
short1
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
uint1
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
int1
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
float1
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
double1
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
uchar2
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
char2
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
ushort2
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
short2
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
uint2
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
int2
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
float2
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
double2
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
uchar3
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
char3
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
ushort3
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
short3
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
uint3
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
int3
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
float3
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
double3
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
uchar4
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
char4
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
ushort4
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
short4
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
uint4
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
int4
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
float4
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
template
<
typename
_Tp
>
static
__device__
__forceinline__
_Tp
saturate_cast
(
const
double4
&
v
)
{
return
vec_math_detail
::
saturate_cast_caller
<
_Tp
>
(
v
);}
#define OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, op, func) \
__device__ __forceinline__ TypeVec<func<type>::result_type, 1>::vec_type op(const type ## 1 & a) \
{ \
func<type> f; \
return VecTraits<TypeVec<func<type>::result_type, 1>::vec_type>::make(f(a.x)); \
// unary operators
#define CV_CUDEV_IMPLEMENT_VEC_UNARY_OP(op, input_type, output_type) \
__device__ __forceinline__ output_type ## 1 operator op(const input_type ## 1 & a) \
{ \
return VecTraits<output_type ## 1>::make(op (a.x)); \
} \
__device__ __forceinline__
TypeVec<func<type>::result_type, 2>::vec_type op(const
type ## 2 & a) \
__device__ __forceinline__
output_type ## 2 operator op(const input_
type ## 2 & a) \
{ \
func<type> f; \
return VecTraits<TypeVec<func<type>::result_type, 2>::vec_type>::make(f(a.x), f(a.y)); \
return VecTraits<output_type ## 2>::make(op (a.x), op (a.y)); \
} \
__device__ __forceinline__
TypeVec<func<type>::result_type, 3>::vec_type op(const
type ## 3 & a) \
__device__ __forceinline__
output_type ## 3 operator op(const input_
type ## 3 & a) \
{ \
func<type> f; \
return VecTraits<TypeVec<func<type>::result_type, 3>::vec_type>::make(f(a.x), f(a.y), f(a.z)); \
return VecTraits<output_type ## 3>::make(op (a.x), op (a.y), op (a.z)); \
} \
__device__ __forceinline__
TypeVec<func<type>::result_type, 4>::vec_type op(const
type ## 4 & a) \
__device__ __forceinline__
output_type ## 4 operator op(const input_
type ## 4 & a) \
{ \
func<type> f; \
return VecTraits<TypeVec<func<type>::result_type, 4>::vec_type>::make(f(a.x), f(a.y), f(a.z), f(a.w)); \
return VecTraits<output_type ## 4>::make(op (a.x), op (a.y), op (a.z), op (a.w)); \
}
namespace
vec_math_detail
{
template
<
typename
T1
,
typename
T2
>
struct
BinOpTraits
{
typedef
int
argument_type
;
};
template
<
typename
T
>
struct
BinOpTraits
<
T
,
T
>
{
typedef
T
argument_type
;
};
template
<
typename
T
>
struct
BinOpTraits
<
T
,
double
>
{
typedef
double
argument_type
;
};
template
<
typename
T
>
struct
BinOpTraits
<
double
,
T
>
{
typedef
double
argument_type
;
};
template
<>
struct
BinOpTraits
<
double
,
double
>
{
typedef
double
argument_type
;
};
template
<
typename
T
>
struct
BinOpTraits
<
T
,
float
>
{
typedef
float
argument_type
;
};
template
<
typename
T
>
struct
BinOpTraits
<
float
,
T
>
{
typedef
float
argument_type
;
};
template
<>
struct
BinOpTraits
<
float
,
float
>
{
typedef
float
argument_type
;
};
template
<>
struct
BinOpTraits
<
double
,
float
>
{
typedef
double
argument_type
;
};
template
<>
struct
BinOpTraits
<
float
,
double
>
{
typedef
double
argument_type
;
};
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
-
,
char
,
char
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
-
,
short
,
short
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
-
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
-
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
-
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
!
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
!
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
!
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
!
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
!
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
!
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
!
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
!
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
~
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
~
,
char
,
char
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
~
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
~
,
short
,
short
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
~
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
(
~
,
uint
,
uint
)
#undef CV_CUDEV_IMPLEMENT_VEC_UNARY_OP
// unary functions
#define CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC(func_name, func, input_type, output_type) \
__device__ __forceinline__ output_type ## 1 func_name(const input_type ## 1 & a) \
{ \
return VecTraits<output_type ## 1>::make(func (a.x)); \
} \
__device__ __forceinline__ output_type ## 2 func_name(const input_type ## 2 & a) \
{ \
return VecTraits<output_type ## 2>::make(func (a.x), func (a.y)); \
} \
__device__ __forceinline__ output_type ## 3 func_name(const input_type ## 3 & a) \
{ \
return VecTraits<output_type ## 3>::make(func (a.x), func (a.y), func (a.z)); \
} \
__device__ __forceinline__ output_type ## 4 func_name(const input_type ## 4 & a) \
{ \
return VecTraits<output_type ## 4>::make(func (a.x), func (a.y), func (a.z), func (a.w)); \
}
#define OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, op, func) \
__device__ __forceinline__ TypeVec<func<type>::result_type, 1>::vec_type op(const type ## 1 & a, const type ## 1 & b) \
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
abs
,
/*::abs*/
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
abs
,
::
abs
,
char
,
char
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
abs
,
/*::abs*/
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
abs
,
::
abs
,
short
,
short
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
abs
,
::
abs
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
abs
,
/*::abs*/
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
abs
,
::
fabsf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
abs
,
::
fabs
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sqrt
,
::
sqrtf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sqrt
,
::
sqrtf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sqrt
,
::
sqrtf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sqrt
,
::
sqrtf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sqrt
,
::
sqrtf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sqrt
,
::
sqrtf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sqrt
,
::
sqrtf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sqrt
,
::
sqrt
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp
,
::
expf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp
,
::
expf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp
,
::
expf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp
,
::
expf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp
,
::
expf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp
,
::
expf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp
,
::
expf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp
,
::
exp
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp2
,
::
exp2f
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp2
,
::
exp2f
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp2
,
::
exp2f
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp2
,
::
exp2f
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp2
,
::
exp2f
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp2
,
::
exp2f
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp2
,
::
exp2f
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp2
,
::
exp2
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp10
,
::
exp10f
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp10
,
::
exp10f
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp10
,
::
exp10f
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp10
,
::
exp10f
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp10
,
::
exp10f
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp10
,
::
exp10f
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp10
,
::
exp10f
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
exp10
,
::
exp10
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log
,
::
logf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log
,
::
logf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log
,
::
logf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log
,
::
logf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log
,
::
logf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log
,
::
logf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log
,
::
logf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log
,
::
log
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log2
,
::
log2f
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log2
,
::
log2f
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log2
,
::
log2f
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log2
,
::
log2f
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log2
,
::
log2f
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log2
,
::
log2f
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log2
,
::
log2f
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log2
,
::
log2
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log10
,
::
log10f
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log10
,
::
log10f
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log10
,
::
log10f
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log10
,
::
log10f
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log10
,
::
log10f
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log10
,
::
log10f
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log10
,
::
log10f
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
log10
,
::
log10
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sin
,
::
sinf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sin
,
::
sinf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sin
,
::
sinf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sin
,
::
sinf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sin
,
::
sinf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sin
,
::
sinf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sin
,
::
sinf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sin
,
::
sin
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cos
,
::
cosf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cos
,
::
cosf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cos
,
::
cosf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cos
,
::
cosf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cos
,
::
cosf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cos
,
::
cosf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cos
,
::
cosf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cos
,
::
cos
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tan
,
::
tanf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tan
,
::
tanf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tan
,
::
tanf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tan
,
::
tanf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tan
,
::
tanf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tan
,
::
tanf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tan
,
::
tanf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tan
,
::
tan
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asin
,
::
asinf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asin
,
::
asinf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asin
,
::
asinf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asin
,
::
asinf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asin
,
::
asinf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asin
,
::
asinf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asin
,
::
asinf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asin
,
::
asin
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acos
,
::
acosf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acos
,
::
acosf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acos
,
::
acosf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acos
,
::
acosf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acos
,
::
acosf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acos
,
::
acosf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acos
,
::
acosf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acos
,
::
acos
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atan
,
::
atanf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atan
,
::
atanf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atan
,
::
atanf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atan
,
::
atanf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atan
,
::
atanf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atan
,
::
atanf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atan
,
::
atanf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atan
,
::
atan
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sinh
,
::
sinhf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sinh
,
::
sinhf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sinh
,
::
sinhf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sinh
,
::
sinhf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sinh
,
::
sinhf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sinh
,
::
sinhf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sinh
,
::
sinhf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
sinh
,
::
sinh
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cosh
,
::
coshf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cosh
,
::
coshf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cosh
,
::
coshf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cosh
,
::
coshf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cosh
,
::
coshf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cosh
,
::
coshf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cosh
,
::
coshf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
cosh
,
::
cosh
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tanh
,
::
tanhf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tanh
,
::
tanhf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tanh
,
::
tanhf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tanh
,
::
tanhf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tanh
,
::
tanhf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tanh
,
::
tanhf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tanh
,
::
tanhf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
tanh
,
::
tanh
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asinh
,
::
asinhf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asinh
,
::
asinhf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asinh
,
::
asinhf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asinh
,
::
asinhf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asinh
,
::
asinhf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asinh
,
::
asinhf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asinh
,
::
asinhf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
asinh
,
::
asinh
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acosh
,
::
acoshf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acosh
,
::
acoshf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acosh
,
::
acoshf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acosh
,
::
acoshf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acosh
,
::
acoshf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acosh
,
::
acoshf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acosh
,
::
acoshf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
acosh
,
::
acosh
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atanh
,
::
atanhf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atanh
,
::
atanhf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atanh
,
::
atanhf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atanh
,
::
atanhf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atanh
,
::
atanhf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atanh
,
::
atanhf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atanh
,
::
atanhf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
(
atanh
,
::
atanh
,
double
,
double
)
#undef CV_CUDEV_IMPLEMENT_VEC_UNARY_FUNC
// binary operators (vec & vec)
#define CV_CUDEV_IMPLEMENT_VEC_BINARY_OP(op, input_type, output_type) \
__device__ __forceinline__ output_type ## 1 operator op(const input_type ## 1 & a, const input_type ## 1 & b) \
{ \
func<type> f; \
return VecTraits<TypeVec<func<type>::result_type, 1>::vec_type>::make(f(a.x, b.x)); \
return VecTraits<output_type ## 1>::make(a.x op b.x); \
} \
template <typename T> \
__device__ __forceinline__ typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 1>::vec_type op(const type ## 1 & v, T s) \
__device__ __forceinline__ output_type ## 2 operator op(const input_type ## 2 & a, const input_type ## 2 & b) \
{ \
func<typename vec_math_detail::BinOpTraits<type, T>::argument_type> f; \
return VecTraits<typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 1>::vec_type>::make(f(v.x, s)); \
return VecTraits<output_type ## 2>::make(a.x op b.x, a.y op b.y); \
} \
template <typename T> \
__device__ __forceinline__ typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 1>::vec_type op(T s, const type ## 1 & v) \
__device__ __forceinline__ output_type ## 3 operator op(const input_type ## 3 & a, const input_type ## 3 & b) \
{ \
func<typename vec_math_detail::BinOpTraits<type, T>::argument_type> f; \
return VecTraits<typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 1>::vec_type>::make(f(s, v.x)); \
return VecTraits<output_type ## 3>::make(a.x op b.x, a.y op b.y, a.z op b.z); \
} \
__device__ __forceinline__
TypeVec<func<type>::result_type, 2>::vec_type op(const type ## 2 & a, const type ## 2
& b) \
__device__ __forceinline__
output_type ## 4 operator op(const input_type ## 4 & a, const input_type ## 4
& b) \
{ \
func<type> f; \
return VecTraits<TypeVec<func<type>::result_type, 2>::vec_type>::make(f(a.x, b.x), f(a.y, b.y)); \
return VecTraits<output_type ## 4>::make(a.x op b.x, a.y op b.y, a.z op b.z, a.w op b.w); \
}
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
+
,
uchar
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
+
,
char
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
+
,
ushort
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
+
,
short
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
+
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
+
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
+
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
+
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
-
,
uchar
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
-
,
char
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
-
,
ushort
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
-
,
short
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
-
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
-
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
-
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
-
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
*
,
uchar
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
*
,
char
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
*
,
ushort
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
*
,
short
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
*
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
*
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
*
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
*
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
/
,
uchar
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
/
,
char
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
/
,
ushort
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
/
,
short
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
/
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
/
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
/
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
/
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
==
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
==
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
==
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
==
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
==
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
==
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
==
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
==
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
!=
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
!=
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
!=
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
!=
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
!=
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
!=
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
!=
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
!=
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>=
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>=
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>=
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>=
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>=
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>=
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>=
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
>=
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<=
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<=
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<=
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<=
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<=
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<=
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<=
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
<=
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&&
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&&
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&&
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&&
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&&
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&&
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&&
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&&
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
||
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
||
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
||
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
||
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
||
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
||
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
||
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
||
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&
,
char
,
char
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&
,
short
,
short
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
&
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
|
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
|
,
char
,
char
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
|
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
|
,
short
,
short
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
|
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
|
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
^
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
^
,
char
,
char
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
^
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
^
,
short
,
short
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
^
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
(
^
,
uint
,
uint
)
#undef CV_CUDEV_IMPLEMENT_VEC_BINARY_OP
// binary operators (vec & scalar)
#define CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP(op, input_type, scalar_type, output_type) \
__device__ __forceinline__ output_type ## 1 operator op(const input_type ## 1 & a, scalar_type s) \
{ \
return VecTraits<output_type ## 1>::make(a.x op s); \
} \
__device__ __forceinline__ output_type ## 1 operator op(scalar_type s, const input_type ## 1 & b) \
{ \
return VecTraits<output_type ## 1>::make(s op b.x); \
} \
__device__ __forceinline__ output_type ## 2 operator op(const input_type ## 2 & a, scalar_type s) \
{ \
return VecTraits<output_type ## 2>::make(a.x op s, a.y op s); \
} \
__device__ __forceinline__ output_type ## 2 operator op(scalar_type s, const input_type ## 2 & b) \
{ \
return VecTraits<output_type ## 2>::make(s op b.x, s op b.y); \
} \
__device__ __forceinline__ output_type ## 3 operator op(const input_type ## 3 & a, scalar_type s) \
{ \
return VecTraits<output_type ## 3>::make(a.x op s, a.y op s, a.z op s); \
} \
__device__ __forceinline__ output_type ## 3 operator op(scalar_type s, const input_type ## 3 & b) \
{ \
return VecTraits<output_type ## 3>::make(s op b.x, s op b.y, s op b.z); \
} \
__device__ __forceinline__ output_type ## 4 operator op(const input_type ## 4 & a, scalar_type s) \
{ \
return VecTraits<output_type ## 4>::make(a.x op s, a.y op s, a.z op s, a.w op s); \
} \
__device__ __forceinline__ output_type ## 4 operator op(scalar_type s, const input_type ## 4 & b) \
{ \
return VecTraits<output_type ## 4>::make(s op b.x, s op b.y, s op b.z, s op b.w); \
}
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
uchar
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
uchar
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
uchar
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
char
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
char
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
char
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
ushort
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
ushort
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
ushort
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
short
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
short
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
short
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
int
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
int
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
uint
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
uint
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
uint
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
float
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
float
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
+
,
double
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
uchar
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
uchar
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
uchar
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
char
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
char
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
char
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
ushort
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
ushort
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
ushort
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
short
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
short
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
short
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
int
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
int
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
uint
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
uint
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
uint
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
float
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
float
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
-
,
double
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
uchar
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
uchar
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
uchar
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
char
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
char
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
char
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
ushort
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
ushort
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
ushort
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
short
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
short
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
short
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
int
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
int
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
uint
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
uint
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
uint
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
float
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
float
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
*
,
double
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
uchar
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
uchar
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
uchar
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
char
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
char
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
char
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
ushort
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
ushort
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
ushort
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
short
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
short
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
short
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
int
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
int
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
uint
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
uint
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
uint
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
float
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
float
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
/
,
double
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
==
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
==
,
char
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
==
,
ushort
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
==
,
short
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
==
,
int
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
==
,
uint
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
==
,
float
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
==
,
double
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
!=
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
!=
,
char
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
!=
,
ushort
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
!=
,
short
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
!=
,
int
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
!=
,
uint
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
!=
,
float
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
!=
,
double
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>
,
char
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>
,
ushort
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>
,
short
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>
,
int
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>
,
uint
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>
,
float
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>
,
double
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<
,
char
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<
,
ushort
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<
,
short
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<
,
int
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<
,
uint
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<
,
float
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<
,
double
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>=
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>=
,
char
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>=
,
ushort
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>=
,
short
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>=
,
int
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>=
,
uint
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>=
,
float
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
>=
,
double
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<=
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<=
,
char
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<=
,
ushort
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<=
,
short
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<=
,
int
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<=
,
uint
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<=
,
float
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
<=
,
double
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&&
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&&
,
char
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&&
,
ushort
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&&
,
short
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&&
,
int
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&&
,
uint
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&&
,
float
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&&
,
double
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
||
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
||
,
char
,
char
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
||
,
ushort
,
ushort
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
||
,
short
,
short
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
||
,
int
,
int
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
||
,
uint
,
uint
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
||
,
float
,
float
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
||
,
double
,
double
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&
,
char
,
char
,
char
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&
,
ushort
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&
,
short
,
short
,
short
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
&
,
uint
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
|
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
|
,
char
,
char
,
char
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
|
,
ushort
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
|
,
short
,
short
,
short
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
|
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
|
,
uint
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
^
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
^
,
char
,
char
,
char
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
^
,
ushort
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
^
,
short
,
short
,
short
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
^
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
(
^
,
uint
,
uint
,
uint
)
#undef CV_CUDEV_IMPLEMENT_SCALAR_BINARY_OP
// binary function (vec & vec)
#define CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC(func_name, func, input_type, output_type) \
__device__ __forceinline__ output_type ## 1 func_name(const input_type ## 1 & a, const input_type ## 1 & b) \
{ \
return VecTraits<output_type ## 1>::make(func (a.x, b.x)); \
} \
__device__ __forceinline__ output_type ## 2 func_name(const input_type ## 2 & a, const input_type ## 2 & b) \
{ \
return VecTraits<output_type ## 2>::make(func (a.x, b.x), func (a.y, b.y)); \
} \
template <typename T> \
__device__ __forceinline__ typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 2>::vec_type op(const type ## 2 & v, T s) \
__device__ __forceinline__ output_type ## 3 func_name(const input_type ## 3 & a, const input_type ## 3 & b) \
{ \
func<typename vec_math_detail::BinOpTraits<type, T>::argument_type> f; \
return VecTraits<typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 2>::vec_type>::make(f(v.x, s), f(v.y, s)); \
return VecTraits<output_type ## 3>::make(func (a.x, b.x), func (a.y, b.y), func (a.z, b.z)); \
} \
template <typename T> \
__device__ __forceinline__ typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 2>::vec_type op(T s, const type ## 2 & v) \
__device__ __forceinline__ output_type ## 4 func_name(const input_type ## 4 & a, const input_type ## 4 & b) \
{ \
func<typename vec_math_detail::BinOpTraits<type, T>::argument_type> f; \
return VecTraits<typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 2>::vec_type>::make(f(s, v.x), f(s, v.y)); \
return VecTraits<output_type ## 4>::make(func (a.x, b.x), func (a.y, b.y), func (a.z, b.z), func (a.w, b.w)); \
}
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
max
,
::
max
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
max
,
::
max
,
char
,
char
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
max
,
::
max
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
max
,
::
max
,
short
,
short
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
max
,
::
max
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
max
,
::
max
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
max
,
::
fmaxf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
max
,
::
fmax
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
min
,
::
min
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
min
,
::
min
,
char
,
char
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
min
,
::
min
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
min
,
::
min
,
short
,
short
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
min
,
::
min
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
min
,
::
min
,
int
,
int
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
min
,
::
fminf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
min
,
::
fmin
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
hypot
,
::
hypotf
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
hypot
,
::
hypotf
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
hypot
,
::
hypotf
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
hypot
,
::
hypotf
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
hypot
,
::
hypotf
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
hypot
,
::
hypotf
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
hypot
,
::
hypotf
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
hypot
,
::
hypot
,
double
,
double
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
atan2
,
::
atan2f
,
uchar
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
atan2
,
::
atan2f
,
char
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
atan2
,
::
atan2f
,
ushort
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
atan2
,
::
atan2f
,
short
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
atan2
,
::
atan2f
,
uint
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
atan2
,
::
atan2f
,
int
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
atan2
,
::
atan2f
,
float
,
float
)
CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
(
atan2
,
::
atan2
,
double
,
double
)
#undef CV_CUDEV_IMPLEMENT_VEC_BINARY_FUNC
// binary function (vec & scalar)
#define CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC(func_name, func, input_type, scalar_type, output_type) \
__device__ __forceinline__ output_type ## 1 func_name(const input_type ## 1 & a, scalar_type s) \
{ \
return VecTraits<output_type ## 1>::make(func ((output_type) a.x, (output_type) s)); \
} \
__device__ __forceinline__ output_type ## 1 func_name(scalar_type s, const input_type ## 1 & b) \
{ \
return VecTraits<output_type ## 1>::make(func ((output_type) s, (output_type) b.x)); \
} \
__device__ __forceinline__
TypeVec<func<type>::result_type, 3>::vec_type op(const type ## 3 & a, const type ## 3 & b
) \
__device__ __forceinline__
output_type ## 2 func_name(const input_type ## 2 & a, scalar_type s
) \
{ \
func<type> f; \
return VecTraits<TypeVec<func<type>::result_type, 3>::vec_type>::make(f(a.x, b.x), f(a.y, b.y), f(a.z, b.z)); \
return VecTraits<output_type ## 2>::make(func ((output_type) a.x, (output_type) s), func ((output_type) a.y, (output_type) s)); \
} \
template <typename T> \
__device__ __forceinline__ typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 3>::vec_type op(const type ## 3 & v, T s) \
__device__ __forceinline__ output_type ## 2 func_name(scalar_type s, const input_type ## 2 & b) \
{ \
func<typename vec_math_detail::BinOpTraits<type, T>::argument_type> f; \
return VecTraits<typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 3>::vec_type>::make(f(v.x, s), f(v.y, s), f(v.z, s)); \
return VecTraits<output_type ## 2>::make(func ((output_type) s, (output_type) b.x), func ((output_type) s, (output_type) b.y)); \
} \
template <typename T> \
__device__ __forceinline__ typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 3>::vec_type op(T s, const type ## 3 & v) \
__device__ __forceinline__ output_type ## 3 func_name(const input_type ## 3 & a, scalar_type s) \
{ \
func<typename vec_math_detail::BinOpTraits<type, T>::argument_type> f; \
return VecTraits<typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 3>::vec_type>::make(f(s, v.x), f(s, v.y), f(s, v.z)); \
return VecTraits<output_type ## 3>::make(func ((output_type) a.x, (output_type) s), func ((output_type) a.y, (output_type) s), func ((output_type) a.z, (output_type) s)); \
} \
__device__ __forceinline__
TypeVec<func<type>::result_type, 4>::vec_type op(const type ## 4 & a, const type ## 4
& b) \
__device__ __forceinline__
output_type ## 3 func_name(scalar_type s, const input_type ## 3
& b) \
{ \
func<type> f; \
return VecTraits<TypeVec<func<type>::result_type, 4>::vec_type>::make(f(a.x, b.x), f(a.y, b.y), f(a.z, b.z), f(a.w, b.w)); \
return VecTraits<output_type ## 3>::make(func ((output_type) s, (output_type) b.x), func ((output_type) s, (output_type) b.y), func ((output_type) s, (output_type) b.z)); \
} \
template <typename T> \
__device__ __forceinline__ typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 4>::vec_type op(const type ## 4 & v, T s) \
__device__ __forceinline__ output_type ## 4 func_name(const input_type ## 4 & a, scalar_type s) \
{ \
func<typename vec_math_detail::BinOpTraits<type, T>::argument_type> f; \
return VecTraits<typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 4>::vec_type>::make(f(v.x, s), f(v.y, s), f(v.z, s), f(v.w, s)); \
return VecTraits<output_type ## 4>::make(func ((output_type) a.x, (output_type) s), func ((output_type) a.y, (output_type) s), func ((output_type) a.z, (output_type) s), func ((output_type) a.w, (output_type) s)); \
} \
template <typename T> \
__device__ __forceinline__ typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 4>::vec_type op(T s, const type ## 4 & v) \
__device__ __forceinline__ output_type ## 4 func_name(scalar_type s, const input_type ## 4 & b) \
{ \
func<typename vec_math_detail::BinOpTraits<T, type>::argument_type> f; \
return VecTraits<typename TypeVec<typename func<typename vec_math_detail::BinOpTraits<type, T>::argument_type>::result_type, 4>::vec_type>::make(f(s, v.x), f(s, v.y), f(s, v.z), f(s, v.w)); \
return VecTraits<output_type ## 4>::make(func ((output_type) s, (output_type) b.x), func ((output_type) s, (output_type) b.y), func ((output_type) s, (output_type) b.z), func ((output_type) s, (output_type) b.w)); \
}
#define OPENCV_GPU_IMPLEMENT_VEC_OP(type) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator +, plus) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator -, minus) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator *, multiplies) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator /, divides) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP (type, operator -, negate) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator ==, equal_to) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator !=, not_equal_to) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator > , greater) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator < , less) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator >=, greater_equal) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator <=, less_equal) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator &&, logical_and) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator ||, logical_or) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP (type, operator ! , logical_not) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, max, maximum) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, min, minimum) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, abs, abs_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, sqrt, sqrt_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, exp, exp_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, exp2, exp2_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, exp10, exp10_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, log, log_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, log2, log2_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, log10, log10_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, sin, sin_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, cos, cos_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, tan, tan_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, asin, asin_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, acos, acos_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, atan, atan_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, sinh, sinh_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, cosh, cosh_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, tanh, tanh_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, asinh, asinh_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, acosh, acosh_func) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP(type, atanh, atanh_func) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, hypot, hypot_func) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, atan2, atan2_func) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, pow, pow_func) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, hypot_sqr, hypot_sqr_func)
#define OPENCV_GPU_IMPLEMENT_VEC_INT_OP(type) \
OPENCV_GPU_IMPLEMENT_VEC_OP(type) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator &, bit_and) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator |, bit_or) \
OPENCV_GPU_IMPLEMENT_VEC_BINOP(type, operator ^, bit_xor) \
OPENCV_GPU_IMPLEMENT_VEC_UNOP (type, operator ~, bit_not)
OPENCV_GPU_IMPLEMENT_VEC_INT_OP
(
uchar
)
OPENCV_GPU_IMPLEMENT_VEC_INT_OP
(
char
)
OPENCV_GPU_IMPLEMENT_VEC_INT_OP
(
ushort
)
OPENCV_GPU_IMPLEMENT_VEC_INT_OP
(
short
)
OPENCV_GPU_IMPLEMENT_VEC_INT_OP
(
int
)
OPENCV_GPU_IMPLEMENT_VEC_INT_OP
(
uint
)
OPENCV_GPU_IMPLEMENT_VEC_OP
(
float
)
OPENCV_GPU_IMPLEMENT_VEC_OP
(
double
)
#undef OPENCV_GPU_IMPLEMENT_VEC_UNOP
#undef OPENCV_GPU_IMPLEMENT_VEC_BINOP
#undef OPENCV_GPU_IMPLEMENT_VEC_OP
#undef OPENCV_GPU_IMPLEMENT_VEC_INT_OP
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
max
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmaxf
,
uchar
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmax
,
uchar
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
max
,
char
,
char
,
char
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmaxf
,
char
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmax
,
char
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
max
,
ushort
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmaxf
,
ushort
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmax
,
ushort
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
max
,
short
,
short
,
short
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmaxf
,
short
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmax
,
short
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
max
,
uint
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmaxf
,
uint
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmax
,
uint
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
max
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmaxf
,
int
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmax
,
int
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmaxf
,
float
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmax
,
float
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
max
,
::
fmax
,
double
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
min
,
uchar
,
uchar
,
uchar
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fminf
,
uchar
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fmin
,
uchar
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
min
,
char
,
char
,
char
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fminf
,
char
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fmin
,
char
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
min
,
ushort
,
ushort
,
ushort
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fminf
,
ushort
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fmin
,
ushort
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
min
,
short
,
short
,
short
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fminf
,
short
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fmin
,
short
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
min
,
uint
,
uint
,
uint
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fminf
,
uint
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fmin
,
uint
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
min
,
int
,
int
,
int
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fminf
,
int
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fmin
,
int
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fminf
,
float
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fmin
,
float
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
min
,
::
fmin
,
double
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypotf
,
uchar
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypot
,
uchar
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypotf
,
char
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypot
,
char
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypotf
,
ushort
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypot
,
ushort
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypotf
,
short
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypot
,
short
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypotf
,
uint
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypot
,
uint
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypotf
,
int
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypot
,
int
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypotf
,
float
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypot
,
float
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
hypot
,
::
hypot
,
double
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2f
,
uchar
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2
,
uchar
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2f
,
char
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2
,
char
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2f
,
ushort
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2
,
ushort
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2f
,
short
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2
,
short
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2f
,
uint
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2
,
uint
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2f
,
int
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2
,
int
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2f
,
float
,
float
,
float
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2
,
float
,
double
,
double
)
CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
(
atan2
,
::
atan2
,
double
,
double
,
double
)
#undef CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
}}}
// namespace cv { namespace gpu { namespace device
#endif // __OPENCV_GPU_VECMATH_HPP__
modules/gpu/perf/perf_filters.cpp
View file @
087db294
...
...
@@ -72,7 +72,7 @@ PERF_TEST_P(Sz_Type_KernelSz, Filters_Blur,
TEST_CYCLE
()
cv
::
gpu
::
blur
(
d_src
,
dst
,
cv
::
Size
(
ksize
,
ksize
));
GPU_SANITY_CHECK
(
dst
);
GPU_SANITY_CHECK
(
dst
,
1
);
}
else
{
...
...
modules/gpu/perf/perf_video.cpp
View file @
087db294
...
...
@@ -103,7 +103,7 @@ PERF_TEST_P(ImagePair, Video_InterpolateFrames,
TEST_CYCLE
()
cv
::
gpu
::
interpolateFrames
(
d_frame0
,
d_frame1
,
d_fu
,
d_fv
,
d_bu
,
d_bv
,
0.5
f
,
newFrame
,
d_buf
);
GPU_SANITY_CHECK
(
newFrame
);
GPU_SANITY_CHECK
(
newFrame
,
1e-4
);
}
else
{
...
...
@@ -142,7 +142,7 @@ PERF_TEST_P(ImagePair, Video_CreateOpticalFlowNeedleMap,
TEST_CYCLE
()
cv
::
gpu
::
createOpticalFlowNeedleMap
(
u
,
v
,
vertex
,
colors
);
GPU_SANITY_CHECK
(
vertex
);
GPU_SANITY_CHECK
(
vertex
,
1e-6
);
GPU_SANITY_CHECK
(
colors
);
}
else
...
...
@@ -219,8 +219,8 @@ PERF_TEST_P(ImagePair, Video_BroxOpticalFlow,
TEST_CYCLE
()
d_flow
(
d_frame0
,
d_frame1
,
u
,
v
);
GPU_SANITY_CHECK
(
u
);
GPU_SANITY_CHECK
(
v
);
GPU_SANITY_CHECK
(
u
,
1e-1
);
GPU_SANITY_CHECK
(
v
,
1e-1
);
}
else
{
...
...
modules/gpu/src/cuda/ccomponetns.cu
View file @
087db294
...
...
@@ -153,7 +153,7 @@ namespace cv { namespace gpu { namespace device
template<typename I> __device__ __forceinline__ bool operator() (const I& a, const I& b) const
{
I d =
a - b
;
I d =
saturate_cast<I>(a - b)
;
return lo.x <= d.x && d.x <= hi.x &&
lo.y <= d.y && d.y <= hi.y &&
lo.z <= d.z && d.z <= hi.z;
...
...
@@ -169,7 +169,7 @@ namespace cv { namespace gpu { namespace device
template<typename I> __device__ __forceinline__ bool operator() (const I& a, const I& b) const
{
I d =
a - b
;
I d =
saturate_cast<I>(a - b)
;
return lo.x <= d.x && d.x <= hi.x &&
lo.y <= d.y && d.y <= hi.y &&
lo.z <= d.z && d.z <= hi.z &&
...
...
modules/gpu/src/cuda/hough.cu
View file @
087db294
...
...
@@ -48,6 +48,7 @@
#include "opencv2/gpu/device/common.hpp"
#include "opencv2/gpu/device/emulation.hpp"
#include "opencv2/gpu/device/vec_math.hpp"
#include "opencv2/gpu/device/functional.hpp"
#include "opencv2/gpu/device/limits.hpp"
#include "opencv2/gpu/device/dynamic_smem.hpp"
...
...
@@ -811,7 +812,7 @@ namespace cv { namespace gpu { namespace device
const int ind = ::atomicAdd(r_sizes + n, 1);
if (ind < maxSize)
r_table(n, ind) =
p - templCenter
;
r_table(n, ind) =
saturate_cast<short2>(p - templCenter)
;
}
void buildRTable_gpu(const unsigned int* coordList, const float* thetaList, int pointsCount,
...
...
@@ -855,7 +856,7 @@ namespace cv { namespace gpu { namespace device
for (int j = 0; j < r_row_size; ++j)
{
shor
t2 c = p - r_row[j];
in
t2 c = p - r_row[j];
c.x = __float2int_rn(c.x * idp);
c.y = __float2int_rn(c.y * idp);
...
...
modules/gpu/test/test_optflow.cpp
View file @
087db294
...
...
@@ -102,8 +102,8 @@ GPU_TEST_P(BroxOpticalFlow, Regression)
for
(
int
i
=
0
;
i
<
v_gold
.
rows
;
++
i
)
f
.
read
(
v_gold
.
ptr
<
char
>
(
i
),
v_gold
.
cols
*
sizeof
(
float
));
EXPECT_MAT_
NEAR
(
u_gold
,
u
,
0
);
EXPECT_MAT_
NEAR
(
v_gold
,
v
,
0
);
EXPECT_MAT_
SIMILAR
(
u_gold
,
u
,
1e-3
);
EXPECT_MAT_
SIMILAR
(
v_gold
,
v
,
1e-3
);
#else
std
::
ofstream
f
(
fname
.
c_str
(),
std
::
ios_base
::
binary
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment