| Index: src/core/SkBlitter_RGB16.cpp
|
| diff --git a/src/core/SkBlitter_RGB16.cpp b/src/core/SkBlitter_RGB16.cpp
|
| index ed9e103b6dbd538db3dd40e2257ec1b609a9949e..6724b12ace423493cbb02871dc3c3307783439fa 100644
|
| --- a/src/core/SkBlitter_RGB16.cpp
|
| +++ b/src/core/SkBlitter_RGB16.cpp
|
| @@ -1,4 +1,3 @@
|
| -
|
| /*
|
| * Copyright 2006 The Android Open Source Project
|
| *
|
| @@ -6,7 +5,6 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -
|
| #include "SkBlitRow.h"
|
| #include "SkCoreBlitters.h"
|
| #include "SkColorPriv.h"
|
| @@ -58,15 +56,14 @@ void sk_dither_memset16(uint16_t dst[], uint16_t value, uint16_t other,
|
|
|
| class SkRGB16_Blitter : public SkRasterBlitter {
|
| public:
|
| - SkRGB16_Blitter(const SkBitmap& device, const SkPaint& paint);
|
| + SkRGB16_Blitter(const SkPixmap& device, const SkPaint& paint);
|
| void blitH(int x, int y, int width) override;
|
| virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
|
| const int16_t* runs) override;
|
| void blitV(int x, int y, int height, SkAlpha alpha) override;
|
| void blitRect(int x, int y, int width, int height) override;
|
| - virtual void blitMask(const SkMask&,
|
| - const SkIRect&) override;
|
| - const SkBitmap* justAnOpaqueColor(uint32_t*) override;
|
| + void blitMask(const SkMask&, const SkIRect&) override;
|
| + const SkPixmap* justAnOpaqueColor(uint32_t*) override;
|
|
|
| protected:
|
| SkPMColor fSrcColor32;
|
| @@ -87,14 +84,12 @@ protected:
|
|
|
| class SkRGB16_Opaque_Blitter : public SkRGB16_Blitter {
|
| public:
|
| - SkRGB16_Opaque_Blitter(const SkBitmap& device, const SkPaint& paint);
|
| + SkRGB16_Opaque_Blitter(const SkPixmap& device, const SkPaint& paint);
|
| void blitH(int x, int y, int width) override;
|
| - virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
|
| - const int16_t* runs) override;
|
| + void blitAntiH(int x, int y, const SkAlpha* antialias, const int16_t* runs) override;
|
| void blitV(int x, int y, int height, SkAlpha alpha) override;
|
| void blitRect(int x, int y, int width, int height) override;
|
| - virtual void blitMask(const SkMask&,
|
| - const SkIRect&) override;
|
| + void blitMask(const SkMask&, const SkIRect&) override;
|
|
|
| private:
|
| typedef SkRGB16_Blitter INHERITED;
|
| @@ -103,10 +98,9 @@ private:
|
| #ifdef USE_BLACK_BLITTER
|
| class SkRGB16_Black_Blitter : public SkRGB16_Opaque_Blitter {
|
| public:
|
| - SkRGB16_Black_Blitter(const SkBitmap& device, const SkPaint& paint);
|
| + SkRGB16_Black_Blitter(const SkPixmap& device, const SkPaint& paint);
|
| void blitMask(const SkMask&, const SkIRect&) override;
|
| - virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
|
| - const int16_t* runs) override;
|
| + void blitAntiH(int x, int y, const SkAlpha* antialias, const int16_t* runs) override;
|
|
|
| private:
|
| typedef SkRGB16_Opaque_Blitter INHERITED;
|
| @@ -115,7 +109,7 @@ private:
|
|
|
| class SkRGB16_Shader_Blitter : public SkShaderBlitter {
|
| public:
|
| - SkRGB16_Shader_Blitter(const SkBitmap& device, const SkPaint& paint,
|
| + SkRGB16_Shader_Blitter(const SkPixmap& device, const SkPaint& paint,
|
| SkShader::Context* shaderContext);
|
| virtual ~SkRGB16_Shader_Blitter();
|
| void blitH(int x, int y, int width) override;
|
| @@ -138,7 +132,7 @@ private:
|
| // used only if the shader can perform shadSpan16
|
| class SkRGB16_Shader16_Blitter : public SkRGB16_Shader_Blitter {
|
| public:
|
| - SkRGB16_Shader16_Blitter(const SkBitmap& device, const SkPaint& paint,
|
| + SkRGB16_Shader16_Blitter(const SkPixmap& device, const SkPaint& paint,
|
| SkShader::Context* shaderContext);
|
| void blitH(int x, int y, int width) override;
|
| virtual void blitAntiH(int x, int y, const SkAlpha* antialias,
|
| @@ -151,7 +145,7 @@ private:
|
|
|
| class SkRGB16_Shader_Xfermode_Blitter : public SkShaderBlitter {
|
| public:
|
| - SkRGB16_Shader_Xfermode_Blitter(const SkBitmap& device, const SkPaint& paint,
|
| + SkRGB16_Shader_Xfermode_Blitter(const SkPixmap& device, const SkPaint& paint,
|
| SkShader::Context* shaderContext);
|
| virtual ~SkRGB16_Shader_Xfermode_Blitter();
|
| void blitH(int x, int y, int width) override;
|
| @@ -171,7 +165,7 @@ private:
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| #ifdef USE_BLACK_BLITTER
|
| -SkRGB16_Black_Blitter::SkRGB16_Black_Blitter(const SkBitmap& device, const SkPaint& paint)
|
| +SkRGB16_Black_Blitter::SkRGB16_Black_Blitter(const SkPixmap& device, const SkPaint& paint)
|
| : INHERITED(device, paint) {
|
| SkASSERT(paint.getShader() == NULL);
|
| SkASSERT(paint.getColorFilter() == NULL);
|
| @@ -208,7 +202,7 @@ static inline black_8_pixels(U8CPU mask, uint16_t dst[])
|
| #define SK_BLITBWMASK_NAME SkRGB16_Black_BlitBW
|
| #define SK_BLITBWMASK_ARGS
|
| #define SK_BLITBWMASK_BLIT8(mask, dst) black_8_pixels(mask, dst)
|
| -#define SK_BLITBWMASK_GETADDR getAddr16
|
| +#define SK_BLITBWMASK_GETADDR writable_addr16
|
| #define SK_BLITBWMASK_DEVTYPE uint16_t
|
| #include "SkBlitBWMaskTemplate.h"
|
|
|
| @@ -217,7 +211,7 @@ void SkRGB16_Black_Blitter::blitMask(const SkMask& mask,
|
| if (mask.fFormat == SkMask::kBW_Format) {
|
| SkRGB16_Black_BlitBW(fDevice, mask, clip);
|
| } else {
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(clip.fLeft, clip.fTop);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(clip.fLeft, clip.fTop);
|
| const uint8_t* SK_RESTRICT alpha = mask.getAddr8(clip.fLeft, clip.fTop);
|
| unsigned width = clip.width();
|
| unsigned height = clip.height();
|
| @@ -245,7 +239,7 @@ void SkRGB16_Black_Blitter::blitMask(const SkMask& mask,
|
| void SkRGB16_Black_Blitter::blitAntiH(int x, int y,
|
| const SkAlpha* SK_RESTRICT antialias,
|
| const int16_t* SK_RESTRICT runs) {
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
|
|
| for (;;) {
|
| int count = runs[0];
|
| @@ -277,14 +271,13 @@ void SkRGB16_Black_Blitter::blitAntiH(int x, int y,
|
| ///////////////////////////////////////////////////////////////////////////////
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkRGB16_Opaque_Blitter::SkRGB16_Opaque_Blitter(const SkBitmap& device,
|
| - const SkPaint& paint)
|
| -: INHERITED(device, paint) {}
|
| +SkRGB16_Opaque_Blitter::SkRGB16_Opaque_Blitter(const SkPixmap& device, const SkPaint& paint)
|
| + : INHERITED(device, paint) {}
|
|
|
| void SkRGB16_Opaque_Blitter::blitH(int x, int y, int width) {
|
| SkASSERT(width > 0);
|
| SkASSERT(x + width <= fDevice.width());
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
| uint16_t srcColor = fColor16;
|
|
|
| SkASSERT(fRawColor16 == srcColor);
|
| @@ -307,7 +300,7 @@ static inline int Bool2Int(int value) {
|
| void SkRGB16_Opaque_Blitter::blitAntiH(int x, int y,
|
| const SkAlpha* SK_RESTRICT antialias,
|
| const int16_t* SK_RESTRICT runs) {
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
| uint16_t srcColor = fRawColor16;
|
| uint32_t srcExpanded = fExpandedRaw16;
|
| int ditherInt = Bool2Int(fDoDither);
|
| @@ -372,7 +365,7 @@ void SkRGB16_Opaque_Blitter::blitAntiH(int x, int y,
|
| #define SK_BLITBWMASK_NAME SkRGB16_BlitBW
|
| #define SK_BLITBWMASK_ARGS , uint16_t color
|
| #define SK_BLITBWMASK_BLIT8(mask, dst) solid_8_pixels(mask, dst, color)
|
| -#define SK_BLITBWMASK_GETADDR getAddr16
|
| +#define SK_BLITBWMASK_GETADDR writable_addr16
|
| #define SK_BLITBWMASK_DEVTYPE uint16_t
|
| #include "SkBlitBWMaskTemplate.h"
|
|
|
| @@ -389,7 +382,7 @@ void SkRGB16_Opaque_Blitter::blitMask(const SkMask& mask,
|
| return;
|
| }
|
|
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(clip.fLeft, clip.fTop);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(clip.fLeft, clip.fTop);
|
| const uint8_t* SK_RESTRICT alpha = mask.getAddr8(clip.fLeft, clip.fTop);
|
| int width = clip.width();
|
| int height = clip.height();
|
| @@ -484,7 +477,7 @@ void SkRGB16_Opaque_Blitter::blitMask(const SkMask& mask,
|
| }
|
|
|
| void SkRGB16_Opaque_Blitter::blitV(int x, int y, int height, SkAlpha alpha) {
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
| size_t deviceRB = fDevice.rowBytes();
|
|
|
| // TODO: respect fDoDither
|
| @@ -500,7 +493,7 @@ void SkRGB16_Opaque_Blitter::blitV(int x, int y, int height, SkAlpha alpha) {
|
|
|
| void SkRGB16_Opaque_Blitter::blitRect(int x, int y, int width, int height) {
|
| SkASSERT(x + width <= fDevice.width() && y + height <= fDevice.height());
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
| size_t deviceRB = fDevice.rowBytes();
|
| uint16_t color16 = fColor16;
|
|
|
| @@ -524,7 +517,7 @@ void SkRGB16_Opaque_Blitter::blitRect(int x, int y, int width, int height) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkRGB16_Blitter::SkRGB16_Blitter(const SkBitmap& device, const SkPaint& paint)
|
| +SkRGB16_Blitter::SkRGB16_Blitter(const SkPixmap& device, const SkPaint& paint)
|
| : INHERITED(device) {
|
| SkColor color = paint.getColor();
|
|
|
| @@ -561,7 +554,7 @@ SkRGB16_Blitter::SkRGB16_Blitter(const SkBitmap& device, const SkPaint& paint)
|
| fColorProc16 = SkBlitRow::ColorFactory16(flags);
|
| }
|
|
|
| -const SkBitmap* SkRGB16_Blitter::justAnOpaqueColor(uint32_t* value) {
|
| +const SkPixmap* SkRGB16_Blitter::justAnOpaqueColor(uint32_t* value) {
|
| if (!fDoDither && 256 == fScale) {
|
| *value = fRawColor16;
|
| return &fDevice;
|
| @@ -572,7 +565,7 @@ const SkBitmap* SkRGB16_Blitter::justAnOpaqueColor(uint32_t* value) {
|
| void SkRGB16_Blitter::blitH(int x, int y, int width) {
|
| SkASSERT(width > 0);
|
| SkASSERT(x + width <= fDevice.width());
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
|
|
| fColorProc16(device, fSrcColor32, width, x, y);
|
| }
|
| @@ -580,7 +573,7 @@ void SkRGB16_Blitter::blitH(int x, int y, int width) {
|
| void SkRGB16_Blitter::blitAntiH(int x, int y,
|
| const SkAlpha* SK_RESTRICT antialias,
|
| const int16_t* SK_RESTRICT runs) {
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
| uint32_t srcExpanded = fExpandedRaw16;
|
| unsigned scale = fScale;
|
|
|
| @@ -624,7 +617,7 @@ static inline void blend_8_pixels(U8CPU bw, uint16_t dst[], unsigned dst_scale,
|
| #define SK_BLITBWMASK_NAME SkRGB16_BlendBW
|
| #define SK_BLITBWMASK_ARGS , unsigned dst_scale, U16CPU src_color
|
| #define SK_BLITBWMASK_BLIT8(mask, dst) blend_8_pixels(mask, dst, dst_scale, src_color)
|
| -#define SK_BLITBWMASK_GETADDR getAddr16
|
| +#define SK_BLITBWMASK_GETADDR writable_addr16
|
| #define SK_BLITBWMASK_DEVTYPE uint16_t
|
| #include "SkBlitBWMaskTemplate.h"
|
|
|
| @@ -635,7 +628,7 @@ void SkRGB16_Blitter::blitMask(const SkMask& mask,
|
| return;
|
| }
|
|
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(clip.fLeft, clip.fTop);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(clip.fLeft, clip.fTop);
|
| const uint8_t* SK_RESTRICT alpha = mask.getAddr8(clip.fLeft, clip.fTop);
|
| int width = clip.width();
|
| int height = clip.height();
|
| @@ -659,7 +652,7 @@ void SkRGB16_Blitter::blitMask(const SkMask& mask,
|
| }
|
|
|
| void SkRGB16_Blitter::blitV(int x, int y, int height, SkAlpha alpha) {
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
| size_t deviceRB = fDevice.rowBytes();
|
|
|
| // TODO: respect fDoDither
|
| @@ -675,7 +668,7 @@ void SkRGB16_Blitter::blitV(int x, int y, int height, SkAlpha alpha) {
|
|
|
| void SkRGB16_Blitter::blitRect(int x, int y, int width, int height) {
|
| SkASSERT(x + width <= fDevice.width() && y + height <= fDevice.height());
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
| size_t deviceRB = fDevice.rowBytes();
|
|
|
| while (--height >= 0) {
|
| @@ -686,17 +679,18 @@ void SkRGB16_Blitter::blitRect(int x, int y, int width, int height) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkRGB16_Shader16_Blitter::SkRGB16_Shader16_Blitter(const SkBitmap& device,
|
| +SkRGB16_Shader16_Blitter::SkRGB16_Shader16_Blitter(const SkPixmap& device,
|
| const SkPaint& paint,
|
| SkShader::Context* shaderContext)
|
| - : SkRGB16_Shader_Blitter(device, paint, shaderContext) {
|
| + : SkRGB16_Shader_Blitter(device, paint, shaderContext)
|
| +{
|
| SkASSERT(SkShader::CanCallShadeSpan16(fShaderFlags));
|
| }
|
|
|
| void SkRGB16_Shader16_Blitter::blitH(int x, int y, int width) {
|
| SkASSERT(x + width <= fDevice.width());
|
|
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
| SkShader::Context* shaderContext = fShaderContext;
|
|
|
| int alpha = shaderContext->getSpan16Alpha();
|
| @@ -711,7 +705,7 @@ void SkRGB16_Shader16_Blitter::blitH(int x, int y, int width) {
|
|
|
| void SkRGB16_Shader16_Blitter::blitRect(int x, int y, int width, int height) {
|
| SkShader::Context* shaderContext = fShaderContext;
|
| - uint16_t* dst = fDevice.getAddr16(x, y);
|
| + uint16_t* dst = fDevice.writable_addr16(x, y);
|
| size_t dstRB = fDevice.rowBytes();
|
| int alpha = shaderContext->getSpan16Alpha();
|
|
|
| @@ -759,7 +753,7 @@ void SkRGB16_Shader16_Blitter::blitAntiH(int x, int y,
|
| const int16_t* SK_RESTRICT runs) {
|
| SkShader::Context* shaderContext = fShaderContext;
|
| SkPMColor* SK_RESTRICT span = fBuffer;
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
|
|
| int alpha = shaderContext->getSpan16Alpha();
|
| uint16_t* span16 = (uint16_t*)span;
|
| @@ -810,10 +804,11 @@ void SkRGB16_Shader16_Blitter::blitAntiH(int x, int y,
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkRGB16_Shader_Blitter::SkRGB16_Shader_Blitter(const SkBitmap& device,
|
| +SkRGB16_Shader_Blitter::SkRGB16_Shader_Blitter(const SkPixmap& device,
|
| const SkPaint& paint,
|
| SkShader::Context* shaderContext)
|
| -: INHERITED(device, paint, shaderContext) {
|
| + : INHERITED(device, paint, shaderContext)
|
| +{
|
| SkASSERT(paint.getXfermode() == NULL);
|
|
|
| fBuffer = (SkPMColor*)sk_malloc_throw(device.width() * sizeof(SkPMColor));
|
| @@ -845,14 +840,14 @@ void SkRGB16_Shader_Blitter::blitH(int x, int y, int width) {
|
|
|
| fShaderContext->shadeSpan(x, y, fBuffer, width);
|
| // shaders take care of global alpha, so we pass 0xFF (should be ignored)
|
| - fOpaqueProc(fDevice.getAddr16(x, y), fBuffer, width, 0xFF, x, y);
|
| + fOpaqueProc(fDevice.writable_addr16(x, y), fBuffer, width, 0xFF, x, y);
|
| }
|
|
|
| void SkRGB16_Shader_Blitter::blitRect(int x, int y, int width, int height) {
|
| SkShader::Context* shaderContext = fShaderContext;
|
| SkBlitRow::Proc16 proc = fOpaqueProc;
|
| SkPMColor* buffer = fBuffer;
|
| - uint16_t* dst = fDevice.getAddr16(x, y);
|
| + uint16_t* dst = fDevice.writable_addr16(x, y);
|
| size_t dstRB = fDevice.rowBytes();
|
|
|
| if (fShaderFlags & SkShader::kConstInY32_Flag) {
|
| @@ -891,7 +886,7 @@ void SkRGB16_Shader_Blitter::blitAntiH(int x, int y,
|
| const int16_t* SK_RESTRICT runs) {
|
| SkShader::Context* shaderContext = fShaderContext;
|
| SkPMColor* SK_RESTRICT span = fBuffer;
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
|
|
| for (;;) {
|
| int count = *runs;
|
| @@ -937,9 +932,10 @@ void SkRGB16_Shader_Blitter::blitAntiH(int x, int y,
|
| ///////////////////////////////////////////////////////////////////////
|
|
|
| SkRGB16_Shader_Xfermode_Blitter::SkRGB16_Shader_Xfermode_Blitter(
|
| - const SkBitmap& device, const SkPaint& paint,
|
| + const SkPixmap& device, const SkPaint& paint,
|
| SkShader::Context* shaderContext)
|
| -: INHERITED(device, paint, shaderContext) {
|
| + : INHERITED(device, paint, shaderContext)
|
| +{
|
| fXfermode = paint.getXfermode();
|
| SkASSERT(fXfermode);
|
| fXfermode->ref();
|
| @@ -957,7 +953,7 @@ SkRGB16_Shader_Xfermode_Blitter::~SkRGB16_Shader_Xfermode_Blitter() {
|
| void SkRGB16_Shader_Xfermode_Blitter::blitH(int x, int y, int width) {
|
| SkASSERT(x + width <= fDevice.width());
|
|
|
| - uint16_t* device = fDevice.getAddr16(x, y);
|
| + uint16_t* device = fDevice.writable_addr16(x, y);
|
| SkPMColor* span = fBuffer;
|
|
|
| fShaderContext->shadeSpan(x, y, span, width);
|
| @@ -971,7 +967,7 @@ void SkRGB16_Shader_Xfermode_Blitter::blitAntiH(int x, int y,
|
| SkXfermode* mode = fXfermode;
|
| SkPMColor* SK_RESTRICT span = fBuffer;
|
| uint8_t* SK_RESTRICT aaExpand = fAAExpand;
|
| - uint16_t* SK_RESTRICT device = fDevice.getAddr16(x, y);
|
| + uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
|
|
|
| for (;;) {
|
| int count = *runs;
|
| @@ -1021,7 +1017,7 @@ void SkRGB16_Shader_Xfermode_Blitter::blitAntiH(int x, int y,
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkBlitter* SkBlitter_ChooseD565(const SkBitmap& device, const SkPaint& paint,
|
| +SkBlitter* SkBlitter_ChooseD565(const SkPixmap& device, const SkPaint& paint,
|
| SkShader::Context* shaderContext,
|
| SkTBlitterAllocator* allocator) {
|
| SkASSERT(allocator != NULL);
|
|
|