aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkBitmapProcShader.cpp1
-rw-r--r--src/core/SkLinearBitmapPipeline.cpp16
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) {