OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 #include "SkUtils.h" | 8 #include "SkUtils.h" |
9 | 9 |
10 #if DSTSIZE==32 | 10 #if DSTSIZE==32 |
(...skipping 30 matching lines...) Expand all Loading... |
41 void MAKENAME(_nofilter_DXDY)(const SkBitmapProcState& s, | 41 void MAKENAME(_nofilter_DXDY)(const SkBitmapProcState& s, |
42 const uint32_t* SK_RESTRICT xy, | 42 const uint32_t* SK_RESTRICT xy, |
43 int count, DSTTYPE* SK_RESTRICT colors) { | 43 int count, DSTTYPE* SK_RESTRICT colors) { |
44 SkASSERT(count > 0 && colors != NULL); | 44 SkASSERT(count > 0 && colors != NULL); |
45 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); | 45 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); |
46 SkDEBUGCODE(CHECKSTATE(s);) | 46 SkDEBUGCODE(CHECKSTATE(s);) |
47 | 47 |
48 #ifdef PREAMBLE | 48 #ifdef PREAMBLE |
49 PREAMBLE(s); | 49 PREAMBLE(s); |
50 #endif | 50 #endif |
51 const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); | 51 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); |
52 size_t rb = s.fBitmap->rowBytes(); | 52 size_t rb = s.fPixmap.rowBytes(); |
53 | 53 |
54 uint32_t XY; | 54 uint32_t XY; |
55 SRCTYPE src; | 55 SRCTYPE src; |
56 | 56 |
57 for (int i = (count >> 1); i > 0; --i) { | 57 for (int i = (count >> 1); i > 0; --i) { |
58 XY = *xy++; | 58 XY = *xy++; |
59 SkASSERT((XY >> 16) < (unsigned)s.fBitmap->height() && | 59 SkASSERT((XY >> 16) < (unsigned)s.fPixmap.height() && |
60 (XY & 0xFFFF) < (unsigned)s.fBitmap->width()); | 60 (XY & 0xFFFF) < (unsigned)s.fPixmap.width()); |
61 src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; | 61 src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; |
62 *colors++ = RETURNDST(src); | 62 *colors++ = RETURNDST(src); |
63 | 63 |
64 XY = *xy++; | 64 XY = *xy++; |
65 SkASSERT((XY >> 16) < (unsigned)s.fBitmap->height() && | 65 SkASSERT((XY >> 16) < (unsigned)s.fPixmap.height() && |
66 (XY & 0xFFFF) < (unsigned)s.fBitmap->width()); | 66 (XY & 0xFFFF) < (unsigned)s.fPixmap.width()); |
67 src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; | 67 src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; |
68 *colors++ = RETURNDST(src); | 68 *colors++ = RETURNDST(src); |
69 } | 69 } |
70 if (count & 1) { | 70 if (count & 1) { |
71 XY = *xy++; | 71 XY = *xy++; |
72 SkASSERT((XY >> 16) < (unsigned)s.fBitmap->height() && | 72 SkASSERT((XY >> 16) < (unsigned)s.fPixmap.height() && |
73 (XY & 0xFFFF) < (unsigned)s.fBitmap->width()); | 73 (XY & 0xFFFF) < (unsigned)s.fPixmap.width()); |
74 src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; | 74 src = ((const SRCTYPE*)(srcAddr + (XY >> 16) * rb))[XY & 0xFFFF]; |
75 *colors++ = RETURNDST(src); | 75 *colors++ = RETURNDST(src); |
76 } | 76 } |
77 | 77 |
78 #ifdef POSTAMBLE | 78 #ifdef POSTAMBLE |
79 POSTAMBLE(s); | 79 POSTAMBLE(s); |
80 #endif | 80 #endif |
81 } | 81 } |
82 | 82 |
83 void MAKENAME(_nofilter_DX)(const SkBitmapProcState& s, | 83 void MAKENAME(_nofilter_DX)(const SkBitmapProcState& s, |
84 const uint32_t* SK_RESTRICT xy, | 84 const uint32_t* SK_RESTRICT xy, |
85 int count, DSTTYPE* SK_RESTRICT colors) { | 85 int count, DSTTYPE* SK_RESTRICT colors) { |
86 SkASSERT(count > 0 && colors != NULL); | 86 SkASSERT(count > 0 && colors != NULL); |
87 SkASSERT(s.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); | 87 SkASSERT(s.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); |
88 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); | 88 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); |
89 SkDEBUGCODE(CHECKSTATE(s);) | 89 SkDEBUGCODE(CHECKSTATE(s);) |
90 | 90 |
91 #ifdef PREAMBLE | 91 #ifdef PREAMBLE |
92 PREAMBLE(s); | 92 PREAMBLE(s); |
93 #endif | 93 #endif |
94 const SRCTYPE* SK_RESTRICT srcAddr = (const SRCTYPE*)s.fBitmap->getPixels(); | 94 const SRCTYPE* SK_RESTRICT srcAddr = (const SRCTYPE*)s.fPixmap.addr(); |
95 | 95 |
96 // buffer is y32, x16, x16, x16, x16, x16 | 96 // buffer is y32, x16, x16, x16, x16, x16 |
97 // bump srcAddr to the proper row, since we're told Y never changes | 97 // bump srcAddr to the proper row, since we're told Y never changes |
98 SkASSERT((unsigned)xy[0] < (unsigned)s.fBitmap->height()); | 98 SkASSERT((unsigned)xy[0] < (unsigned)s.fPixmap.height()); |
99 srcAddr = (const SRCTYPE*)((const char*)srcAddr + | 99 srcAddr = (const SRCTYPE*)((const char*)srcAddr + |
100 xy[0] * s.fBitmap->rowBytes()); | 100 xy[0] * s.fPixmap.rowBytes()); |
101 xy += 1; | 101 xy += 1; |
102 | 102 |
103 SRCTYPE src; | 103 SRCTYPE src; |
104 | 104 |
105 if (1 == s.fBitmap->width()) { | 105 if (1 == s.fPixmap.width()) { |
106 src = srcAddr[0]; | 106 src = srcAddr[0]; |
107 DSTTYPE dstValue = RETURNDST(src); | 107 DSTTYPE dstValue = RETURNDST(src); |
108 BITMAPPROC_MEMSET(colors, dstValue, count); | 108 BITMAPPROC_MEMSET(colors, dstValue, count); |
109 } else { | 109 } else { |
110 int i; | 110 int i; |
111 for (i = (count >> 2); i > 0; --i) { | 111 for (i = (count >> 2); i > 0; --i) { |
112 uint32_t xx0 = *xy++; | 112 uint32_t xx0 = *xy++; |
113 uint32_t xx1 = *xy++; | 113 uint32_t xx1 = *xy++; |
114 SRCTYPE x0 = srcAddr[UNPACK_PRIMARY_SHORT(xx0)]; | 114 SRCTYPE x0 = srcAddr[UNPACK_PRIMARY_SHORT(xx0)]; |
115 SRCTYPE x1 = srcAddr[UNPACK_SECONDARY_SHORT(xx0)]; | 115 SRCTYPE x1 = srcAddr[UNPACK_SECONDARY_SHORT(xx0)]; |
116 SRCTYPE x2 = srcAddr[UNPACK_PRIMARY_SHORT(xx1)]; | 116 SRCTYPE x2 = srcAddr[UNPACK_PRIMARY_SHORT(xx1)]; |
117 SRCTYPE x3 = srcAddr[UNPACK_SECONDARY_SHORT(xx1)]; | 117 SRCTYPE x3 = srcAddr[UNPACK_SECONDARY_SHORT(xx1)]; |
118 | 118 |
119 *colors++ = RETURNDST(x0); | 119 *colors++ = RETURNDST(x0); |
120 *colors++ = RETURNDST(x1); | 120 *colors++ = RETURNDST(x1); |
121 *colors++ = RETURNDST(x2); | 121 *colors++ = RETURNDST(x2); |
122 *colors++ = RETURNDST(x3); | 122 *colors++ = RETURNDST(x3); |
123 } | 123 } |
124 const uint16_t* SK_RESTRICT xx = (const uint16_t*)(xy); | 124 const uint16_t* SK_RESTRICT xx = (const uint16_t*)(xy); |
125 for (i = (count & 3); i > 0; --i) { | 125 for (i = (count & 3); i > 0; --i) { |
126 SkASSERT(*xx < (unsigned)s.fBitmap->width()); | 126 SkASSERT(*xx < (unsigned)s.fPixmap.width()); |
127 src = srcAddr[*xx++]; *colors++ = RETURNDST(src); | 127 src = srcAddr[*xx++]; *colors++ = RETURNDST(src); |
128 } | 128 } |
129 } | 129 } |
130 | 130 |
131 #ifdef POSTAMBLE | 131 #ifdef POSTAMBLE |
132 POSTAMBLE(s); | 132 POSTAMBLE(s); |
133 #endif | 133 #endif |
134 } | 134 } |
135 | 135 |
136 /////////////////////////////////////////////////////////////////////////////// | 136 /////////////////////////////////////////////////////////////////////////////// |
137 | 137 |
138 void MAKENAME(_filter_DX)(const SkBitmapProcState& s, | 138 void MAKENAME(_filter_DX)(const SkBitmapProcState& s, |
139 const uint32_t* SK_RESTRICT xy, | 139 const uint32_t* SK_RESTRICT xy, |
140 int count, DSTTYPE* SK_RESTRICT colors) { | 140 int count, DSTTYPE* SK_RESTRICT colors) { |
141 SkASSERT(count > 0 && colors != NULL); | 141 SkASSERT(count > 0 && colors != NULL); |
142 SkASSERT(s.fFilterLevel != kNone_SkFilterQuality); | 142 SkASSERT(s.fFilterLevel != kNone_SkFilterQuality); |
143 SkDEBUGCODE(CHECKSTATE(s);) | 143 SkDEBUGCODE(CHECKSTATE(s);) |
144 | 144 |
145 #ifdef PREAMBLE | 145 #ifdef PREAMBLE |
146 PREAMBLE(s); | 146 PREAMBLE(s); |
147 #endif | 147 #endif |
148 const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); | 148 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); |
149 size_t rb = s.fBitmap->rowBytes(); | 149 size_t rb = s.fPixmap.rowBytes(); |
150 unsigned subY; | 150 unsigned subY; |
151 const SRCTYPE* SK_RESTRICT row0; | 151 const SRCTYPE* SK_RESTRICT row0; |
152 const SRCTYPE* SK_RESTRICT row1; | 152 const SRCTYPE* SK_RESTRICT row1; |
153 | 153 |
154 // setup row ptrs and update proc_table | 154 // setup row ptrs and update proc_table |
155 { | 155 { |
156 uint32_t XY = *xy++; | 156 uint32_t XY = *xy++; |
157 unsigned y0 = XY >> 14; | 157 unsigned y0 = XY >> 14; |
158 row0 = (const SRCTYPE*)(srcAddr + (y0 >> 4) * rb); | 158 row0 = (const SRCTYPE*)(srcAddr + (y0 >> 4) * rb); |
159 row1 = (const SRCTYPE*)(srcAddr + (XY & 0x3FFF) * rb); | 159 row1 = (const SRCTYPE*)(srcAddr + (XY & 0x3FFF) * rb); |
(...skipping 24 matching lines...) Expand all Loading... |
184 void MAKENAME(_filter_DXDY)(const SkBitmapProcState& s, | 184 void MAKENAME(_filter_DXDY)(const SkBitmapProcState& s, |
185 const uint32_t* SK_RESTRICT xy, | 185 const uint32_t* SK_RESTRICT xy, |
186 int count, DSTTYPE* SK_RESTRICT colors) { | 186 int count, DSTTYPE* SK_RESTRICT colors) { |
187 SkASSERT(count > 0 && colors != NULL); | 187 SkASSERT(count > 0 && colors != NULL); |
188 SkASSERT(s.fFilterLevel != kNone_SkFilterQuality); | 188 SkASSERT(s.fFilterLevel != kNone_SkFilterQuality); |
189 SkDEBUGCODE(CHECKSTATE(s);) | 189 SkDEBUGCODE(CHECKSTATE(s);) |
190 | 190 |
191 #ifdef PREAMBLE | 191 #ifdef PREAMBLE |
192 PREAMBLE(s); | 192 PREAMBLE(s); |
193 #endif | 193 #endif |
194 const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); | 194 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); |
195 size_t rb = s.fBitmap->rowBytes(); | 195 size_t rb = s.fPixmap.rowBytes(); |
196 | 196 |
197 do { | 197 do { |
198 uint32_t data = *xy++; | 198 uint32_t data = *xy++; |
199 unsigned y0 = data >> 14; | 199 unsigned y0 = data >> 14; |
200 unsigned y1 = data & 0x3FFF; | 200 unsigned y1 = data & 0x3FFF; |
201 unsigned subY = y0 & 0xF; | 201 unsigned subY = y0 & 0xF; |
202 y0 >>= 4; | 202 y0 >>= 4; |
203 | 203 |
204 data = *xy++; | 204 data = *xy++; |
205 unsigned x0 = data >> 14; | 205 unsigned x0 = data >> 14; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 #ifdef POSTAMBLE | 239 #ifdef POSTAMBLE |
240 #undef POSTAMBLE | 240 #undef POSTAMBLE |
241 #endif | 241 #endif |
242 | 242 |
243 #undef FILTER_PROC_TYPE | 243 #undef FILTER_PROC_TYPE |
244 #undef GET_FILTER_TABLE | 244 #undef GET_FILTER_TABLE |
245 #undef GET_FILTER_ROW | 245 #undef GET_FILTER_ROW |
246 #undef GET_FILTER_ROW_PROC | 246 #undef GET_FILTER_ROW_PROC |
247 #undef GET_FILTER_PROC | 247 #undef GET_FILTER_PROC |
248 #undef BITMAPPROC_MEMSET | 248 #undef BITMAPPROC_MEMSET |
OLD | NEW |