OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef SkNx_DEFINED | 8 #ifndef SkNx_DEFINED |
9 #define SkNx_DEFINED | 9 #define SkNx_DEFINED |
10 | 10 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 SkNx operator <= (const SkNx& o) const { return SkNx(fLo <= o.fLo, fHi <= o.
fHi); } | 67 SkNx operator <= (const SkNx& o) const { return SkNx(fLo <= o.fLo, fHi <= o.
fHi); } |
68 SkNx operator >= (const SkNx& o) const { return SkNx(fLo >= o.fLo, fHi >= o.
fHi); } | 68 SkNx operator >= (const SkNx& o) const { return SkNx(fLo >= o.fLo, fHi >= o.
fHi); } |
69 | 69 |
70 static SkNx Min(const SkNx& a, const SkNx& b) { | 70 static SkNx Min(const SkNx& a, const SkNx& b) { |
71 return SkNx(SkNx<N/2, T>::Min(a.fLo, b.fLo), SkNx<N/2, T>::Min(a.fHi, b.
fHi)); | 71 return SkNx(SkNx<N/2, T>::Min(a.fLo, b.fLo), SkNx<N/2, T>::Min(a.fHi, b.
fHi)); |
72 } | 72 } |
73 static SkNx Max(const SkNx& a, const SkNx& b) { | 73 static SkNx Max(const SkNx& a, const SkNx& b) { |
74 return SkNx(SkNx<N/2, T>::Max(a.fLo, b.fLo), SkNx<N/2, T>::Max(a.fHi, b.
fHi)); | 74 return SkNx(SkNx<N/2, T>::Max(a.fLo, b.fLo), SkNx<N/2, T>::Max(a.fHi, b.
fHi)); |
75 } | 75 } |
76 | 76 |
| 77 SkNx abs() const { return SkNx(fLo.abs(), fHi.abs()); } |
| 78 |
77 SkNx sqrt() const { return SkNx(fLo.sqrt(), fHi.sqrt()); } | 79 SkNx sqrt() const { return SkNx(fLo.sqrt(), fHi.sqrt()); } |
78 // Generally, increasing precision, increasing cost. | 80 // Generally, increasing precision, increasing cost. |
79 SkNx rsqrt0() const { return SkNx(fLo.rsqrt0(), fHi.rsqrt0()); } | 81 SkNx rsqrt0() const { return SkNx(fLo.rsqrt0(), fHi.rsqrt0()); } |
80 SkNx rsqrt1() const { return SkNx(fLo.rsqrt1(), fHi.rsqrt1()); } | 82 SkNx rsqrt1() const { return SkNx(fLo.rsqrt1(), fHi.rsqrt1()); } |
81 SkNx rsqrt2() const { return SkNx(fLo.rsqrt2(), fHi.rsqrt2()); } | 83 SkNx rsqrt2() const { return SkNx(fLo.rsqrt2(), fHi.rsqrt2()); } |
82 | 84 |
83 SkNx invert() const { return SkNx(fLo. invert(), fHi. invert
()); } | 85 SkNx invert() const { return SkNx(fLo. invert(), fHi. invert
()); } |
84 SkNx approxInvert() const { return SkNx(fLo.approxInvert(), fHi.approxInvert
()); } | 86 SkNx approxInvert() const { return SkNx(fLo.approxInvert(), fHi.approxInvert
()); } |
85 | 87 |
86 template <int k> T kth() const { | 88 template <int k> T kth() const { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 SkNx operator == (const SkNx& o) const { return SkNx(fVal == o.fVal); } | 129 SkNx operator == (const SkNx& o) const { return SkNx(fVal == o.fVal); } |
128 SkNx operator != (const SkNx& o) const { return SkNx(fVal != o.fVal); } | 130 SkNx operator != (const SkNx& o) const { return SkNx(fVal != o.fVal); } |
129 SkNx operator < (const SkNx& o) const { return SkNx(fVal < o.fVal); } | 131 SkNx operator < (const SkNx& o) const { return SkNx(fVal < o.fVal); } |
130 SkNx operator > (const SkNx& o) const { return SkNx(fVal > o.fVal); } | 132 SkNx operator > (const SkNx& o) const { return SkNx(fVal > o.fVal); } |
131 SkNx operator <= (const SkNx& o) const { return SkNx(fVal <= o.fVal); } | 133 SkNx operator <= (const SkNx& o) const { return SkNx(fVal <= o.fVal); } |
132 SkNx operator >= (const SkNx& o) const { return SkNx(fVal >= o.fVal); } | 134 SkNx operator >= (const SkNx& o) const { return SkNx(fVal >= o.fVal); } |
133 | 135 |
134 static SkNx Min(const SkNx& a, const SkNx& b) { return SkNx(SkTMin(a.fVal, b
.fVal)); } | 136 static SkNx Min(const SkNx& a, const SkNx& b) { return SkNx(SkTMin(a.fVal, b
.fVal)); } |
135 static SkNx Max(const SkNx& a, const SkNx& b) { return SkNx(SkTMax(a.fVal, b
.fVal)); } | 137 static SkNx Max(const SkNx& a, const SkNx& b) { return SkNx(SkTMax(a.fVal, b
.fVal)); } |
136 | 138 |
| 139 SkNx abs() const { return SkTAbs(fVal); } |
| 140 |
137 SkNx sqrt () const { return SkNx(Sqrt(fVal)); } | 141 SkNx sqrt () const { return SkNx(Sqrt(fVal)); } |
138 SkNx rsqrt0() const { return this->sqrt().invert(); } | 142 SkNx rsqrt0() const { return this->sqrt().invert(); } |
139 SkNx rsqrt1() const { return this->rsqrt0(); } | 143 SkNx rsqrt1() const { return this->rsqrt0(); } |
140 SkNx rsqrt2() const { return this->rsqrt1(); } | 144 SkNx rsqrt2() const { return this->rsqrt1(); } |
141 | 145 |
142 SkNx invert() const { return SkNx(1) / SkNx(fVal); } | 146 SkNx invert() const { return SkNx(1) / SkNx(fVal); } |
143 SkNx approxInvert() const { return this->invert(); } | 147 SkNx approxInvert() const { return this->invert(); } |
144 | 148 |
145 template <int k> T kth() const { | 149 template <int k> T kth() const { |
146 SkASSERT(0 == k); | 150 SkASSERT(0 == k); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 SkNx_cast<uint8_t>(b).store(p+ 4); | 242 SkNx_cast<uint8_t>(b).store(p+ 4); |
239 SkNx_cast<uint8_t>(c).store(p+ 8); | 243 SkNx_cast<uint8_t>(c).store(p+ 8); |
240 SkNx_cast<uint8_t>(d).store(p+12); | 244 SkNx_cast<uint8_t>(d).store(p+12); |
241 } | 245 } |
242 #endif | 246 #endif |
243 | 247 |
244 #undef REQUIRE | 248 #undef REQUIRE |
245 | 249 |
246 | 250 |
247 #endif//SkNx_DEFINED | 251 #endif//SkNx_DEFINED |
OLD | NEW |