Index: skia/sgl/SkBitmapProcState_matrix.h |
=================================================================== |
--- skia/sgl/SkBitmapProcState_matrix.h (revision 9831) |
+++ skia/sgl/SkBitmapProcState_matrix.h (working copy) |
@@ -1,4 +1,5 @@ |
+#define TRANSLATE_NOFILTER_NAME MAKENAME(_nofilter_translate) |
#define SCALE_NOFILTER_NAME MAKENAME(_nofilter_scale) |
#define SCALE_FILTER_NAME MAKENAME(_filter_scale) |
#define AFFINE_NOFILTER_NAME MAKENAME(_nofilter_affine) |
@@ -17,6 +18,38 @@ |
#define PREAMBLE_ARG_Y |
#endif |
+#ifndef PREAMBLE_TRANS |
+ #define PREAMBLE_TRANS(state) |
+#endif |
+ |
+static void TRANSLATE_NOFILTER_NAME(const SkBitmapProcState& s, |
+ uint32_t xy[], int count, int x, int y) |
+{ |
+ SkASSERT((s.fInvType & ~SkMatrix::kTranslate_Mask) == 0); |
+ |
+ PREAMBLE_TRANS(s); |
+ |
+ x += SkScalarFloor(s.fInvMatrix->getTranslateX()); |
+ y += SkScalarFloor(s.fInvMatrix->getTranslateY()); |
+ |
+ *xy++ = (uint32_t)TILEY_TRANS(y, (s.fBitmap->height() - 1)); |
+ |
+ unsigned maxX = s.fBitmap->width() - 1; |
+ int i; |
+ uint16_t* xx = (uint16_t*)xy; |
+ for (i = (count >> 2); i > 0; --i) |
+ { |
+ *xx++ = (uint16_t)TILEX_TRANS(x, maxX); x++; |
+ *xx++ = (uint16_t)TILEX_TRANS(x, maxX); x++; |
+ *xx++ = (uint16_t)TILEX_TRANS(x, maxX); x++; |
+ *xx++ = (uint16_t)TILEX_TRANS(x, maxX); x++; |
+ } |
+ for (i = (count & 3); i > 0; --i) |
+ { |
+ *xx++ = (uint16_t)TILEX_TRANS(x, maxX); x++; |
+ } |
+} |
+ |
static void SCALE_NOFILTER_NAME(const SkBitmapProcState& s, |
uint32_t xy[], int count, int x, int y) { |
SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | |
@@ -241,6 +274,9 @@ |
} |
static SkBitmapProcState::MatrixProc MAKENAME(_Procs)[] = { |
+ TRANSLATE_NOFILTER_NAME, |
+ TRANSLATE_NOFILTER_NAME, // No need to do filtering if the matrix is no |
+ // more complex than identity/translate. |
SCALE_NOFILTER_NAME, |
SCALE_FILTER_NAME, |
AFFINE_NOFILTER_NAME, |
@@ -256,6 +292,10 @@ |
#undef CHECK_FOR_DECAL |
#endif |
+#undef TILEX_TRANS |
+#undef TILEY_TRANS |
+ |
+#undef TRANSLATE_NOFILTER_NAME |
#undef SCALE_NOFILTER_NAME |
#undef SCALE_FILTER_NAME |
#undef AFFINE_NOFILTER_NAME |
@@ -269,5 +309,7 @@ |
#undef PREAMBLE_ARG_X |
#undef PREAMBLE_ARG_Y |
+#undef PREAMBLE_TRANS |
+ |
#undef TILEX_LOW_BITS |
#undef TILEY_LOW_BITS |