| 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 | |
| 11 #define DSTTYPE SkPMColor | |
| 12 #elif DSTSIZE==16 | |
| 13 #define DSTTYPE uint16_t | |
| 14 #else | |
| 15 #error "need DSTSIZE to be 32 or 16" | |
| 16 #endif | |
| 17 | |
| 18 #if (DSTSIZE == 32) | |
| 19 #define BITMAPPROC_MEMSET(ptr, value, n) sk_memset32(ptr, value, n) | |
| 20 #elif (DSTSIZE == 16) | |
| 21 #define BITMAPPROC_MEMSET(ptr, value, n) sk_memset16(ptr, value, n) | |
| 22 #else | |
| 23 #error "unsupported DSTSIZE" | |
| 24 #endif | |
| 25 | |
| 26 | |
| 27 // declare functions externally to suppress warnings. | 10 // declare functions externally to suppress warnings. |
| 28 void MAKENAME(_nofilter_DXDY)(const SkBitmapProcState& s, | 11 void MAKENAME(_nofilter_DXDY)(const SkBitmapProcState& s, |
| 29 const uint32_t* SK_RESTRICT xy, | 12 const uint32_t* SK_RESTRICT xy, |
| 30 int count, DSTTYPE* SK_RESTRICT colors); | 13 int count, SkPMColor* SK_RESTRICT colors); |
| 31 void MAKENAME(_nofilter_DX)(const SkBitmapProcState& s, | 14 void MAKENAME(_nofilter_DX)(const SkBitmapProcState& s, |
| 32 const uint32_t* SK_RESTRICT xy, | 15 const uint32_t* SK_RESTRICT xy, |
| 33 int count, DSTTYPE* SK_RESTRICT colors); | 16 int count, SkPMColor* SK_RESTRICT colors); |
| 34 void MAKENAME(_filter_DX)(const SkBitmapProcState& s, | 17 void MAKENAME(_filter_DX)(const SkBitmapProcState& s, |
| 35 const uint32_t* SK_RESTRICT xy, | 18 const uint32_t* SK_RESTRICT xy, |
| 36 int count, DSTTYPE* SK_RESTRICT colors); | 19 int count, SkPMColor* SK_RESTRICT colors); |
| 37 void MAKENAME(_filter_DXDY)(const SkBitmapProcState& s, | 20 void MAKENAME(_filter_DXDY)(const SkBitmapProcState& s, |
| 38 const uint32_t* SK_RESTRICT xy, | 21 const uint32_t* SK_RESTRICT xy, |
| 39 int count, DSTTYPE* SK_RESTRICT colors); | 22 int count, SkPMColor* SK_RESTRICT colors); |
| 40 | 23 |
| 41 void MAKENAME(_nofilter_DXDY)(const SkBitmapProcState& s, | 24 void MAKENAME(_nofilter_DXDY)(const SkBitmapProcState& s, |
| 42 const uint32_t* SK_RESTRICT xy, | 25 const uint32_t* SK_RESTRICT xy, |
| 43 int count, DSTTYPE* SK_RESTRICT colors) { | 26 int count, SkPMColor* SK_RESTRICT colors) { |
| 44 SkASSERT(count > 0 && colors != nullptr); | 27 SkASSERT(count > 0 && colors != nullptr); |
| 45 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); | 28 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); |
| 46 SkDEBUGCODE(CHECKSTATE(s);) | 29 SkDEBUGCODE(CHECKSTATE(s);) |
| 47 | 30 |
| 48 #ifdef PREAMBLE | 31 #ifdef PREAMBLE |
| 49 PREAMBLE(s); | 32 PREAMBLE(s); |
| 50 #endif | 33 #endif |
| 51 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); | 34 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); |
| 52 size_t rb = s.fPixmap.rowBytes(); | 35 size_t rb = s.fPixmap.rowBytes(); |
| 53 | 36 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 75 *colors++ = RETURNDST(src); | 58 *colors++ = RETURNDST(src); |
| 76 } | 59 } |
| 77 | 60 |
| 78 #ifdef POSTAMBLE | 61 #ifdef POSTAMBLE |
| 79 POSTAMBLE(s); | 62 POSTAMBLE(s); |
| 80 #endif | 63 #endif |
| 81 } | 64 } |
| 82 | 65 |
| 83 void MAKENAME(_nofilter_DX)(const SkBitmapProcState& s, | 66 void MAKENAME(_nofilter_DX)(const SkBitmapProcState& s, |
| 84 const uint32_t* SK_RESTRICT xy, | 67 const uint32_t* SK_RESTRICT xy, |
| 85 int count, DSTTYPE* SK_RESTRICT colors) { | 68 int count, SkPMColor* SK_RESTRICT colors) { |
| 86 SkASSERT(count > 0 && colors != nullptr); | 69 SkASSERT(count > 0 && colors != nullptr); |
| 87 SkASSERT(s.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); | 70 SkASSERT(s.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); |
| 88 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); | 71 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); |
| 89 SkDEBUGCODE(CHECKSTATE(s);) | 72 SkDEBUGCODE(CHECKSTATE(s);) |
| 90 | 73 |
| 91 #ifdef PREAMBLE | 74 #ifdef PREAMBLE |
| 92 PREAMBLE(s); | 75 PREAMBLE(s); |
| 93 #endif | 76 #endif |
| 94 const SRCTYPE* SK_RESTRICT srcAddr = (const SRCTYPE*)s.fPixmap.addr(); | 77 const SRCTYPE* SK_RESTRICT srcAddr = (const SRCTYPE*)s.fPixmap.addr(); |
| 95 | 78 |
| 96 // buffer is y32, x16, x16, x16, x16, x16 | 79 // buffer is y32, x16, x16, x16, x16, x16 |
| 97 // bump srcAddr to the proper row, since we're told Y never changes | 80 // bump srcAddr to the proper row, since we're told Y never changes |
| 98 SkASSERT((unsigned)xy[0] < (unsigned)s.fPixmap.height()); | 81 SkASSERT((unsigned)xy[0] < (unsigned)s.fPixmap.height()); |
| 99 srcAddr = (const SRCTYPE*)((const char*)srcAddr + | 82 srcAddr = (const SRCTYPE*)((const char*)srcAddr + |
| 100 xy[0] * s.fPixmap.rowBytes()); | 83 xy[0] * s.fPixmap.rowBytes()); |
| 101 xy += 1; | 84 xy += 1; |
| 102 | 85 |
| 103 SRCTYPE src; | 86 SRCTYPE src; |
| 104 | 87 |
| 105 if (1 == s.fPixmap.width()) { | 88 if (1 == s.fPixmap.width()) { |
| 106 src = srcAddr[0]; | 89 src = srcAddr[0]; |
| 107 DSTTYPE dstValue = RETURNDST(src); | 90 SkPMColor dstValue = RETURNDST(src); |
| 108 BITMAPPROC_MEMSET(colors, dstValue, count); | 91 sk_memset32(colors, dstValue, count); |
| 109 } else { | 92 } else { |
| 110 int i; | 93 int i; |
| 111 for (i = (count >> 2); i > 0; --i) { | 94 for (i = (count >> 2); i > 0; --i) { |
| 112 uint32_t xx0 = *xy++; | 95 uint32_t xx0 = *xy++; |
| 113 uint32_t xx1 = *xy++; | 96 uint32_t xx1 = *xy++; |
| 114 SRCTYPE x0 = srcAddr[UNPACK_PRIMARY_SHORT(xx0)]; | 97 SRCTYPE x0 = srcAddr[UNPACK_PRIMARY_SHORT(xx0)]; |
| 115 SRCTYPE x1 = srcAddr[UNPACK_SECONDARY_SHORT(xx0)]; | 98 SRCTYPE x1 = srcAddr[UNPACK_SECONDARY_SHORT(xx0)]; |
| 116 SRCTYPE x2 = srcAddr[UNPACK_PRIMARY_SHORT(xx1)]; | 99 SRCTYPE x2 = srcAddr[UNPACK_PRIMARY_SHORT(xx1)]; |
| 117 SRCTYPE x3 = srcAddr[UNPACK_SECONDARY_SHORT(xx1)]; | 100 SRCTYPE x3 = srcAddr[UNPACK_SECONDARY_SHORT(xx1)]; |
| 118 | 101 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 130 | 113 |
| 131 #ifdef POSTAMBLE | 114 #ifdef POSTAMBLE |
| 132 POSTAMBLE(s); | 115 POSTAMBLE(s); |
| 133 #endif | 116 #endif |
| 134 } | 117 } |
| 135 | 118 |
| 136 /////////////////////////////////////////////////////////////////////////////// | 119 /////////////////////////////////////////////////////////////////////////////// |
| 137 | 120 |
| 138 void MAKENAME(_filter_DX)(const SkBitmapProcState& s, | 121 void MAKENAME(_filter_DX)(const SkBitmapProcState& s, |
| 139 const uint32_t* SK_RESTRICT xy, | 122 const uint32_t* SK_RESTRICT xy, |
| 140 int count, DSTTYPE* SK_RESTRICT colors) { | 123 int count, SkPMColor* SK_RESTRICT colors) { |
| 141 SkASSERT(count > 0 && colors != nullptr); | 124 SkASSERT(count > 0 && colors != nullptr); |
| 142 SkASSERT(s.fFilterLevel != kNone_SkFilterQuality); | 125 SkASSERT(s.fFilterLevel != kNone_SkFilterQuality); |
| 143 SkDEBUGCODE(CHECKSTATE(s);) | 126 SkDEBUGCODE(CHECKSTATE(s);) |
| 144 | 127 |
| 145 #ifdef PREAMBLE | 128 #ifdef PREAMBLE |
| 146 PREAMBLE(s); | 129 PREAMBLE(s); |
| 147 #endif | 130 #endif |
| 148 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); | 131 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); |
| 149 size_t rb = s.fPixmap.rowBytes(); | 132 size_t rb = s.fPixmap.rowBytes(); |
| 150 unsigned subY; | 133 unsigned subY; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 176 colors += 1; | 159 colors += 1; |
| 177 | 160 |
| 178 } while (--count != 0); | 161 } while (--count != 0); |
| 179 | 162 |
| 180 #ifdef POSTAMBLE | 163 #ifdef POSTAMBLE |
| 181 POSTAMBLE(s); | 164 POSTAMBLE(s); |
| 182 #endif | 165 #endif |
| 183 } | 166 } |
| 184 void MAKENAME(_filter_DXDY)(const SkBitmapProcState& s, | 167 void MAKENAME(_filter_DXDY)(const SkBitmapProcState& s, |
| 185 const uint32_t* SK_RESTRICT xy, | 168 const uint32_t* SK_RESTRICT xy, |
| 186 int count, DSTTYPE* SK_RESTRICT colors) { | 169 int count, SkPMColor* SK_RESTRICT colors) { |
| 187 SkASSERT(count > 0 && colors != nullptr); | 170 SkASSERT(count > 0 && colors != nullptr); |
| 188 SkASSERT(s.fFilterLevel != kNone_SkFilterQuality); | 171 SkASSERT(s.fFilterLevel != kNone_SkFilterQuality); |
| 189 SkDEBUGCODE(CHECKSTATE(s);) | 172 SkDEBUGCODE(CHECKSTATE(s);) |
| 190 | 173 |
| 191 #ifdef PREAMBLE | 174 #ifdef PREAMBLE |
| 192 PREAMBLE(s); | 175 PREAMBLE(s); |
| 193 #endif | 176 #endif |
| 194 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); | 177 const char* SK_RESTRICT srcAddr = (const char*)s.fPixmap.addr(); |
| 195 size_t rb = s.fPixmap.rowBytes(); | 178 size_t rb = s.fPixmap.rowBytes(); |
| 196 | 179 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 218 colors); | 201 colors); |
| 219 colors += 1; | 202 colors += 1; |
| 220 } while (--count != 0); | 203 } while (--count != 0); |
| 221 | 204 |
| 222 #ifdef POSTAMBLE | 205 #ifdef POSTAMBLE |
| 223 POSTAMBLE(s); | 206 POSTAMBLE(s); |
| 224 #endif | 207 #endif |
| 225 } | 208 } |
| 226 | 209 |
| 227 #undef MAKENAME | 210 #undef MAKENAME |
| 228 #undef DSTSIZE | |
| 229 #undef DSTTYPE | |
| 230 #undef SRCTYPE | 211 #undef SRCTYPE |
| 231 #undef CHECKSTATE | 212 #undef CHECKSTATE |
| 232 #undef RETURNDST | 213 #undef RETURNDST |
| 233 #undef SRC_TO_FILTER | 214 #undef SRC_TO_FILTER |
| 234 #undef FILTER_TO_DST | 215 #undef FILTER_TO_DST |
| 235 | 216 |
| 236 #ifdef PREAMBLE | 217 #ifdef PREAMBLE |
| 237 #undef PREAMBLE | 218 #undef PREAMBLE |
| 238 #endif | 219 #endif |
| 239 #ifdef POSTAMBLE | 220 #ifdef POSTAMBLE |
| 240 #undef POSTAMBLE | 221 #undef POSTAMBLE |
| 241 #endif | 222 #endif |
| 242 | 223 |
| 243 #undef FILTER_PROC_TYPE | 224 #undef FILTER_PROC_TYPE |
| 244 #undef GET_FILTER_TABLE | 225 #undef GET_FILTER_TABLE |
| 245 #undef GET_FILTER_ROW | 226 #undef GET_FILTER_ROW |
| 246 #undef GET_FILTER_ROW_PROC | 227 #undef GET_FILTER_ROW_PROC |
| 247 #undef GET_FILTER_PROC | 228 #undef GET_FILTER_PROC |
| 248 #undef BITMAPPROC_MEMSET | |
| OLD | NEW |