1 #define SCALE_FILTER_NAME MAKENAME(_filter_DX_shaderproc) 2 3 static void SCALE_FILTER_NAME(const SkBitmapProcState& s, int x, int y, 4 DSTTYPE* SK_RESTRICT colors, int count) { 5 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | 6 SkMatrix::kScale_Mask)) == 0); 7 SkASSERT(s.fInvKy == 0); 8 SkASSERT(count > 0 && colors != NULL); 9 SkASSERT(s.fDoFilter); 10 SkDEBUGCODE(CHECKSTATE(s);) 11 12 const unsigned maxX = s.fBitmap->width() - 1; 13 const SkFixed oneX = s.fFilterOneX; 14 const SkFixed dx = s.fInvSx; 15 SkFixed fx; 16 const SRCTYPE* SK_RESTRICT row0; 17 const SRCTYPE* SK_RESTRICT row1; 18 unsigned subY; 19 20 { 21 SkPoint pt; 22 s.fInvProc(*s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, 23 SkIntToScalar(y) + SK_ScalarHalf, &pt); 24 SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); 25 const unsigned maxY = s.fBitmap->height() - 1; 26 // compute our two Y values up front 27 subY = TILEY_LOW_BITS(fy, maxY); 28 int y0 = TILEY_PROCF(fy, maxY); 29 int y1 = TILEY_PROCF((fy + s.fFilterOneY), maxY); 30 31 const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); 32 unsigned rb = s.fBitmap->rowBytes(); 33 row0 = (const SRCTYPE*)(srcAddr + y0 * rb); 34 row1 = (const SRCTYPE*)(srcAddr + y1 * rb); 35 // now initialize fx 36 fx = SkScalarToFixed(pt.fX) - (oneX >> 1); 37 } 38 39 #ifdef PREAMBLE 40 PREAMBLE(s); 41 #endif 42 43 do { 44 unsigned subX = TILEX_LOW_BITS(fx, maxX); 45 unsigned x0 = TILEX_PROCF(fx, maxX); 46 unsigned x1 = TILEX_PROCF((fx + oneX), maxX); 47 48 FILTER_PROC(subX, subY, 49 SRC_TO_FILTER(row0[x0]), 50 SRC_TO_FILTER(row0[x1]), 51 SRC_TO_FILTER(row1[x0]), 52 SRC_TO_FILTER(row1[x1]), 53 colors); 54 colors += 1; 55 56 fx += dx; 57 } while (--count != 0); 58 59 #ifdef POSTAMBLE 60 POSTAMBLE(s); 61 #endif 62 } 63 64 /////////////////////////////////////////////////////////////////////////////// 65 66 #undef TILEX_PROCF 67 #undef TILEY_PROCF 68 #undef TILEX_LOW_BITS 69 #undef TILEY_LOW_BITS 70 #undef MAKENAME 71 #undef SRCTYPE 72 #undef DSTTYPE 73 #undef CHECKSTATE 74 #undef SRC_TO_FILTER 75 #undef FILTER_TO_DST 76 #undef PREAMBLE 77 #undef POSTAMBLE 78 79 #undef SCALE_FILTER_NAME 80