26 using component_type = T;
27 static constexpr u32 dimension = 1;
29 static constexpr bool is_float_based = std::is_same<T, f16>::value
30 || std::is_same<T, f32>::value
31 || std::is_same<T, f64>::value;
32 static constexpr bool is_uint_based
33 = std::is_same<T, u8>::value || std::is_same<T, u16>::value
34 || std::is_same<T, u32>::value || std::is_same<T, u64>::value;
35 static constexpr bool is_int_based
36 = std::is_same<T, i8>::value || std::is_same<T, i16>::value
37 || std::is_same<T, i32>::value || std::is_same<T, i64>::value;
39 static constexpr bool has_info = is_float_based || is_int_based || is_uint_based;
41 static constexpr T get_min() {
47 static constexpr T get_zero() {
return 0; }
52 using component_type = T;
53 static constexpr u32 dimension = dim;
55 static constexpr bool is_float_based = std::is_same<T, f16>::value
56 || std::is_same<T, f32>::value
57 || std::is_same<T, f64>::value;
58 static constexpr bool is_uint_based
59 = std::is_same<T, u8>::value || std::is_same<T, u16>::value
60 || std::is_same<T, u32>::value || std::is_same<T, u64>::value;
61 static constexpr bool is_int_based
62 = std::is_same<T, i8>::value || std::is_same<T, i16>::value
63 || std::is_same<T, i32>::value || std::is_same<T, i64>::value;
64 static constexpr bool has_info = is_float_based || is_int_based || is_uint_based;
66 static constexpr sycl::vec<T, dim> get_min() {
68 if constexpr (dim == 2) {
71 if constexpr (dim == 3) {
72 return {min, min, min};
74 if constexpr (dim == 4) {
75 return {min, min, min, min};
77 if constexpr (dim == 8) {
78 return {min, min, min, min, min, min, min, min};
80 if constexpr (dim == 16) {
82 min, min, min, min, min, min, min, min, min, min, min, min, min, min, min, min};
85 static constexpr sycl::vec<T, dim> get_max() {
87 if constexpr (dim == 2) {
90 if constexpr (dim == 3) {
91 return {max, max, max};
93 if constexpr (dim == 4) {
94 return {max, max, max, max};
96 if constexpr (dim == 8) {
97 return {max, max, max, max, max, max, max, max};
99 if constexpr (dim == 16) {
101 max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max};
104 static constexpr sycl::vec<T, dim> get_zero() {
105 constexpr T zero = 0;
106 if constexpr (dim == 2) {
109 if constexpr (dim == 3) {
110 return {zero, zero, zero};
112 if constexpr (dim == 4) {
113 return {zero, zero, zero, zero};
115 if constexpr (dim == 8) {
116 return {zero, zero, zero, zero, zero, zero, zero, zero};
118 if constexpr (dim == 16) {