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

Side by Side Diff: skia/sgl/SkBlitRow_D4444.cpp

Issue 113827: Remove the remainder of the skia source code from the Chromium repo.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 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 | Annotate | Revision Log
« no previous file with comments | « skia/sgl/SkBlitRow_D16.cpp ('k') | skia/sgl/SkBlitter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #include "SkBlitRow.h"
2 #include "SkColorPriv.h"
3 #include "SkDither.h"
4
5 ///////////////////////////////////////////////////////////////////////////////
6
7 static void S32_D4444_Opaque(uint16_t* SK_RESTRICT dst,
8 const SkPMColor* SK_RESTRICT src, int count,
9 U8CPU alpha, int /*x*/, int /*y*/) {
10 SkASSERT(255 == alpha);
11
12 if (count > 0) {
13 do {
14 SkPMColor c = *src++;
15 SkPMColorAssert(c);
16 SkASSERT(SkGetPackedA32(c) == 255);
17 *dst++ = SkPixel32ToPixel4444(c);
18 } while (--count != 0);
19 }
20 }
21
22 static void S32_D4444_Blend(uint16_t* SK_RESTRICT dst,
23 const SkPMColor* SK_RESTRICT src, int count,
24 U8CPU alpha, int /*x*/, int /*y*/) {
25 SkASSERT(255 > alpha);
26
27 if (count > 0) {
28 unsigned scale16 = SkAlpha255To256(alpha) >> 4;
29 do {
30 SkPMColor c = *src++;
31 SkPMColorAssert(c);
32 SkASSERT(SkGetPackedA32(c) == 255);
33
34 uint32_t src_expand = SkExpand32_4444(c);
35 uint32_t dst_expand = SkExpand_4444(*dst);
36 dst_expand += (src_expand - dst_expand) * scale16 >> 4;
37 *dst++ = SkCompact_4444(dst_expand);
38 } while (--count != 0);
39 }
40 }
41
42 static void S32A_D4444_Opaque(uint16_t* SK_RESTRICT dst,
43 const SkPMColor* SK_RESTRICT src, int count,
44 U8CPU alpha, int /*x*/, int /*y*/) {
45 SkASSERT(255 == alpha);
46
47 if (count > 0) {
48 do {
49 SkPMColor c = *src++;
50 SkPMColorAssert(c);
51 // if (__builtin_expect(c!=0, 1))
52 if (c)
53 {
54 unsigned scale16 = SkAlpha255To256(255 - SkGetPackedA32(c)) >> 4 ;
55 uint32_t src_expand = SkExpand_8888(c);
56 uint32_t dst_expand = SkExpand_4444(*dst) * scale16;
57 *dst = SkCompact_4444((src_expand + dst_expand) >> 4);
58 }
59 dst += 1;
60 } while (--count != 0);
61 }
62 }
63
64 static void S32A_D4444_Blend(uint16_t* SK_RESTRICT dst,
65 const SkPMColor* SK_RESTRICT src, int count,
66 U8CPU alpha, int /*x*/, int /*y*/) {
67 SkASSERT(255 > alpha);
68
69 if (count > 0) {
70 int src_scale = SkAlpha255To256(alpha) >> 4;
71 do {
72 SkPMColor sc = *src++;
73 SkPMColorAssert(sc);
74
75 if (sc) {
76 unsigned dst_scale = 16 - (SkGetPackedA32(sc) * src_scale >> 8);
77 uint32_t src_expand = SkExpand32_4444(sc) * src_scale;
78 uint32_t dst_expand = SkExpand_4444(*dst) * dst_scale;
79 *dst = SkCompact_4444((src_expand + dst_expand) >> 4);
80 }
81 dst += 1;
82 } while (--count != 0);
83 }
84 }
85
86 /////////////////////////////////////////////////////////////////////////////
87
88 static void S32_D4444_Opaque_Dither(uint16_t* SK_RESTRICT dst,
89 const SkPMColor* SK_RESTRICT src,
90 int count, U8CPU alpha, int x, int y) {
91 SkASSERT(255 == alpha);
92
93 if (count > 0) {
94 DITHER_4444_SCAN(y);
95 do {
96 SkPMColor c = *src++;
97 SkPMColorAssert(c);
98 SkASSERT(SkGetPackedA32(c) == 255);
99
100 unsigned dither = DITHER_VALUE(x);
101 *dst++ = SkDitherARGB32To4444(c, dither);
102 DITHER_INC_X(x);
103 } while (--count != 0);
104 }
105 }
106
107 static void S32_D4444_Blend_Dither(uint16_t* SK_RESTRICT dst,
108 const SkPMColor* SK_RESTRICT src,
109 int count, U8CPU alpha, int x, int y) {
110 SkASSERT(255 > alpha);
111
112 if (count > 0) {
113 int scale16 = SkAlpha255To256(alpha) >> 4;
114 DITHER_4444_SCAN(y);
115 do {
116 SkPMColor c = *src++;
117 SkPMColorAssert(c);
118 SkASSERT(SkGetPackedA32(c) == 255);
119
120 uint32_t src_expand = SkExpand32_4444(c) * scale16;
121 uint32_t dst_expand = SkExpand_4444(*dst) * (16 - scale16);
122
123 c = SkCompact_8888(src_expand + dst_expand); // convert back to SkPM Color
124 *dst++ = SkDitherARGB32To4444(c, DITHER_VALUE(x));
125 DITHER_INC_X(x);
126 } while (--count != 0);
127 }
128 }
129
130 static void S32A_D4444_Opaque_Dither(uint16_t* SK_RESTRICT dst,
131 const SkPMColor* SK_RESTRICT src,
132 int count, U8CPU alpha, int x, int y) {
133 SkASSERT(255 == alpha);
134
135 if (count > 0) {
136 DITHER_4444_SCAN(y);
137 do {
138 SkPMColor c = *src++;
139 SkPMColorAssert(c);
140 if (c) {
141 unsigned a = SkGetPackedA32(c);
142 int d = SkAlphaMul(DITHER_VALUE(x), SkAlpha255To256(a));
143
144 unsigned scale16 = SkAlpha255To256(255 - a) >> 4;
145 uint32_t src_expand = SkExpand_8888(c);
146 uint32_t dst_expand = SkExpand_4444(*dst) * scale16;
147 // convert back to SkPMColor
148 c = SkCompact_8888(src_expand + dst_expand);
149 *dst = SkDitherARGB32To4444(c, d);
150 }
151 dst += 1;
152 DITHER_INC_X(x);
153 } while (--count != 0);
154 }
155 }
156
157 // need DitherExpand888To4444(expand, dither)
158
159 static void S32A_D4444_Blend_Dither(uint16_t* SK_RESTRICT dst,
160 const SkPMColor* SK_RESTRICT src,
161 int count, U8CPU alpha, int x, int y) {
162 SkASSERT(255 > alpha);
163
164 if (count > 0) {
165 int src_scale = SkAlpha255To256(alpha) >> 4;
166 DITHER_4444_SCAN(y);
167 do {
168 SkPMColor c = *src++;
169 SkPMColorAssert(c);
170 if (c) {
171 unsigned a = SkAlpha255To256(SkGetPackedA32(c));
172 int d = SkAlphaMul(DITHER_VALUE(x), a);
173
174 unsigned dst_scale = 16 - SkAlphaMul(src_scale, a);
175 uint32_t src_expand = SkExpand32_4444(c) * src_scale;
176 uint32_t dst_expand = SkExpand_4444(*dst) * dst_scale;
177 // convert back to SkPMColor
178 c = SkCompact_8888(src_expand + dst_expand);
179 *dst = SkDitherARGB32To4444(c, d);
180 }
181 dst += 1;
182 DITHER_INC_X(x);
183 } while (--count != 0);
184 }
185 }
186
187 ///////////////////////////////////////////////////////////////////////////////
188 ///////////////////////////////////////////////////////////////////////////////
189
190 static const SkBlitRow::Proc gProcs4444[] = {
191 // no dither
192 S32_D4444_Opaque,
193 S32_D4444_Blend,
194
195 S32A_D4444_Opaque,
196 S32A_D4444_Blend,
197
198 // dither
199 S32_D4444_Opaque_Dither,
200 S32_D4444_Blend_Dither,
201
202 S32A_D4444_Opaque_Dither,
203 S32A_D4444_Blend_Dither
204 };
205
206 SkBlitRow::Proc SkBlitRow_Factory_4444(unsigned flags);
207 SkBlitRow::Proc SkBlitRow_Factory_4444(unsigned flags)
208 {
209 SkASSERT(flags < SK_ARRAY_COUNT(gProcs4444));
210
211 return gProcs4444[flags];
212 }
213
214
OLDNEW
« no previous file with comments | « skia/sgl/SkBlitRow_D16.cpp ('k') | skia/sgl/SkBlitter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698