43#ifndef OPENCV_CUDA_SATURATE_CAST_HPP
44#define OPENCV_CUDA_SATURATE_CAST_HPP
54namespace cv {
namespace cuda {
namespace device
56 template<
typename _Tp> __device__ __forceinline__ _Tp saturate_cast(
uchar v) {
return _Tp(v); }
57 template<
typename _Tp> __device__ __forceinline__ _Tp saturate_cast(
schar v) {
return _Tp(v); }
58 template<
typename _Tp> __device__ __forceinline__ _Tp saturate_cast(
ushort v) {
return _Tp(v); }
59 template<
typename _Tp> __device__ __forceinline__ _Tp saturate_cast(
short v) {
return _Tp(v); }
60 template<
typename _Tp> __device__ __forceinline__ _Tp saturate_cast(
uint v) {
return _Tp(v); }
61 template<
typename _Tp> __device__ __forceinline__ _Tp saturate_cast(
int v) {
return _Tp(v); }
62 template<
typename _Tp> __device__ __forceinline__ _Tp saturate_cast(
float v) {
return _Tp(v); }
63 template<
typename _Tp> __device__ __forceinline__ _Tp saturate_cast(
double v) {
return _Tp(v); }
65 template<> __device__ __forceinline__
uchar saturate_cast<uchar>(
schar v)
69 asm(
"cvt.sat.u8.s8 %0, %1;" :
"=r"(res) :
"r"(vi));
72 template<> __device__ __forceinline__
uchar saturate_cast<uchar>(
short v)
75 asm(
"cvt.sat.u8.s16 %0, %1;" :
"=r"(res) :
"h"(v));
78 template<> __device__ __forceinline__
uchar saturate_cast<uchar>(
ushort v)
81 asm(
"cvt.sat.u8.u16 %0, %1;" :
"=r"(res) :
"h"(v));
84 template<> __device__ __forceinline__
uchar saturate_cast<uchar>(
int v)
87 asm(
"cvt.sat.u8.s32 %0, %1;" :
"=r"(res) :
"r"(v));
90 template<> __device__ __forceinline__
uchar saturate_cast<uchar>(
uint v)
93 asm(
"cvt.sat.u8.u32 %0, %1;" :
"=r"(res) :
"r"(v));
96 template<> __device__ __forceinline__
uchar saturate_cast<uchar>(
float v)
99 asm(
"cvt.rni.sat.u8.f32 %0, %1;" :
"=r"(res) :
"f"(v));
102 template<> __device__ __forceinline__
uchar saturate_cast<uchar>(
double v)
104 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 130
106 asm(
"cvt.rni.sat.u8.f64 %0, %1;" :
"=r"(res) :
"d"(v));
109 return saturate_cast<uchar>((
float)v);
113 template<> __device__ __forceinline__
schar saturate_cast<schar>(
uchar v)
117 asm(
"cvt.sat.s8.u8 %0, %1;" :
"=r"(res) :
"r"(vi));
120 template<> __device__ __forceinline__
schar saturate_cast<schar>(
short v)
123 asm(
"cvt.sat.s8.s16 %0, %1;" :
"=r"(res) :
"h"(v));
126 template<> __device__ __forceinline__
schar saturate_cast<schar>(
ushort v)
129 asm(
"cvt.sat.s8.u16 %0, %1;" :
"=r"(res) :
"h"(v));
132 template<> __device__ __forceinline__
schar saturate_cast<schar>(
int v)
135 asm(
"cvt.sat.s8.s32 %0, %1;" :
"=r"(res) :
"r"(v));
138 template<> __device__ __forceinline__
schar saturate_cast<schar>(
uint v)
141 asm(
"cvt.sat.s8.u32 %0, %1;" :
"=r"(res) :
"r"(v));
144 template<> __device__ __forceinline__
schar saturate_cast<schar>(
float v)
147 asm(
"cvt.rni.sat.s8.f32 %0, %1;" :
"=r"(res) :
"f"(v));
150 template<> __device__ __forceinline__
schar saturate_cast<schar>(
double v)
152 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 130
154 asm(
"cvt.rni.sat.s8.f64 %0, %1;" :
"=r"(res) :
"d"(v));
157 return saturate_cast<schar>((
float)v);
161 template<> __device__ __forceinline__
ushort saturate_cast<ushort>(
schar v)
165 asm(
"cvt.sat.u16.s8 %0, %1;" :
"=h"(res) :
"r"(vi));
168 template<> __device__ __forceinline__
ushort saturate_cast<ushort>(
short v)
171 asm(
"cvt.sat.u16.s16 %0, %1;" :
"=h"(res) :
"h"(v));
174 template<> __device__ __forceinline__
ushort saturate_cast<ushort>(
int v)
177 asm(
"cvt.sat.u16.s32 %0, %1;" :
"=h"(res) :
"r"(v));
180 template<> __device__ __forceinline__
ushort saturate_cast<ushort>(
uint v)
183 asm(
"cvt.sat.u16.u32 %0, %1;" :
"=h"(res) :
"r"(v));
186 template<> __device__ __forceinline__
ushort saturate_cast<ushort>(
float v)
189 asm(
"cvt.rni.sat.u16.f32 %0, %1;" :
"=h"(res) :
"f"(v));
192 template<> __device__ __forceinline__
ushort saturate_cast<ushort>(
double v)
194 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 130
196 asm(
"cvt.rni.sat.u16.f64 %0, %1;" :
"=h"(res) :
"d"(v));
199 return saturate_cast<ushort>((
float)v);
203 template<> __device__ __forceinline__
short saturate_cast<short>(
ushort v)
206 asm(
"cvt.sat.s16.u16 %0, %1;" :
"=h"(res) :
"h"(v));
209 template<> __device__ __forceinline__
short saturate_cast<short>(
int v)
212 asm(
"cvt.sat.s16.s32 %0, %1;" :
"=h"(res) :
"r"(v));
215 template<> __device__ __forceinline__
short saturate_cast<short>(
uint v)
218 asm(
"cvt.sat.s16.u32 %0, %1;" :
"=h"(res) :
"r"(v));
221 template<> __device__ __forceinline__
short saturate_cast<short>(
float v)
224 asm(
"cvt.rni.sat.s16.f32 %0, %1;" :
"=h"(res) :
"f"(v));
227 template<> __device__ __forceinline__
short saturate_cast<short>(
double v)
229 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 130
231 asm(
"cvt.rni.sat.s16.f64 %0, %1;" :
"=h"(res) :
"d"(v));
234 return saturate_cast<short>((
float)v);
238 template<> __device__ __forceinline__
int saturate_cast<int>(
uint v)
241 asm(
"cvt.sat.s32.u32 %0, %1;" :
"=r"(res) :
"r"(v));
244 template<> __device__ __forceinline__
int saturate_cast<int>(
float v)
246 return __float2int_rn(v);
248 template<> __device__ __forceinline__
int saturate_cast<int>(
double v)
250 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 130
251 return __double2int_rn(v);
253 return saturate_cast<int>((
float)v);
257 template<> __device__ __forceinline__
uint saturate_cast<uint>(
schar v)
261 asm(
"cvt.sat.u32.s8 %0, %1;" :
"=r"(res) :
"r"(vi));
264 template<> __device__ __forceinline__
uint saturate_cast<uint>(
short v)
267 asm(
"cvt.sat.u32.s16 %0, %1;" :
"=r"(res) :
"h"(v));
270 template<> __device__ __forceinline__
uint saturate_cast<uint>(
int v)
273 asm(
"cvt.sat.u32.s32 %0, %1;" :
"=r"(res) :
"r"(v));
276 template<> __device__ __forceinline__
uint saturate_cast<uint>(
float v)
278 return __float2uint_rn(v);
280 template<> __device__ __forceinline__
uint saturate_cast<uint>(
double v)
282 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 130
283 return __double2uint_rn(v);
285 return saturate_cast<uint>((
float)v);
signed char schar
Definition interface.h:48
uint32_t uint
Definition interface.h:42
unsigned char uchar
Definition interface.h:51
unsigned short ushort
Definition interface.h:52
"black box" representation of the file storage associated with a file on disk.
Definition calib3d.hpp:441