Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Side by Side Diff: src/core/SkNx.h

Issue 1109883003: Revert of Mike's radial gradient CL with better float -> int. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gm/gradients.cpp ('k') | src/effects/gradients/SkRadialGradient.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 private: 70 private:
71 REQUIRE(0 == (N & (N-1))); 71 REQUIRE(0 == (N & (N-1)));
72 SkNi(const SkNi<N/2, T>& lo, const SkNi<N/2, T>& hi) : fLo(lo), fHi(hi) {} 72 SkNi(const SkNi<N/2, T>& lo, const SkNi<N/2, T>& hi) : fLo(lo), fHi(hi) {}
73 73
74 SkNi<N/2, T> fLo, fHi; 74 SkNi<N/2, T> fLo, fHi;
75 }; 75 };
76 76
77 template <int N, typename T> 77 template <int N, typename T>
78 class SkNf { 78 class SkNf {
79 typedef SkNb<N, sizeof(T)> Nb; 79 typedef SkNb<N, sizeof(T)> Nb;
80
81 static int32_t MyNi(float);
82 static int64_t MyNi(double);
83 typedef SkNi<N, decltype(MyNi(T()))> Ni;
84 public: 80 public:
85 SkNf() {} 81 SkNf() {}
86 explicit SkNf(T val) : fLo(val), fHi(val) {} 82 explicit SkNf(T val) : fLo(val), fHi(val) {}
87 static SkNf Load(const T vals[N]) { 83 static SkNf Load(const T vals[N]) {
88 return SkNf(SkNf<N/2,T>::Load(vals), SkNf<N/2,T>::Load(vals+N/2)); 84 return SkNf(SkNf<N/2,T>::Load(vals), SkNf<N/2,T>::Load(vals+N/2));
89 } 85 }
90 86
91 SkNf(T a, T b) : fLo(a), fHi(b) { REQUIRE(N==2); } 87 SkNf(T a, T b) : fLo(a), fHi(b) { REQUIRE(N==2); }
92 SkNf(T a, T b, T c, T d) : fLo(a,b), fHi(c,d) { REQUIRE(N==4); } 88 SkNf(T a, T b, T c, T d) : fLo(a,b), fHi(c,d) { REQUIRE(N==4); }
93 SkNf(T a, T b, T c, T d, T e, T f, T g, T h) : fLo(a,b,c,d), fHi(e,f,g,h) { REQUIRE(N==8); } 89 SkNf(T a, T b, T c, T d, T e, T f, T g, T h) : fLo(a,b,c,d), fHi(e,f,g,h) { REQUIRE(N==8); }
94 90
95 void store(T vals[N]) const { 91 void store(T vals[N]) const {
96 fLo.store(vals); 92 fLo.store(vals);
97 fHi.store(vals+N/2); 93 fHi.store(vals+N/2);
98 } 94 }
99 95
100 Ni castTrunc() const { return Ni(fLo.castTrunc(), fHi.castTrunc()); }
101
102 SkNf operator + (const SkNf& o) const { return SkNf(fLo + o.fLo, fHi + o.fHi ); } 96 SkNf operator + (const SkNf& o) const { return SkNf(fLo + o.fLo, fHi + o.fHi ); }
103 SkNf operator - (const SkNf& o) const { return SkNf(fLo - o.fLo, fHi - o.fHi ); } 97 SkNf operator - (const SkNf& o) const { return SkNf(fLo - o.fLo, fHi - o.fHi ); }
104 SkNf operator * (const SkNf& o) const { return SkNf(fLo * o.fLo, fHi * o.fHi ); } 98 SkNf operator * (const SkNf& o) const { return SkNf(fLo * o.fLo, fHi * o.fHi ); }
105 SkNf operator / (const SkNf& o) const { return SkNf(fLo / o.fLo, fHi / o.fHi ); } 99 SkNf operator / (const SkNf& o) const { return SkNf(fLo / o.fLo, fHi / o.fHi ); }
106 100
107 Nb operator == (const SkNf& o) const { return Nb(fLo == o.fLo, fHi == o.fHi) ; } 101 Nb operator == (const SkNf& o) const { return Nb(fLo == o.fLo, fHi == o.fHi) ; }
108 Nb operator != (const SkNf& o) const { return Nb(fLo != o.fLo, fHi != o.fHi) ; } 102 Nb operator != (const SkNf& o) const { return Nb(fLo != o.fLo, fHi != o.fHi) ; }
109 Nb operator < (const SkNf& o) const { return Nb(fLo < o.fLo, fHi < o.fHi) ; } 103 Nb operator < (const SkNf& o) const { return Nb(fLo < o.fLo, fHi < o.fHi) ; }
110 Nb operator > (const SkNf& o) const { return Nb(fLo > o.fLo, fHi > o.fHi) ; } 104 Nb operator > (const SkNf& o) const { return Nb(fLo > o.fLo, fHi > o.fHi) ; }
111 Nb operator <= (const SkNf& o) const { return Nb(fLo <= o.fLo, fHi <= o.fHi) ; } 105 Nb operator <= (const SkNf& o) const { return Nb(fLo <= o.fLo, fHi <= o.fHi) ; }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 return fVal; 165 return fVal;
172 } 166 }
173 167
174 private: 168 private:
175 T fVal; 169 T fVal;
176 }; 170 };
177 171
178 template <typename T> 172 template <typename T>
179 class SkNf<1,T> { 173 class SkNf<1,T> {
180 typedef SkNb<1, sizeof(T)> Nb; 174 typedef SkNb<1, sizeof(T)> Nb;
181
182 static int32_t MyNi(float);
183 static int64_t MyNi(double);
184 typedef SkNi<1, decltype(MyNi(T()))> Ni;
185 public: 175 public:
186 SkNf() {} 176 SkNf() {}
187 explicit SkNf(T val) : fVal(val) {} 177 explicit SkNf(T val) : fVal(val) {}
188 static SkNf Load(const T vals[1]) { return SkNf(vals[0]); } 178 static SkNf Load(const T vals[1]) { return SkNf(vals[0]); }
189 179
190 void store(T vals[1]) const { vals[0] = fVal; } 180 void store(T vals[1]) const { vals[0] = fVal; }
191 181
192 Ni castTrunc() const { return Ni(fVal); }
193
194 SkNf operator + (const SkNf& o) const { return SkNf(fVal + o.fVal); } 182 SkNf operator + (const SkNf& o) const { return SkNf(fVal + o.fVal); }
195 SkNf operator - (const SkNf& o) const { return SkNf(fVal - o.fVal); } 183 SkNf operator - (const SkNf& o) const { return SkNf(fVal - o.fVal); }
196 SkNf operator * (const SkNf& o) const { return SkNf(fVal * o.fVal); } 184 SkNf operator * (const SkNf& o) const { return SkNf(fVal * o.fVal); }
197 SkNf operator / (const SkNf& o) const { return SkNf(fVal / o.fVal); } 185 SkNf operator / (const SkNf& o) const { return SkNf(fVal / o.fVal); }
198 186
199 Nb operator == (const SkNf& o) const { return Nb(fVal == o.fVal); } 187 Nb operator == (const SkNf& o) const { return Nb(fVal == o.fVal); }
200 Nb operator != (const SkNf& o) const { return Nb(fVal != o.fVal); } 188 Nb operator != (const SkNf& o) const { return Nb(fVal != o.fVal); }
201 Nb operator < (const SkNf& o) const { return Nb(fVal < o.fVal); } 189 Nb operator < (const SkNf& o) const { return Nb(fVal < o.fVal); }
202 Nb operator > (const SkNf& o) const { return Nb(fVal > o.fVal); } 190 Nb operator > (const SkNf& o) const { return Nb(fVal > o.fVal); }
203 Nb operator <= (const SkNf& o) const { return Nb(fVal <= o.fVal); } 191 Nb operator <= (const SkNf& o) const { return Nb(fVal <= o.fVal); }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 typedef SkNf<2, double> Sk2d; 241 typedef SkNf<2, double> Sk2d;
254 typedef SkNf<2, SkScalar> Sk2s; 242 typedef SkNf<2, SkScalar> Sk2s;
255 243
256 typedef SkNf<4, float> Sk4f; 244 typedef SkNf<4, float> Sk4f;
257 typedef SkNf<4, double> Sk4d; 245 typedef SkNf<4, double> Sk4d;
258 typedef SkNf<4, SkScalar> Sk4s; 246 typedef SkNf<4, SkScalar> Sk4s;
259 247
260 typedef SkNi<4, uint16_t> Sk4h; 248 typedef SkNi<4, uint16_t> Sk4h;
261 typedef SkNi<8, uint16_t> Sk8h; 249 typedef SkNi<8, uint16_t> Sk8h;
262 250
263 typedef SkNi<4, int> Sk4i;
264
265 #endif//SkNx_DEFINED 251 #endif//SkNx_DEFINED
OLDNEW
« no previous file with comments | « gm/gradients.cpp ('k') | src/effects/gradients/SkRadialGradient.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698