SkCoreBlitters.h revision 395eabeb0e72334c45324874c6e009b54634df21
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkCoreBlitters_DEFINED
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkCoreBlitters_DEFINED
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
11a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkBitmapProcShader.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBlitter.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBlitRow.h"
14a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkShader.h"
15a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkSmallAllocator.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkRasterBlitter : public SkBlitter {
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
1941e010cb901c0da9066c4df562030808c9ccd7f8reed    SkRasterBlitter(const SkPixmap& device) : fDevice(device) {}
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
2241e010cb901c0da9066c4df562030808c9ccd7f8reed    const SkPixmap fDevice;
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkBlitter INHERITED;
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkShaderBlitter : public SkRasterBlitter {
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
3087fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org    /**
3187fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org      *  The storage for shaderContext is owned by the caller, but the object itself is not.
3287fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org      *  The blitter only ensures that the storage always holds a live object, but it may
3387fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org      *  exchange that object.
3487fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org      */
3541e010cb901c0da9066c4df562030808c9ccd7f8reed    SkShaderBlitter(const SkPixmap& device, const SkPaint& paint,
3687fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org                    SkShader::Context* shaderContext);
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~SkShaderBlitter();
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
3987fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org    /**
4087fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org      *  Create a new shader context and uses it instead of the old one if successful.
4187fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org      *  Will create the context at the same location as the old one (this is safe
4287fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org      *  because the shader itself is unchanged).
4387fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org      */
4436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool resetShaderContext(const SkShader::ContextRec&) override;
4587fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org
4636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkShader::Context* getShaderContext() const override { return fShaderContext; }
4787fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
4987fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org    uint32_t            fShaderFlags;
5087fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org    const SkShader*     fShader;
5187fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org    SkShader::Context*  fShaderContext;
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // illegal
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkShaderBlitter& operator=(const SkShaderBlitter&);
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkRasterBlitter INHERITED;
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com///////////////////////////////////////////////////////////////////////////////
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
62126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comclass SkA8_Coverage_Blitter : public SkRasterBlitter {
63126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.compublic:
6441e010cb901c0da9066c4df562030808c9ccd7f8reed    SkA8_Coverage_Blitter(const SkPixmap& device, const SkPaint& paint);
6536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitH(int x, int y, int width) override;
6636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override;
6736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitV(int x, int y, int height, SkAlpha alpha) override;
6836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitRect(int x, int y, int width, int height) override;
6936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitMask(const SkMask&, const SkIRect&) override;
7041e010cb901c0da9066c4df562030808c9ccd7f8reed    const SkPixmap* justAnOpaqueColor(uint32_t*) override;
71126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com};
72126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com
738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkA8_Blitter : public SkRasterBlitter {
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
7541e010cb901c0da9066c4df562030808c9ccd7f8reed    SkA8_Blitter(const SkPixmap& device, const SkPaint& paint);
763dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitH(int x, int y, int width) override;
773dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override;
783dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitV(int x, int y, int height, SkAlpha alpha) override;
793dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitRect(int x, int y, int width, int height) override;
803dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitMask(const SkMask&, const SkIRect&) override;
813dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    const SkPixmap* justAnOpaqueColor(uint32_t*) override;
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    unsigned fSrcA;
858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // illegal
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkA8_Blitter& operator=(const SkA8_Blitter&);
888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkRasterBlitter INHERITED;
908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkA8_Shader_Blitter : public SkShaderBlitter {
938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
9441e010cb901c0da9066c4df562030808c9ccd7f8reed    SkA8_Shader_Blitter(const SkPixmap& device, const SkPaint& paint,
9587fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org                        SkShader::Context* shaderContext);
968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~SkA8_Shader_Blitter();
973dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitH(int x, int y, int width) override;
983dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override;
993dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitMask(const SkMask&, const SkIRect&) override;
1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkXfermode* fXfermode;
1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkPMColor*  fBuffer;
1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint8_t*    fAAExpand;
1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // illegal
1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkA8_Shader_Blitter& operator=(const SkA8_Shader_Blitter&);
1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkShaderBlitter INHERITED;
1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////
1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkARGB32_Blitter : public SkRasterBlitter {
1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
11641e010cb901c0da9066c4df562030808c9ccd7f8reed    SkARGB32_Blitter(const SkPixmap& device, const SkPaint& paint);
1173dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitH(int x, int y, int width) override;
1183dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override;
1193dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitV(int x, int y, int height, SkAlpha alpha) override;
1203dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitRect(int x, int y, int width, int height) override;
1213dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitMask(const SkMask&, const SkIRect&) override;
1223dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    const SkPixmap* justAnOpaqueColor(uint32_t*) override;
1236983f66d8b3a489133b751e2cef03e72a03bfeaereed    void blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) override;
1246983f66d8b3a489133b751e2cef03e72a03bfeaereed    void blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) override;
1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
127ee467ee79d449ebe6ae7f7946e613cc70a479c69reed@google.com    SkColor                fColor;
128ee467ee79d449ebe6ae7f7946e613cc70a479c69reed@google.com    SkPMColor              fPMColor;
1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    unsigned fSrcA, fSrcR, fSrcG, fSrcB;
1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // illegal
1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkARGB32_Blitter& operator=(const SkARGB32_Blitter&);
1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkRasterBlitter INHERITED;
1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
139dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.comclass SkARGB32_Opaque_Blitter : public SkARGB32_Blitter {
1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
14141e010cb901c0da9066c4df562030808c9ccd7f8reed    SkARGB32_Opaque_Blitter(const SkPixmap& device, const SkPaint& paint)
142dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.com        : INHERITED(device, paint) { SkASSERT(paint.getAlpha() == 0xFF); }
1433dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitMask(const SkMask&, const SkIRect&) override;
1446983f66d8b3a489133b751e2cef03e72a03bfeaereed    void blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) override;
1456983f66d8b3a489133b751e2cef03e72a03bfeaereed    void blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) override;
146dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.com
1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkARGB32_Blitter INHERITED;
1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
151dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.comclass SkARGB32_Black_Blitter : public SkARGB32_Opaque_Blitter {
1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
15341e010cb901c0da9066c4df562030808c9ccd7f8reed    SkARGB32_Black_Blitter(const SkPixmap& device, const SkPaint& paint)
154dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.com        : INHERITED(device, paint) {}
1553dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed    void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override;
1566983f66d8b3a489133b751e2cef03e72a03bfeaereed    void blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) override;
1576983f66d8b3a489133b751e2cef03e72a03bfeaereed    void blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) override;
158b602b8e5334edc0bfcdf086c2ea58e2b5d5f1f3breed@android.com
1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
160dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.com    typedef SkARGB32_Opaque_Blitter INHERITED;
1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkARGB32_Shader_Blitter : public SkShaderBlitter {
1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
16541e010cb901c0da9066c4df562030808c9ccd7f8reed    SkARGB32_Shader_Blitter(const SkPixmap& device, const SkPaint& paint,
16687fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org                            SkShader::Context* shaderContext);
1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~SkARGB32_Shader_Blitter();
16836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitH(int x, int y, int width) override;
16936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitV(int x, int y, int height, SkAlpha alpha) override;
17036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitRect(int x, int y, int width, int height) override;
17136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override;
17236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void blitMask(const SkMask&, const SkIRect&) override;
173395eabeb0e72334c45324874c6e009b54634df21reed
1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
175c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    SkXfermode*         fXfermode;
176c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    SkPMColor*          fBuffer;
177c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    SkBlitRow::Proc32   fProc32;
178c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com    SkBlitRow::Proc32   fProc32Blend;
17913201e74f43b9c5fa173339eb36de515370e6973reed@google.com    bool                fShadeDirectlyIntoDevice;
18013201e74f43b9c5fa173339eb36de515370e6973reed@google.com    bool                fConstInY;
181395eabeb0e72334c45324874c6e009b54634df21reed
1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // illegal
1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkARGB32_Shader_Blitter& operator=(const SkARGB32_Shader_Blitter&);
184395eabeb0e72334c45324874c6e009b54634df21reed
1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkShaderBlitter INHERITED;
1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
188395eabeb0e72334c45324874c6e009b54634df21reedclass SkARGB32_Shader4f_Blitter : public SkARGB32_Shader_Blitter {
189395eabeb0e72334c45324874c6e009b54634df21reedpublic:
190395eabeb0e72334c45324874c6e009b54634df21reed    SkARGB32_Shader4f_Blitter(const SkPixmap& device, const SkPaint& paint,
191395eabeb0e72334c45324874c6e009b54634df21reed                              SkShader::Context* shaderContext);
192395eabeb0e72334c45324874c6e009b54634df21reed    virtual ~SkARGB32_Shader4f_Blitter();
193395eabeb0e72334c45324874c6e009b54634df21reed    void blitH(int x, int y, int width) override;
194395eabeb0e72334c45324874c6e009b54634df21reed    void blitV(int x, int y, int height, SkAlpha alpha) override;
195395eabeb0e72334c45324874c6e009b54634df21reed    void blitRect(int x, int y, int width, int height) override;
196395eabeb0e72334c45324874c6e009b54634df21reed    void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override;
197395eabeb0e72334c45324874c6e009b54634df21reed    void blitMask(const SkMask&, const SkIRect&) override;
198395eabeb0e72334c45324874c6e009b54634df21reed
199395eabeb0e72334c45324874c6e009b54634df21reedprivate:
200395eabeb0e72334c45324874c6e009b54634df21reed    SkXfermode::PM4fState   fState;
201395eabeb0e72334c45324874c6e009b54634df21reed    SkXfermode::PM4fProc1   fProc1;
202395eabeb0e72334c45324874c6e009b54634df21reed    SkXfermode::PM4fProcN   fProcN;
203395eabeb0e72334c45324874c6e009b54634df21reed    SkPM4f*                 fBuffer;
204395eabeb0e72334c45324874c6e009b54634df21reed    bool                    fConstInY;
205395eabeb0e72334c45324874c6e009b54634df21reed
206395eabeb0e72334c45324874c6e009b54634df21reed    // illegal
207395eabeb0e72334c45324874c6e009b54634df21reed    SkARGB32_Shader4f_Blitter& operator=(const SkARGB32_Shader4f_Blitter&);
208395eabeb0e72334c45324874c6e009b54634df21reed
209395eabeb0e72334c45324874c6e009b54634df21reed    typedef SkARGB32_Shader_Blitter INHERITED;
210395eabeb0e72334c45324874c6e009b54634df21reed};
211395eabeb0e72334c45324874c6e009b54634df21reed
2121fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com///////////////////////////////////////////////////////////////////////////////
2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2141fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com/*  These return the correct subclass of blitter for their device config.
2151fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com
2161fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com    Currently, they make the following assumptions about the state of the
2171fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com    paint:
218981d4798007b91e2e19c13b171583927a56df63breed@google.com
2191fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com    1. If there is an xfermode, there will also be a shader
2201fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com    2. If there is a colorfilter, there will be a shader that itself handles
2211fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com       calling the filter, so the blitter can always ignore the colorfilter obj
2221fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com
2231fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com    These pre-conditions must be handled by the caller, in our case
2241fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com    SkBlitter::Choose(...)
2251fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com */
2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
22741e010cb901c0da9066c4df562030808c9ccd7f8reedSkBlitter* SkBlitter_ChooseD565(const SkPixmap& device, const SkPaint& paint,
22887fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org                                SkShader::Context* shaderContext,
229a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org                                SkTBlitterAllocator* allocator);
2301fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com
2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
232