|
1 From: David Zbarsky <dzbarsky@gmail.com> |
|
2 Bug 766017 - Fix some skia warnings r=gw280 |
|
3 |
|
4 diff --git a/gfx/skia/include/utils/mac/SkCGUtils.h b/gfx/skia/include/utils/mac/SkCGUtils.h |
|
5 --- a/gfx/skia/include/utils/mac/SkCGUtils.h |
|
6 +++ b/gfx/skia/include/utils/mac/SkCGUtils.h |
|
7 @@ -39,18 +39,16 @@ static inline CGImageRef SkCreateCGImage |
|
8 /** |
|
9 * Draw the bitmap into the specified CG context. The bitmap will be converted |
|
10 * to a CGImage using the generic RGB colorspace. (x,y) specifies the position |
|
11 * of the top-left corner of the bitmap. The bitmap is converted using the |
|
12 * colorspace returned by CGColorSpaceCreateDeviceRGB() |
|
13 */ |
|
14 void SkCGDrawBitmap(CGContextRef, const SkBitmap&, float x, float y); |
|
15 |
|
16 -bool SkPDFDocumentToBitmap(SkStream* stream, SkBitmap* output); |
|
17 - |
|
18 /** |
|
19 * Return a provider that wraps the specified stream. It will become an |
|
20 * owner of the stream, so the caller must still manage its ownership. |
|
21 * |
|
22 * To hand-off ownership of the stream to the provider, the caller must do |
|
23 * something like the following: |
|
24 * |
|
25 * SkStream* stream = new ...; |
|
26 diff --git a/gfx/skia/src/core/SkAAClip.cpp b/gfx/skia/src/core/SkAAClip.cpp |
|
27 --- a/gfx/skia/src/core/SkAAClip.cpp |
|
28 +++ b/gfx/skia/src/core/SkAAClip.cpp |
|
29 @@ -246,17 +246,17 @@ static void count_left_right_zeros(const |
|
30 zeros = 0; |
|
31 } |
|
32 row += 2; |
|
33 width -= n; |
|
34 } |
|
35 *riteZ = zeros; |
|
36 } |
|
37 |
|
38 -#ifdef SK_DEBUG |
|
39 +#if 0 |
|
40 static void test_count_left_right_zeros() { |
|
41 static bool gOnce; |
|
42 if (gOnce) { |
|
43 return; |
|
44 } |
|
45 gOnce = true; |
|
46 |
|
47 const uint8_t data0[] = { 0, 0, 10, 0xFF }; |
|
48 @@ -1319,22 +1319,16 @@ bool SkAAClip::setPath(const SkPath& pat |
|
49 } |
|
50 |
|
51 /////////////////////////////////////////////////////////////////////////////// |
|
52 |
|
53 typedef void (*RowProc)(SkAAClip::Builder&, int bottom, |
|
54 const uint8_t* rowA, const SkIRect& rectA, |
|
55 const uint8_t* rowB, const SkIRect& rectB); |
|
56 |
|
57 -static void sectRowProc(SkAAClip::Builder& builder, int bottom, |
|
58 - const uint8_t* rowA, const SkIRect& rectA, |
|
59 - const uint8_t* rowB, const SkIRect& rectB) { |
|
60 - |
|
61 -} |
|
62 - |
|
63 typedef U8CPU (*AlphaProc)(U8CPU alphaA, U8CPU alphaB); |
|
64 |
|
65 static U8CPU sectAlphaProc(U8CPU alphaA, U8CPU alphaB) { |
|
66 // Multiply |
|
67 return SkMulDiv255Round(alphaA, alphaB); |
|
68 } |
|
69 |
|
70 static U8CPU unionAlphaProc(U8CPU alphaA, U8CPU alphaB) { |
|
71 @@ -1429,31 +1423,16 @@ private: |
|
72 static void adjust_row(RowIter& iter, int& leftA, int& riteA, int rite) { |
|
73 if (rite == riteA) { |
|
74 iter.next(); |
|
75 leftA = iter.left(); |
|
76 riteA = iter.right(); |
|
77 } |
|
78 } |
|
79 |
|
80 -static bool intersect(int& min, int& max, int boundsMin, int boundsMax) { |
|
81 - SkASSERT(min < max); |
|
82 - SkASSERT(boundsMin < boundsMax); |
|
83 - if (min >= boundsMax || max <= boundsMin) { |
|
84 - return false; |
|
85 - } |
|
86 - if (min < boundsMin) { |
|
87 - min = boundsMin; |
|
88 - } |
|
89 - if (max > boundsMax) { |
|
90 - max = boundsMax; |
|
91 - } |
|
92 - return true; |
|
93 -} |
|
94 - |
|
95 static void operatorX(SkAAClip::Builder& builder, int lastY, |
|
96 RowIter& iterA, RowIter& iterB, |
|
97 AlphaProc proc, const SkIRect& bounds) { |
|
98 int leftA = iterA.left(); |
|
99 int riteA = iterA.right(); |
|
100 int leftB = iterB.left(); |
|
101 int riteB = iterB.right(); |
|
102 |
|
103 @@ -1970,34 +1949,33 @@ static void small_bzero(void* dst, size_ |
|
104 static inline uint8_t mergeOne(uint8_t value, unsigned alpha) { |
|
105 return SkMulDiv255Round(value, alpha); |
|
106 } |
|
107 static inline uint16_t mergeOne(uint16_t value, unsigned alpha) { |
|
108 unsigned r = SkGetPackedR16(value); |
|
109 unsigned g = SkGetPackedG16(value); |
|
110 unsigned b = SkGetPackedB16(value); |
|
111 return SkPackRGB16(SkMulDiv255Round(r, alpha), |
|
112 - SkMulDiv255Round(r, alpha), |
|
113 - SkMulDiv255Round(r, alpha)); |
|
114 + SkMulDiv255Round(g, alpha), |
|
115 + SkMulDiv255Round(b, alpha)); |
|
116 } |
|
117 static inline SkPMColor mergeOne(SkPMColor value, unsigned alpha) { |
|
118 unsigned a = SkGetPackedA32(value); |
|
119 unsigned r = SkGetPackedR32(value); |
|
120 unsigned g = SkGetPackedG32(value); |
|
121 unsigned b = SkGetPackedB32(value); |
|
122 return SkPackARGB32(SkMulDiv255Round(a, alpha), |
|
123 SkMulDiv255Round(r, alpha), |
|
124 SkMulDiv255Round(g, alpha), |
|
125 SkMulDiv255Round(b, alpha)); |
|
126 } |
|
127 |
|
128 template <typename T> void mergeT(const T* SK_RESTRICT src, int srcN, |
|
129 const uint8_t* SK_RESTRICT row, int rowN, |
|
130 T* SK_RESTRICT dst) { |
|
131 - SkDEBUGCODE(int accumulated = 0;) |
|
132 for (;;) { |
|
133 SkASSERT(rowN > 0); |
|
134 SkASSERT(srcN > 0); |
|
135 |
|
136 int n = SkMin32(rowN, srcN); |
|
137 unsigned rowA = row[1]; |
|
138 if (0xFF == rowA) { |
|
139 small_memcpy(dst, src, n * sizeof(T)); |
|
140 diff --git a/gfx/skia/src/core/SkBlitMask_D32.cpp b/gfx/skia/src/core/SkBlitMask_D32.cpp |
|
141 --- a/gfx/skia/src/core/SkBlitMask_D32.cpp |
|
142 +++ b/gfx/skia/src/core/SkBlitMask_D32.cpp |
|
143 @@ -268,107 +268,49 @@ bool SkBlitMask::BlitColor(const SkBitma |
|
144 return true; |
|
145 } |
|
146 return false; |
|
147 } |
|
148 |
|
149 /////////////////////////////////////////////////////////////////////////////// |
|
150 /////////////////////////////////////////////////////////////////////////////// |
|
151 |
|
152 -static void BW_RowProc_Blend(SkPMColor* SK_RESTRICT dst, |
|
153 - const uint8_t* SK_RESTRICT mask, |
|
154 - const SkPMColor* SK_RESTRICT src, int count) { |
|
155 - int i, octuple = (count + 7) >> 3; |
|
156 - for (i = 0; i < octuple; ++i) { |
|
157 - int m = *mask++; |
|
158 - if (m & 0x80) { dst[0] = SkPMSrcOver(src[0], dst[0]); } |
|
159 - if (m & 0x40) { dst[1] = SkPMSrcOver(src[1], dst[1]); } |
|
160 - if (m & 0x20) { dst[2] = SkPMSrcOver(src[2], dst[2]); } |
|
161 - if (m & 0x10) { dst[3] = SkPMSrcOver(src[3], dst[3]); } |
|
162 - if (m & 0x08) { dst[4] = SkPMSrcOver(src[4], dst[4]); } |
|
163 - if (m & 0x04) { dst[5] = SkPMSrcOver(src[5], dst[5]); } |
|
164 - if (m & 0x02) { dst[6] = SkPMSrcOver(src[6], dst[6]); } |
|
165 - if (m & 0x01) { dst[7] = SkPMSrcOver(src[7], dst[7]); } |
|
166 - src += 8; |
|
167 - dst += 8; |
|
168 - } |
|
169 - count &= 7; |
|
170 - if (count > 0) { |
|
171 - int m = *mask; |
|
172 - do { |
|
173 - if (m & 0x80) { dst[0] = SkPMSrcOver(src[0], dst[0]); } |
|
174 - m <<= 1; |
|
175 - src += 1; |
|
176 - dst += 1; |
|
177 - } while (--count > 0); |
|
178 - } |
|
179 -} |
|
180 - |
|
181 -static void BW_RowProc_Opaque(SkPMColor* SK_RESTRICT dst, |
|
182 - const uint8_t* SK_RESTRICT mask, |
|
183 - const SkPMColor* SK_RESTRICT src, int count) { |
|
184 - int i, octuple = (count + 7) >> 3; |
|
185 - for (i = 0; i < octuple; ++i) { |
|
186 - int m = *mask++; |
|
187 - if (m & 0x80) { dst[0] = src[0]; } |
|
188 - if (m & 0x40) { dst[1] = src[1]; } |
|
189 - if (m & 0x20) { dst[2] = src[2]; } |
|
190 - if (m & 0x10) { dst[3] = src[3]; } |
|
191 - if (m & 0x08) { dst[4] = src[4]; } |
|
192 - if (m & 0x04) { dst[5] = src[5]; } |
|
193 - if (m & 0x02) { dst[6] = src[6]; } |
|
194 - if (m & 0x01) { dst[7] = src[7]; } |
|
195 - src += 8; |
|
196 - dst += 8; |
|
197 - } |
|
198 - count &= 7; |
|
199 - if (count > 0) { |
|
200 - int m = *mask; |
|
201 - do { |
|
202 - if (m & 0x80) { dst[0] = SkPMSrcOver(src[0], dst[0]); } |
|
203 - m <<= 1; |
|
204 - src += 1; |
|
205 - dst += 1; |
|
206 - } while (--count > 0); |
|
207 - } |
|
208 -} |
|
209 - |
|
210 static void A8_RowProc_Blend(SkPMColor* SK_RESTRICT dst, |
|
211 const uint8_t* SK_RESTRICT mask, |
|
212 const SkPMColor* SK_RESTRICT src, int count) { |
|
213 for (int i = 0; i < count; ++i) { |
|
214 if (mask[i]) { |
|
215 dst[i] = SkBlendARGB32(src[i], dst[i], mask[i]); |
|
216 } |
|
217 } |
|
218 } |
|
219 |
|
220 // expand the steps that SkAlphaMulQ performs, but this way we can |
|
221 -// exand.. add.. combine |
|
222 +// expand.. add.. combine |
|
223 // instead of |
|
224 // expand..combine add expand..combine |
|
225 // |
|
226 #define EXPAND0(v, m, s) ((v) & (m)) * (s) |
|
227 #define EXPAND1(v, m, s) (((v) >> 8) & (m)) * (s) |
|
228 #define COMBINE(e0, e1, m) ((((e0) >> 8) & (m)) | ((e1) & ~(m))) |
|
229 |
|
230 static void A8_RowProc_Opaque(SkPMColor* SK_RESTRICT dst, |
|
231 const uint8_t* SK_RESTRICT mask, |
|
232 const SkPMColor* SK_RESTRICT src, int count) { |
|
233 - const uint32_t rbmask = gMask_00FF00FF; |
|
234 for (int i = 0; i < count; ++i) { |
|
235 int m = mask[i]; |
|
236 if (m) { |
|
237 m += (m >> 7); |
|
238 #if 1 |
|
239 // this is slightly slower than the expand/combine version, but it |
|
240 // is much closer to the old results, so we use it for now to reduce |
|
241 // rebaselining. |
|
242 dst[i] = SkAlphaMulQ(src[i], m) + SkAlphaMulQ(dst[i], 256 - m); |
|
243 #else |
|
244 + const uint32_t rbmask = gMask_00FF00FF; |
|
245 uint32_t v = src[i]; |
|
246 uint32_t s0 = EXPAND0(v, rbmask, m); |
|
247 uint32_t s1 = EXPAND1(v, rbmask, m); |
|
248 v = dst[i]; |
|
249 uint32_t d0 = EXPAND0(v, rbmask, m); |
|
250 uint32_t d1 = EXPAND1(v, rbmask, m); |
|
251 dst[i] = COMBINE(s0 + d0, s1 + d1, rbmask); |
|
252 #endif |
|
253 @@ -559,17 +501,17 @@ SkBlitMask::RowProc SkBlitMask::RowFacto |
|
254 // make this opt-in until chrome can rebaseline |
|
255 RowProc proc = PlatformRowProcs(config, format, flags); |
|
256 if (proc) { |
|
257 return proc; |
|
258 } |
|
259 |
|
260 static const RowProc gProcs[] = { |
|
261 // need X coordinate to handle BW |
|
262 - NULL, NULL, //(RowProc)BW_RowProc_Blend, (RowProc)BW_RowProc_Opaque, |
|
263 + NULL, NULL, |
|
264 (RowProc)A8_RowProc_Blend, (RowProc)A8_RowProc_Opaque, |
|
265 (RowProc)LCD16_RowProc_Blend, (RowProc)LCD16_RowProc_Opaque, |
|
266 (RowProc)LCD32_RowProc_Blend, (RowProc)LCD32_RowProc_Opaque, |
|
267 }; |
|
268 |
|
269 int index; |
|
270 switch (config) { |
|
271 case SkBitmap::kARGB_8888_Config: |
|
272 diff --git a/gfx/skia/src/core/SkConcaveToTriangles.cpp b/gfx/skia/src/core/SkConcaveToTriangles.cpp |
|
273 --- a/gfx/skia/src/core/SkConcaveToTriangles.cpp |
|
274 +++ b/gfx/skia/src/core/SkConcaveToTriangles.cpp |
|
275 @@ -37,17 +37,16 @@ |
|
276 #include "SkTDArray.h" |
|
277 #include "SkGeometry.h" |
|
278 #include "SkTSort.h" |
|
279 |
|
280 // This is used to prevent runaway code bugs, and can probably be removed after |
|
281 // the code has been proven robust. |
|
282 #define kMaxCount 1000 |
|
283 |
|
284 -#define DEBUG |
|
285 #ifdef DEBUG |
|
286 //------------------------------------------------------------------------------ |
|
287 // Debugging support |
|
288 //------------------------------------------------------------------------------ |
|
289 |
|
290 #include <cstdio> |
|
291 #include <stdarg.h> |
|
292 |
|
293 diff --git a/gfx/skia/src/core/SkPath.cpp b/gfx/skia/src/core/SkPath.cpp |
|
294 --- a/gfx/skia/src/core/SkPath.cpp |
|
295 +++ b/gfx/skia/src/core/SkPath.cpp |
|
296 @@ -469,17 +469,16 @@ void SkPath::incReserve(U16CPU inc) { |
|
297 fPts.setReserve(fPts.count() + inc); |
|
298 |
|
299 SkDEBUGCODE(this->validate();) |
|
300 } |
|
301 |
|
302 void SkPath::moveTo(SkScalar x, SkScalar y) { |
|
303 SkDEBUGCODE(this->validate();) |
|
304 |
|
305 - int vc = fVerbs.count(); |
|
306 SkPoint* pt; |
|
307 |
|
308 // remember our index |
|
309 fLastMoveToIndex = fPts.count(); |
|
310 |
|
311 pt = fPts.append(); |
|
312 *fVerbs.append() = kMove_Verb; |
|
313 pt->set(x, y); |
|
314 @@ -1163,17 +1162,16 @@ void SkPath::reversePathTo(const SkPath& |
|
315 } |
|
316 pts -= gPtsInVerb[verbs[i]]; |
|
317 } |
|
318 } |
|
319 |
|
320 void SkPath::reverseAddPath(const SkPath& src) { |
|
321 this->incReserve(src.fPts.count()); |
|
322 |
|
323 - const SkPoint* startPts = src.fPts.begin(); |
|
324 const SkPoint* pts = src.fPts.end(); |
|
325 const uint8_t* startVerbs = src.fVerbs.begin(); |
|
326 const uint8_t* verbs = src.fVerbs.end(); |
|
327 |
|
328 fIsOval = false; |
|
329 |
|
330 bool needMove = true; |
|
331 bool needClose = false; |
|
332 diff --git a/gfx/skia/src/core/SkRegion.cpp b/gfx/skia/src/core/SkRegion.cpp |
|
333 --- a/gfx/skia/src/core/SkRegion.cpp |
|
334 +++ b/gfx/skia/src/core/SkRegion.cpp |
|
335 @@ -920,20 +920,16 @@ static int operate(const SkRegion::RunTy |
|
336 /* Given count RunTypes in a complex region, return the worst case number of |
|
337 logical intervals that represents (i.e. number of rects that would be |
|
338 returned from the iterator). |
|
339 |
|
340 We could just return count/2, since there must be at least 2 values per |
|
341 interval, but we can first trim off the const overhead of the initial TOP |
|
342 value, plus the final BOTTOM + 2 sentinels. |
|
343 */ |
|
344 -static int count_to_intervals(int count) { |
|
345 - SkASSERT(count >= 6); // a single rect is 6 values |
|
346 - return (count - 4) >> 1; |
|
347 -} |
|
348 |
|
349 /* Given a number of intervals, what is the worst case representation of that |
|
350 many intervals? |
|
351 |
|
352 Worst case (from a storage perspective), is a vertical stack of single |
|
353 intervals: TOP + N * (BOTTOM INTERVALCOUNT LEFT RIGHT SENTINEL) + SENTINEL |
|
354 */ |
|
355 static int intervals_to_count(int intervals) { |
|
356 diff --git a/gfx/skia/src/core/SkScalerContext.cpp b/gfx/skia/src/core/SkScalerContext.cpp |
|
357 --- a/gfx/skia/src/core/SkScalerContext.cpp |
|
358 +++ b/gfx/skia/src/core/SkScalerContext.cpp |
|
359 @@ -336,44 +336,16 @@ SK_ERROR: |
|
360 glyph->fTop = 0; |
|
361 glyph->fWidth = 0; |
|
362 glyph->fHeight = 0; |
|
363 // put a valid value here, in case it was earlier set to |
|
364 // MASK_FORMAT_JUST_ADVANCE |
|
365 glyph->fMaskFormat = fRec.fMaskFormat; |
|
366 } |
|
367 |
|
368 -static bool isLCD(const SkScalerContext::Rec& rec) { |
|
369 - return SkMask::kLCD16_Format == rec.fMaskFormat || |
|
370 - SkMask::kLCD32_Format == rec.fMaskFormat; |
|
371 -} |
|
372 - |
|
373 -static uint16_t a8_to_rgb565(unsigned a8) { |
|
374 - return SkPackRGB16(a8 >> 3, a8 >> 2, a8 >> 3); |
|
375 -} |
|
376 - |
|
377 -static void copyToLCD16(const SkBitmap& src, const SkMask& dst) { |
|
378 - SkASSERT(SkBitmap::kA8_Config == src.config()); |
|
379 - SkASSERT(SkMask::kLCD16_Format == dst.fFormat); |
|
380 - |
|
381 - const int width = dst.fBounds.width(); |
|
382 - const int height = dst.fBounds.height(); |
|
383 - const uint8_t* srcP = src.getAddr8(0, 0); |
|
384 - size_t srcRB = src.rowBytes(); |
|
385 - uint16_t* dstP = (uint16_t*)dst.fImage; |
|
386 - size_t dstRB = dst.fRowBytes; |
|
387 - for (int y = 0; y < height; ++y) { |
|
388 - for (int x = 0; x < width; ++x) { |
|
389 - dstP[x] = a8_to_rgb565(srcP[x]); |
|
390 - } |
|
391 - srcP += srcRB; |
|
392 - dstP = (uint16_t*)((char*)dstP + dstRB); |
|
393 - } |
|
394 -} |
|
395 - |
|
396 #define SK_FREETYPE_LCD_LERP 160 |
|
397 |
|
398 static int lerp(int start, int end) { |
|
399 SkASSERT((unsigned)SK_FREETYPE_LCD_LERP <= 256); |
|
400 return start + ((end - start) * (SK_FREETYPE_LCD_LERP) >> 8); |
|
401 } |
|
402 |
|
403 static uint16_t packLCD16(unsigned r, unsigned g, unsigned b) { |
|
404 diff --git a/gfx/skia/src/core/SkScan_AntiPath.cpp b/gfx/skia/src/core/SkScan_AntiPath.cpp |
|
405 --- a/gfx/skia/src/core/SkScan_AntiPath.cpp |
|
406 +++ b/gfx/skia/src/core/SkScan_AntiPath.cpp |
|
407 @@ -230,52 +230,16 @@ void SuperBlitter::blitH(int x, int y, i |
|
408 fOffsetX); |
|
409 |
|
410 #ifdef SK_DEBUG |
|
411 fRuns.assertValid(y & MASK, (1 << (8 - SHIFT))); |
|
412 fCurrX = x + width; |
|
413 #endif |
|
414 } |
|
415 |
|
416 -static void set_left_rite_runs(SkAlphaRuns& runs, int ileft, U8CPU leftA, |
|
417 - int n, U8CPU riteA) { |
|
418 - SkASSERT(leftA <= 0xFF); |
|
419 - SkASSERT(riteA <= 0xFF); |
|
420 - |
|
421 - int16_t* run = runs.fRuns; |
|
422 - uint8_t* aa = runs.fAlpha; |
|
423 - |
|
424 - if (ileft > 0) { |
|
425 - run[0] = ileft; |
|
426 - aa[0] = 0; |
|
427 - run += ileft; |
|
428 - aa += ileft; |
|
429 - } |
|
430 - |
|
431 - SkASSERT(leftA < 0xFF); |
|
432 - if (leftA > 0) { |
|
433 - *run++ = 1; |
|
434 - *aa++ = leftA; |
|
435 - } |
|
436 - |
|
437 - if (n > 0) { |
|
438 - run[0] = n; |
|
439 - aa[0] = 0xFF; |
|
440 - run += n; |
|
441 - aa += n; |
|
442 - } |
|
443 - |
|
444 - SkASSERT(riteA < 0xFF); |
|
445 - if (riteA > 0) { |
|
446 - *run++ = 1; |
|
447 - *aa++ = riteA; |
|
448 - } |
|
449 - run[0] = 0; |
|
450 -} |
|
451 - |
|
452 void SuperBlitter::blitRect(int x, int y, int width, int height) { |
|
453 SkASSERT(width > 0); |
|
454 SkASSERT(height > 0); |
|
455 |
|
456 // blit leading rows |
|
457 while ((y & MASK)) { |
|
458 this->blitH(x, y++, width); |
|
459 if (--height <= 0) { |
|
460 diff --git a/gfx/skia/src/effects/SkGradientShader.cpp b/gfx/skia/src/effects/SkGradientShader.cpp |
|
461 --- a/gfx/skia/src/effects/SkGradientShader.cpp |
|
462 +++ b/gfx/skia/src/effects/SkGradientShader.cpp |
|
463 @@ -865,45 +865,16 @@ bool Linear_Gradient::setContext(const S |
|
464 } while (0) |
|
465 |
|
466 namespace { |
|
467 |
|
468 typedef void (*LinearShadeProc)(TileProc proc, SkFixed dx, SkFixed fx, |
|
469 SkPMColor* dstC, const SkPMColor* cache, |
|
470 int toggle, int count); |
|
471 |
|
472 -// This function is deprecated, and will be replaced by |
|
473 -// shadeSpan_linear_vertical_lerp() once Chrome has been weaned off of it. |
|
474 -void shadeSpan_linear_vertical(TileProc proc, SkFixed dx, SkFixed fx, |
|
475 - SkPMColor* SK_RESTRICT dstC, |
|
476 - const SkPMColor* SK_RESTRICT cache, |
|
477 - int toggle, int count) { |
|
478 - if (proc == clamp_tileproc) { |
|
479 - // Read out clamp values from beginning/end of the cache. No need to lerp |
|
480 - // or dither |
|
481 - if (fx < 0) { |
|
482 - sk_memset32(dstC, cache[-1], count); |
|
483 - return; |
|
484 - } else if (fx > 0xFFFF) { |
|
485 - sk_memset32(dstC, cache[Gradient_Shader::kCache32Count * 2], count); |
|
486 - return; |
|
487 - } |
|
488 - } |
|
489 - |
|
490 - // We're a vertical gradient, so no change in a span. |
|
491 - // If colors change sharply across the gradient, dithering is |
|
492 - // insufficient (it subsamples the color space) and we need to lerp. |
|
493 - unsigned fullIndex = proc(fx); |
|
494 - unsigned fi = fullIndex >> (16 - Gradient_Shader::kCache32Bits); |
|
495 - sk_memset32_dither(dstC, |
|
496 - cache[toggle + fi], |
|
497 - cache[(toggle ^ Gradient_Shader::kDitherStride32) + fi], |
|
498 - count); |
|
499 -} |
|
500 - |
|
501 // Linear interpolation (lerp) is unnecessary if there are no sharp |
|
502 // discontinuities in the gradient - which must be true if there are |
|
503 // only 2 colors - but it's cheap. |
|
504 void shadeSpan_linear_vertical_lerp(TileProc proc, SkFixed dx, SkFixed fx, |
|
505 SkPMColor* SK_RESTRICT dstC, |
|
506 const SkPMColor* SK_RESTRICT cache, |
|
507 int toggle, int count) { |
|
508 if (proc == clamp_tileproc) { |
|
509 @@ -2131,16 +2102,18 @@ protected: |
|
510 buffer.writePoint(fCenter); |
|
511 } |
|
512 |
|
513 private: |
|
514 typedef Gradient_Shader INHERITED; |
|
515 const SkPoint fCenter; |
|
516 }; |
|
517 |
|
518 +#ifndef SK_SCALAR_IS_FLOAT |
|
519 + |
|
520 #ifdef COMPUTE_SWEEP_TABLE |
|
521 #define PI 3.14159265 |
|
522 static bool gSweepTableReady; |
|
523 static uint8_t gSweepTable[65]; |
|
524 |
|
525 /* Our table stores precomputed values for atan: [0...1] -> [0..PI/4] |
|
526 We scale the results to [0..32] |
|
527 */ |
|
528 @@ -2168,20 +2141,23 @@ static const uint8_t gSweepTable[] = { |
|
529 10, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, |
|
530 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, |
|
531 26, 27, 27, 27, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, |
|
532 32 |
|
533 }; |
|
534 static const uint8_t* build_sweep_table() { return gSweepTable; } |
|
535 #endif |
|
536 |
|
537 +#endif |
|
538 + |
|
539 // divide numer/denom, with a bias of 6bits. Assumes numer <= denom |
|
540 // and denom != 0. Since our table is 6bits big (+1), this is a nice fit. |
|
541 // Same as (but faster than) SkFixedDiv(numer, denom) >> 10 |
|
542 |
|
543 +#ifndef SK_SCALAR_IS_FLOAT |
|
544 //unsigned div_64(int numer, int denom); |
|
545 static unsigned div_64(int numer, int denom) { |
|
546 SkASSERT(numer <= denom); |
|
547 SkASSERT(numer > 0); |
|
548 SkASSERT(denom > 0); |
|
549 |
|
550 int nbits = SkCLZ(numer); |
|
551 int dbits = SkCLZ(denom); |
|
552 @@ -2294,16 +2270,17 @@ static unsigned atan_0_90(SkFixed y, SkF |
|
553 result = 64 - result; |
|
554 // pin to 63 |
|
555 result -= result >> 6; |
|
556 } |
|
557 |
|
558 SkASSERT(result <= 63); |
|
559 return result; |
|
560 } |
|
561 +#endif |
|
562 |
|
563 // returns angle in a circle [0..2PI) -> [0..255] |
|
564 #ifdef SK_SCALAR_IS_FLOAT |
|
565 static unsigned SkATan2_255(float y, float x) { |
|
566 // static const float g255Over2PI = 255 / (2 * SK_ScalarPI); |
|
567 static const float g255Over2PI = 40.584510488433314f; |
|
568 |
|
569 float result = sk_float_atan2(y, x); |
|
570 diff --git a/gfx/skia/src/opts/SkBlitRect_opts_SSE2.cpp b/gfx/skia/src/opts/SkBlitRect_opts_SSE2.cpp |
|
571 --- a/gfx/skia/src/opts/SkBlitRect_opts_SSE2.cpp |
|
572 +++ b/gfx/skia/src/opts/SkBlitRect_opts_SSE2.cpp |
|
573 @@ -112,17 +112,17 @@ void BlitRect32_OpaqueWide_SSE2(SkPMColo |
|
574 } |
|
575 |
|
576 void ColorRect32_SSE2(SkPMColor* destination, |
|
577 int width, int height, |
|
578 size_t rowBytes, uint32_t color) { |
|
579 if (0 == height || 0 == width || 0 == color) { |
|
580 return; |
|
581 } |
|
582 - unsigned colorA = SkGetPackedA32(color); |
|
583 + //unsigned colorA = SkGetPackedA32(color); |
|
584 //if (255 == colorA) { |
|
585 //if (width < 31) { |
|
586 //BlitRect32_OpaqueNarrow_SSE2(destination, width, height, |
|
587 //rowBytes, color); |
|
588 //} else { |
|
589 //BlitRect32_OpaqueWide_SSE2(destination, width, height, |
|
590 //rowBytes, color); |
|
591 //} |
|
592 diff --git a/gfx/skia/src/ports/SkFontHost_mac_coretext.cpp b/gfx/skia/src/ports/SkFontHost_mac_coretext.cpp |
|
593 --- a/gfx/skia/src/ports/SkFontHost_mac_coretext.cpp |
|
594 +++ b/gfx/skia/src/ports/SkFontHost_mac_coretext.cpp |
|
595 @@ -75,20 +75,16 @@ static CGFloat CGRectGetMinY_inline(cons |
|
596 static CGFloat CGRectGetMaxY_inline(const CGRect& rect) { |
|
597 return rect.origin.y + rect.size.height; |
|
598 } |
|
599 |
|
600 static CGFloat CGRectGetWidth_inline(const CGRect& rect) { |
|
601 return rect.size.width; |
|
602 } |
|
603 |
|
604 -static CGFloat CGRectGetHeight(const CGRect& rect) { |
|
605 - return rect.size.height; |
|
606 -} |
|
607 - |
|
608 /////////////////////////////////////////////////////////////////////////////// |
|
609 |
|
610 static void sk_memset_rect32(uint32_t* ptr, uint32_t value, size_t width, |
|
611 size_t height, size_t rowBytes) { |
|
612 SkASSERT(width); |
|
613 SkASSERT(width * sizeof(uint32_t) <= rowBytes); |
|
614 |
|
615 if (width >= 32) { |
|
616 @@ -125,28 +121,30 @@ static void sk_memset_rect32(uint32_t* p |
|
617 *ptr++ = value; |
|
618 } while (--w > 0); |
|
619 ptr = (uint32_t*)((char*)ptr + rowBytes); |
|
620 height -= 1; |
|
621 } |
|
622 } |
|
623 } |
|
624 |
|
625 +#if 0 |
|
626 // Potentially this should be made (1) public (2) optimized when width is small. |
|
627 // Also might want 16 and 32 bit version |
|
628 // |
|
629 static void sk_memset_rect(void* ptr, U8CPU byte, size_t width, size_t height, |
|
630 size_t rowBytes) { |
|
631 uint8_t* dst = (uint8_t*)ptr; |
|
632 while (height) { |
|
633 memset(dst, byte, width); |
|
634 dst += rowBytes; |
|
635 height -= 1; |
|
636 } |
|
637 } |
|
638 +#endif |
|
639 |
|
640 #include <sys/utsname.h> |
|
641 |
|
642 typedef uint32_t CGRGBPixel; |
|
643 |
|
644 static unsigned CGRGBPixel_getAlpha(CGRGBPixel pixel) { |
|
645 return pixel & 0xFF; |
|
646 } |
|
647 @@ -250,23 +248,16 @@ static CGAffineTransform MatrixToCGAffin |
|
648 return CGAffineTransformMake(ScalarToCG(matrix[SkMatrix::kMScaleX]) * sx, |
|
649 -ScalarToCG(matrix[SkMatrix::kMSkewY]) * sy, |
|
650 -ScalarToCG(matrix[SkMatrix::kMSkewX]) * sx, |
|
651 ScalarToCG(matrix[SkMatrix::kMScaleY]) * sy, |
|
652 ScalarToCG(matrix[SkMatrix::kMTransX]) * sx, |
|
653 ScalarToCG(matrix[SkMatrix::kMTransY]) * sy); |
|
654 } |
|
655 |
|
656 -static void CGAffineTransformToMatrix(const CGAffineTransform& xform, SkMatrix* matrix) { |
|
657 - matrix->setAll( |
|
658 - CGToScalar(xform.a), CGToScalar(xform.c), CGToScalar(xform.tx), |
|
659 - CGToScalar(xform.b), CGToScalar(xform.d), CGToScalar(xform.ty), |
|
660 - 0, 0, SK_Scalar1); |
|
661 -} |
|
662 - |
|
663 static SkScalar getFontScale(CGFontRef cgFont) { |
|
664 int unitsPerEm = CGFontGetUnitsPerEm(cgFont); |
|
665 return SkScalarInvert(SkIntToScalar(unitsPerEm)); |
|
666 } |
|
667 |
|
668 /////////////////////////////////////////////////////////////////////////////// |
|
669 |
|
670 #define BITMAP_INFO_RGB (kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host) |
|
671 @@ -1075,16 +1066,17 @@ static const uint8_t* getInverseTable(bo |
|
672 if (!gInited) { |
|
673 build_power_table(gWhiteTable, 1.5f); |
|
674 build_power_table(gTable, 2.2f); |
|
675 gInited = true; |
|
676 } |
|
677 return isWhite ? gWhiteTable : gTable; |
|
678 } |
|
679 |
|
680 +#ifdef SK_USE_COLOR_LUMINANCE |
|
681 static const uint8_t* getGammaTable(U8CPU luminance) { |
|
682 static uint8_t gGammaTables[4][256]; |
|
683 static bool gInited; |
|
684 if (!gInited) { |
|
685 #if 1 |
|
686 float start = 1.1; |
|
687 float stop = 2.1; |
|
688 for (int i = 0; i < 4; ++i) { |
|
689 @@ -1097,45 +1089,49 @@ static const uint8_t* getGammaTable(U8CP |
|
690 build_power_table(gGammaTables[2], 1); |
|
691 build_power_table(gGammaTables[3], 1); |
|
692 #endif |
|
693 gInited = true; |
|
694 } |
|
695 SkASSERT(0 == (luminance >> 8)); |
|
696 return gGammaTables[luminance >> 6]; |
|
697 } |
|
698 +#endif |
|
699 |
|
700 +#ifndef SK_USE_COLOR_LUMINANCE |
|
701 static void invertGammaMask(bool isWhite, CGRGBPixel rgb[], int width, |
|
702 int height, size_t rb) { |
|
703 const uint8_t* table = getInverseTable(isWhite); |
|
704 for (int y = 0; y < height; ++y) { |
|
705 for (int x = 0; x < width; ++x) { |
|
706 uint32_t c = rgb[x]; |
|
707 int r = (c >> 16) & 0xFF; |
|
708 int g = (c >> 8) & 0xFF; |
|
709 int b = (c >> 0) & 0xFF; |
|
710 rgb[x] = (table[r] << 16) | (table[g] << 8) | table[b]; |
|
711 } |
|
712 rgb = (CGRGBPixel*)((char*)rgb + rb); |
|
713 } |
|
714 } |
|
715 +#endif |
|
716 |
|
717 static void cgpixels_to_bits(uint8_t dst[], const CGRGBPixel src[], int count) { |
|
718 while (count > 0) { |
|
719 uint8_t mask = 0; |
|
720 for (int i = 7; i >= 0; --i) { |
|
721 mask |= (CGRGBPixel_getAlpha(*src++) >> 7) << i; |
|
722 if (0 == --count) { |
|
723 break; |
|
724 } |
|
725 } |
|
726 *dst++ = mask; |
|
727 } |
|
728 } |
|
729 |
|
730 +#ifdef SK_USE_COLOR_LUMINANCE |
|
731 static int lerpScale(int dst, int src, int scale) { |
|
732 return dst + (scale * (src - dst) >> 23); |
|
733 } |
|
734 |
|
735 static CGRGBPixel lerpPixel(CGRGBPixel dst, CGRGBPixel src, |
|
736 int scaleR, int scaleG, int scaleB) { |
|
737 int sr = (src >> 16) & 0xFF; |
|
738 int sg = (src >> 8) & 0xFF; |
|
739 @@ -1147,37 +1143,31 @@ static CGRGBPixel lerpPixel(CGRGBPixel d |
|
740 int rr = lerpScale(dr, sr, scaleR); |
|
741 int rg = lerpScale(dg, sg, scaleG); |
|
742 int rb = lerpScale(db, sb, scaleB); |
|
743 return (rr << 16) | (rg << 8) | rb; |
|
744 } |
|
745 |
|
746 static void lerpPixels(CGRGBPixel dst[], const CGRGBPixel src[], int width, |
|
747 int height, int rowBytes, int lumBits) { |
|
748 -#ifdef SK_USE_COLOR_LUMINANCE |
|
749 int scaleR = (1 << 23) * SkColorGetR(lumBits) / 0xFF; |
|
750 int scaleG = (1 << 23) * SkColorGetG(lumBits) / 0xFF; |
|
751 int scaleB = (1 << 23) * SkColorGetB(lumBits) / 0xFF; |
|
752 -#else |
|
753 - int scale = (1 << 23) * lumBits / SkScalerContext::kLuminance_Max; |
|
754 - int scaleR = scale; |
|
755 - int scaleG = scale; |
|
756 - int scaleB = scale; |
|
757 -#endif |
|
758 |
|
759 for (int y = 0; y < height; ++y) { |
|
760 for (int x = 0; x < width; ++x) { |
|
761 // bit-not the src, since it was drawn from black, so we need the |
|
762 // compliment of those bits |
|
763 dst[x] = lerpPixel(dst[x], ~src[x], scaleR, scaleG, scaleB); |
|
764 } |
|
765 src = (CGRGBPixel*)((char*)src + rowBytes); |
|
766 dst = (CGRGBPixel*)((char*)dst + rowBytes); |
|
767 } |
|
768 } |
|
769 +#endif |
|
770 |
|
771 #if 1 |
|
772 static inline int r32_to_16(int x) { return SkR32ToR16(x); } |
|
773 static inline int g32_to_16(int x) { return SkG32ToG16(x); } |
|
774 static inline int b32_to_16(int x) { return SkB32ToB16(x); } |
|
775 #else |
|
776 static inline int round8to5(int x) { |
|
777 return (x + 3 - (x >> 5) + (x >> 7)) >> 3; |
|
778 @@ -1212,22 +1202,21 @@ static inline uint32_t rgb_to_lcd32(CGRG |
|
779 return SkPackARGB32(0xFF, r, g, b); |
|
780 } |
|
781 |
|
782 #define BLACK_LUMINANCE_LIMIT 0x40 |
|
783 #define WHITE_LUMINANCE_LIMIT 0xA0 |
|
784 |
|
785 void SkScalerContext_Mac::generateImage(const SkGlyph& glyph) { |
|
786 CGGlyph cgGlyph = (CGGlyph) glyph.getGlyphID(fBaseGlyphCount); |
|
787 - |
|
788 const bool isLCD = isLCDFormat(glyph.fMaskFormat); |
|
789 +#ifdef SK_USE_COLOR_LUMINANCE |
|
790 const bool isBW = SkMask::kBW_Format == glyph.fMaskFormat; |
|
791 const bool isA8 = !isLCD && !isBW; |
|
792 - |
|
793 -#ifdef SK_USE_COLOR_LUMINANCE |
|
794 + |
|
795 unsigned lumBits = fRec.getLuminanceColor(); |
|
796 uint32_t xorMask = 0; |
|
797 |
|
798 if (isA8) { |
|
799 // for A8, we just want a component (they're all the same) |
|
800 lumBits = SkColorGetR(lumBits); |
|
801 } |
|
802 #else |
|
803 diff --git a/gfx/skia/src/utils/mac/SkCreateCGImageRef.cpp b/gfx/skia/src/utils/mac/SkCreateCGImageRef.cpp |
|
804 --- a/gfx/skia/src/utils/mac/SkCreateCGImageRef.cpp |
|
805 +++ b/gfx/skia/src/utils/mac/SkCreateCGImageRef.cpp |
|
806 @@ -163,59 +163,8 @@ private: |
|
807 CGPDFDocumentRef fDoc; |
|
808 }; |
|
809 |
|
810 static void CGDataProviderReleaseData_FromMalloc(void*, const void* data, |
|
811 size_t size) { |
|
812 sk_free((void*)data); |
|
813 } |
|
814 |
|
815 -bool SkPDFDocumentToBitmap(SkStream* stream, SkBitmap* output) { |
|
816 - size_t size = stream->getLength(); |
|
817 - void* ptr = sk_malloc_throw(size); |
|
818 - stream->read(ptr, size); |
|
819 - CGDataProviderRef data = CGDataProviderCreateWithData(NULL, ptr, size, |
|
820 - CGDataProviderReleaseData_FromMalloc); |
|
821 - if (NULL == data) { |
|
822 - return false; |
|
823 - } |
|
824 - |
|
825 - CGPDFDocumentRef pdf = CGPDFDocumentCreateWithProvider(data); |
|
826 - CGDataProviderRelease(data); |
|
827 - if (NULL == pdf) { |
|
828 - return false; |
|
829 - } |
|
830 - SkAutoPDFRelease releaseMe(pdf); |
|
831 - |
|
832 - CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1); |
|
833 - if (NULL == page) { |
|
834 - return false; |
|
835 - } |
|
836 - |
|
837 - CGRect bounds = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); |
|
838 - |
|
839 - int w = (int)CGRectGetWidth(bounds); |
|
840 - int h = (int)CGRectGetHeight(bounds); |
|
841 - |
|
842 - SkBitmap bitmap; |
|
843 - bitmap.setConfig(SkBitmap::kARGB_8888_Config, w, h); |
|
844 - bitmap.allocPixels(); |
|
845 - bitmap.eraseColor(SK_ColorWHITE); |
|
846 - |
|
847 - size_t bitsPerComponent; |
|
848 - CGBitmapInfo info; |
|
849 - getBitmapInfo(bitmap, &bitsPerComponent, &info, NULL); |
|
850 - |
|
851 - CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB(); |
|
852 - CGContextRef ctx = CGBitmapContextCreate(bitmap.getPixels(), w, h, |
|
853 - bitsPerComponent, bitmap.rowBytes(), |
|
854 - cs, info); |
|
855 - CGColorSpaceRelease(cs); |
|
856 - |
|
857 - if (ctx) { |
|
858 - CGContextDrawPDFPage(ctx, page); |
|
859 - CGContextRelease(ctx); |
|
860 - } |
|
861 - |
|
862 - output->swap(bitmap); |
|
863 - return true; |
|
864 -} |
|
865 - |