OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2008 The Android Open Source Project | 2 * Copyright 2008 The Android Open Source Project |
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 "SkBitmapDevice.h" | 8 #include "SkBitmapDevice.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkCanvasPriv.h" | 10 #include "SkCanvasPriv.h" |
(...skipping 1808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1819 | 1819 |
1820 bool SkCanvas::isClipEmpty() const { | 1820 bool SkCanvas::isClipEmpty() const { |
1821 return fMCRec->fRasterClip.isEmpty(); | 1821 return fMCRec->fRasterClip.isEmpty(); |
1822 } | 1822 } |
1823 | 1823 |
1824 bool SkCanvas::isClipRect() const { | 1824 bool SkCanvas::isClipRect() const { |
1825 return fMCRec->fRasterClip.isRect(); | 1825 return fMCRec->fRasterClip.isRect(); |
1826 } | 1826 } |
1827 | 1827 |
1828 static inline bool is_nan_or_clipped(const Sk4f& devRect, const Sk4f& devClip) { | 1828 static inline bool is_nan_or_clipped(const Sk4f& devRect, const Sk4f& devClip) { |
1829 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 | 1829 #if !defined(SKNX_NO_SIMD) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 |
1830 __m128 lLtT = _mm_unpacklo_ps(devRect.fVec, devClip.fVec); | 1830 __m128 lLtT = _mm_unpacklo_ps(devRect.fVec, devClip.fVec); |
1831 __m128 RrBb = _mm_unpackhi_ps(devClip.fVec, devRect.fVec); | 1831 __m128 RrBb = _mm_unpackhi_ps(devClip.fVec, devRect.fVec); |
1832 __m128 mask = _mm_cmplt_ps(lLtT, RrBb); | 1832 __m128 mask = _mm_cmplt_ps(lLtT, RrBb); |
1833 return 0xF != _mm_movemask_ps(mask); | 1833 return 0xF != _mm_movemask_ps(mask); |
1834 #elif defined(SK_ARM_HAS_NEON) | 1834 #elif !defined(SKNX_NO_SIMD) && defined(SK_ARM_HAS_NEON) |
1835 float32x4_t lLtT = vzipq_f32(devRect.fVec, devClip.fVec).val[0]; | 1835 float32x4_t lLtT = vzipq_f32(devRect.fVec, devClip.fVec).val[0]; |
1836 float32x4_t RrBb = vzipq_f32(devClip.fVec, devRect.fVec).val[1]; | 1836 float32x4_t RrBb = vzipq_f32(devClip.fVec, devRect.fVec).val[1]; |
1837 uint32x4_t mask = vcltq_f32(lLtT, RrBb); | 1837 uint32x4_t mask = vcltq_f32(lLtT, RrBb); |
1838 return 0xFFFFFFFFFFFFFFFF != (uint64_t) vmovn_u32(mask); | 1838 return 0xFFFFFFFFFFFFFFFF != (uint64_t) vmovn_u32(mask); |
1839 #else | 1839 #else |
1840 SkRect devRectAsRect; | 1840 SkRect devRectAsRect; |
1841 SkRect devClipAsRect; | 1841 SkRect devClipAsRect; |
1842 devRect.store(&devRectAsRect.fLeft); | 1842 devRect.store(&devRectAsRect.fLeft); |
1843 devClip.store(&devClipAsRect.fLeft); | 1843 devClip.store(&devClipAsRect.fLeft); |
1844 return !devRectAsRect.isFinite() || !devRectAsRect.intersect(devClipAsRect); | 1844 return !devRectAsRect.isFinite() || !devRectAsRect.intersect(devClipAsRect); |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2509 if (special) { | 2509 if (special) { |
2510 SkPoint pt; | 2510 SkPoint pt; |
2511 iter.fMatrix->mapXY(x, y, &pt); | 2511 iter.fMatrix->mapXY(x, y, &pt); |
2512 iter.fDevice->drawSpecial(iter, special.get(), | 2512 iter.fDevice->drawSpecial(iter, special.get(), |
2513 SkScalarRoundToInt(pt.fX), | 2513 SkScalarRoundToInt(pt.fX), |
2514 SkScalarRoundToInt(pt.fY), pnt); | 2514 SkScalarRoundToInt(pt.fY), pnt); |
2515 } else { | 2515 } else { |
2516 iter.fDevice->drawBitmap(iter, bitmap, matrix, looper.paint()); | 2516 iter.fDevice->drawBitmap(iter, bitmap, matrix, looper.paint()); |
2517 } | 2517 } |
2518 } | 2518 } |
2519 | 2519 |
2520 LOOPER_END | 2520 LOOPER_END |
2521 } | 2521 } |
2522 | 2522 |
2523 // this one is non-virtual, so it can be called safely by other canvas apis | 2523 // this one is non-virtual, so it can be called safely by other canvas apis |
2524 void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, | 2524 void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, |
2525 const SkRect& dst, const SkPaint* paint, | 2525 const SkRect& dst, const SkPaint* paint, |
2526 SrcRectConstraint constraint) { | 2526 SrcRectConstraint constraint) { |
2527 if (bitmap.drawsNothing() || dst.isEmpty()) { | 2527 if (bitmap.drawsNothing() || dst.isEmpty()) { |
2528 return; | 2528 return; |
2529 } | 2529 } |
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3355 | 3355 |
3356 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 3356 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { |
3357 fCanvas->restoreToCount(fSaveCount); | 3357 fCanvas->restoreToCount(fSaveCount); |
3358 } | 3358 } |
3359 | 3359 |
3360 #ifdef SK_SUPPORT_LEGACY_NEW_SURFACE_API | 3360 #ifdef SK_SUPPORT_LEGACY_NEW_SURFACE_API |
3361 SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p
rops) { | 3361 SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p
rops) { |
3362 return this->makeSurface(info, props).release(); | 3362 return this->makeSurface(info, props).release(); |
3363 } | 3363 } |
3364 #endif | 3364 #endif |
OLD | NEW |