diff options
-rw-r--r-- | src/core/SkBitmapProcShader.cpp | 1 | ||||
-rw-r--r-- | src/core/SkLinearBitmapPipeline.cpp | 16 |
2 files changed, 10 insertions, 7 deletions
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp index 3727bbca86..d230d147cb 100644 --- a/src/core/SkBitmapProcShader.cpp +++ b/src/core/SkBitmapProcShader.cpp @@ -225,6 +225,7 @@ private: static bool choose_linear_pipeline(const SkShader::ContextRec& rec, const SkImageInfo& srcInfo) { // These src attributes are not supported in the new 4f context (yet) // + if (srcInfo.profileType() != kSRGB_SkColorProfileType) { return false; } if (srcInfo.colorType() != kRGBA_8888_SkColorType && srcInfo.colorType() != kBGRA_8888_SkColorType && srcInfo.colorType() != kIndex_8_SkColorType diff --git a/src/core/SkLinearBitmapPipeline.cpp b/src/core/SkLinearBitmapPipeline.cpp index 415179a0b1..d9b4a8d504 100644 --- a/src/core/SkLinearBitmapPipeline.cpp +++ b/src/core/SkLinearBitmapPipeline.cpp @@ -584,18 +584,20 @@ public: void pointSpan(Span span) override { SkASSERT(fDest + span.count() <= fEnd); - int32_t x = (int32_t)span.startX(); - int32_t y = (int32_t)span.startY(); - const uint32_t* src = this->pixelAddress(x, y); - memmove(fDest, src, span.count() * sizeof(uint32_t)); - fDest += span.count(); + if (span.length() != 0.0f) { + int32_t x = SkScalarTruncToInt(span.startX()); + int32_t y = SkScalarTruncToInt(span.startY()); + const uint32_t* src = this->pixelAddress(x, y); + memmove(fDest, src, span.count() * sizeof(uint32_t)); + fDest += span.count(); + } } void repeatSpan(Span span, int32_t repeatCount) override { SkASSERT(fDest + span.count() * repeatCount <= fEnd); - int32_t x = (int32_t)span.startX(); - int32_t y = (int32_t)span.startY(); + int32_t x = SkScalarTruncToInt(span.startX()); + int32_t y = SkScalarTruncToInt(span.startY()); const uint32_t* src = this->pixelAddress(x, y); uint32_t* dest = fDest; while (repeatCount --> 0) { |