1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2010 Google Inc.
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.
6ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */
7ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
8ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#ifndef SkGpuDevice_DEFINED
9ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#define SkGpuDevice_DEFINED
10ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
11ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "SkGr.h"
12af951c9bc4cbb6e60b430194fe5127ebe99c53fbreed@google.com#include "SkBitmap.h"
13c5e641cc9947b8b2d3c63f908c7b98fa5b3d0f07Mike Reed#include "SkClipStackDevice.h"
14145d1c0fdcef63991d7f910cc067a653a8aa2c4ccommit-bot@chromium.org#include "SkPicture.h"
15ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "SkRegion.h"
16afe3005be3392e43bc51eb7eb2017eefaed85ad1bsalomon#include "SkSurface.h"
17c6f411e72b1fea6608f540f64a57bcacbe3378cdcsmartdalton#include "GrClipStackClip.h"
181105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman#include "GrRenderTargetContext.h"
1950398bf7f1953e640e5529616e710cf540799731bsalomon@google.com#include "GrContext.h"
20afbf2d6273cd22c683f20a7e5773843876af3085bsalomon#include "GrSurfacePriv.h"
219a1ed5d81dbfc7d5b67b568dfe12b4033a9af154erikchen#include "GrTypes.h"
22ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
2364bf76722ef06eabf51b55afda9f4ff431e41460robertphillipsclass GrAccelData;
24b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomonclass GrTextureProducer;
2564bf76722ef06eabf51b55afda9f4ff431e41460robertphillipsstruct GrCachedLayer;
26ddf2bfb190b2760ef6d28efe2cdc16c68287553dcommit-bot@chromium.org
27970587bf0ed73807632be7b0f349a96995cee4ecrobertphillipsclass SkSpecialImage;
28970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips
29ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com/**
3089443aba5bfa2b040dc9fd24938b7d0b3decd737reed *  Subclass of SkBaseDevice, which directs all drawing to the GrGpu owned by the
31ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com *  canvas.
32ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */
33c5e641cc9947b8b2d3c63f908c7b98fa5b3d0f07Mike Reedclass SK_API SkGpuDevice : public SkClipStackDevice {
34ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.compublic:
3574f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon    enum InitContents {
3674f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon        kClear_InitContents,
3774f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon        kUninit_InitContents
38d8a57af725e8fa8905207df3cf7465be50598752commit-bot@chromium.org    };
39123ac1d4eab757052407064623643fdc59f85363bsalomon@google.com
40123ac1d4eab757052407064623643fdc59f85363bsalomon@google.com    /**
411105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman     * Creates an SkGpuDevice from a GrRenderTargetContext whose backing width/height is
42d0d37cace08f12abf8d316e6949e947551d418e6senorblanco     * different than its actual width/height (e.g., approx-match scratch texture).
43d0d37cace08f12abf8d316e6949e947551d418e6senorblanco     */
449fab7e98d711968df3ec4fd2f3fe5c40820b2a0dRobert Phillips    static sk_sp<SkGpuDevice> Make(GrContext*, sk_sp<GrRenderTargetContext> renderTargetContext,
459fab7e98d711968df3ec4fd2f3fe5c40820b2a0dRobert Phillips                                   int width, int height, InitContents);
46d0d37cace08f12abf8d316e6949e947551d418e6senorblanco
47d0d37cace08f12abf8d316e6949e947551d418e6senorblanco    /**
48afe3005be3392e43bc51eb7eb2017eefaed85ad1bsalomon     * New device that will create an offscreen renderTarget based on the ImageInfo and
49afe3005be3392e43bc51eb7eb2017eefaed85ad1bsalomon     * sampleCount. The Budgeted param controls whether the device's backing store counts against
5096fcdcc219d2a0d3579719b84b28bede76efba64halcanary     * the resource cache budget. On failure, returns nullptr.
510ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips     * This entry point creates a kExact backing store. It is used when creating SkGpuDevices
520ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips     * for SkSurfaces.
5315a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org     */
5424e912869499352e8947d3943acb43edd7ffded6robertphillips    static sk_sp<SkGpuDevice> Make(GrContext*, SkBudgeted, const SkImageInfo&,
550ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips                                   int sampleCount, GrSurfaceOrigin,
567e922765545f42ce691e4f3d5fbbd4e44ba47ff1robertphillips                                   const SkSurfaceProps*, InitContents);
5715a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org
5806dd0a8222cc97236a2d20d563e27995983e6e0cjoshualitt    ~SkGpuDevice() override {}
597b201d22541957b128528bc481c6fd4ef0ed2258reed@google.com
60144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary    GrContext* context() const override { return fContext.get(); }
61ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
628eddfb50c0c9e4bcba6384a2ce39852b5fb5becbreed    // set all pixels to 0
638eddfb50c0c9e4bcba6384a2ce39852b5fb5becbreed    void clearAll();
648eddfb50c0c9e4bcba6384a2ce39852b5fb5becbreed
651105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman    void replaceRenderTargetContext(bool shouldRetainContent);
66abcfab4d68d53900ef33320bb2622696c14d14b0kkinnunen
671105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman    GrRenderTargetContext* accessRenderTargetContext() override;
68ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
69a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawPaint(const SkPaint& paint) override;
70a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint[],
71dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                    const SkPaint& paint) override;
72a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawRect(const SkRect& r, const SkPaint& paint) override;
73a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawRRect(const SkRRect& r, const SkPaint& paint) override;
74a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawDRRect(const SkRRect& outer, const SkRRect& inner,
75dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                    const SkPaint& paint) override;
76a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawRegion(const SkRegion& r, const SkPaint& paint) override;
77a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawOval(const SkRect& oval, const SkPaint& paint) override;
78a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
79dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                 bool useCenter, const SkPaint& paint) override;
80a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawPath(const SkPath& path, const SkPaint& paint,
81dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                  const SkMatrix* prePathMatrix, bool pathIsMutable) override;
82b964238f0bded00bae59c26c5f366a7780a0ef5fHal Canary    void drawBitmap(const SkBitmap&, SkScalar x, SkScalar y,
83dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                    const SkPaint&) override;
84a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawBitmapRect(const SkBitmap&, const SkRect* srcOrNull, const SkRect& dst,
85dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                        const SkPaint& paint, SkCanvas::SrcRectConstraint) override;
86a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawSprite(const SkBitmap& bitmap, int x, int y,
87dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                    const SkPaint& paint) override;
88a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawText(const void* text, size_t len, SkScalar x, SkScalar y,
89dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                  const SkPaint&) override;
90a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawPosText(const void* text, size_t len, const SkScalar pos[],
91dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                     int scalarsPerPos, const SkPoint& offset, const SkPaint&) override;
92a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawTextBlob(const SkTextBlob*, SkScalar x, SkScalar y,
93dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon                      const SkPaint& paint, SkDrawFilter* drawFilter) override;
942f6b5a47a50cdd218bc3302273be3a4a71add8fbMike Reed    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override;
954204da25aa4c6e0b321314aa32fd9affb4865563Mike Reed    void drawShadow(const SkPath&, const SkDrawShadowRec&) override;
96a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawAtlas(const SkImage* atlas, const SkRSXform[], const SkRect[],
97faba3715b8ddfaa0ce4df79bc8006e9bc7694e5bMike Reed                   const SkColor[], int count, SkBlendMode, const SkPaint&) override;
98a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawDevice(SkBaseDevice*, int x, int y, const SkPaint&) override;
99970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips
100a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawImage(const SkImage*, SkScalar x, SkScalar y, const SkPaint&) override;
101a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
102a5517e2b190a8083b38964972b031c13e99f1012reed                       const SkPaint&, SkCanvas::SrcRectConstraint) override;
1037b201d22541957b128528bc481c6fd4ef0ed2258reed@google.com
104a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawImageNine(const SkImage* image, const SkIRect& center,
10533a5fce6126dc5d3927a71fdc6c35af6f5893fd5joshualitt                       const SkRect& dst, const SkPaint& paint) override;
106a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
10733a5fce6126dc5d3927a71fdc6c35af6f5893fd5joshualitt                        const SkRect& dst, const SkPaint& paint) override;
10833a5fce6126dc5d3927a71fdc6c35af6f5893fd5joshualitt
109a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawImageLattice(const SkImage*, const SkCanvas::Lattice&,
11010e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett                          const SkRect& dst, const SkPaint&) override;
111a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawBitmapLattice(const SkBitmap&, const SkCanvas::Lattice&,
11210e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett                           const SkRect& dst, const SkPaint&) override;
11310e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett
11453f77bd4fdd76525b66b7f26d1c5c550858120dfFlorin Malita    void drawSpecial(SkSpecialImage*, int left, int top, const SkPaint& paint,
11553f77bd4fdd76525b66b7f26d1c5c550858120dfFlorin Malita                     SkImage*, const SkMatrix&) override;
1166451a0cea6007aff54565ec82e2f86cb1d32ecc7robertphillips    sk_sp<SkSpecialImage> makeSpecial(const SkBitmap&) override;
117e51c356ae4e074b9c286c50a4efce11205f7463creed    sk_sp<SkSpecialImage> makeSpecial(const SkImage*) override;
1186451a0cea6007aff54565ec82e2f86cb1d32ecc7robertphillips    sk_sp<SkSpecialImage> snapSpecial() override;
119970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips
12036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void flush() override;
121c64ee46a982695dc32b9cad4dd4e635ac09cd25eGreg Daniel    bool flushAndSignalSemaphores(int numSemaphores, GrBackendSemaphore* signalSemaphores);
122c64ee46a982695dc32b9cad4dd4e635ac09cd25eGreg Daniel    bool wait(int numSemaphores, const GrBackendSemaphore* waitSemaphores);
1237b201d22541957b128528bc481c6fd4ef0ed2258reed@google.com
12441e010cb901c0da9066c4df562030808c9ccd7f8reed    bool onAccessPixels(SkPixmap*) override;
125b7b7eb32f41729c136c939702b0c9a484accb541senorblanco@chromium.org
126ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comprotected:
12736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onReadPixels(const SkImageInfo&, void*, size_t, int, int) override;
12836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) override;
1299c240a1e6d314056fe0d6a8a33a3c60a6e19288frobertphillips    bool onShouldDisableLCD(const SkPaint&) const final;
130c69809745e6496564639e42ef998ad39adf7dfb8bsalomon@google.com
131ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comprivate:
1321105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman    // We want these unreffed in RenderTargetContext, GrContext order.
133144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary    sk_sp<GrContext>             fContext;
134144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary    sk_sp<GrRenderTargetContext> fRenderTargetContext;
13506dd0a8222cc97236a2d20d563e27995983e6e0cjoshualitt
136144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary    SkISize                      fSize;
137144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary    bool                         fOpaque;
13874f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon
13974f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon    enum Flags {
14074f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon        kNeedClear_Flag = 1 << 0,  //!< Surface requires an initial clear
14174f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon        kIsOpaque_Flag  = 1 << 1,  //!< Hint from client that rendering to this device will be
14274f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon                                   //   opaque even if the config supports alpha.
14374f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon    };
14474f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon    static bool CheckAlphaTypeAndGetFlags(const SkImageInfo* info, InitContents init,
14574f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon                                          unsigned* flags);
14689443aba5bfa2b040dc9fd24938b7d0b3decd737reed
1479fab7e98d711968df3ec4fd2f3fe5c40820b2a0dRobert Phillips    SkGpuDevice(GrContext*, sk_sp<GrRenderTargetContext>, int width, int height, unsigned flags);
14806cd732eff09d8f417ced2779e216d6ce6420f59bsalomon@google.com
14936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) override;
150e97f0856a8044866b12527819d14cdfbcdfd96f2bsalomon@google.com
151e8f3062a36d3682f4019309a32b5b84dc9eddf8creed    sk_sp<SkSurface> makeSurface(const SkImageInfo&, const SkSurfaceProps&) override;
15276f10a3bd936af7dbe2b5873d5a7eedd73cdc5dareed@google.com
153900c36779610dc65c42a5004ee3693fd70961ba4senorblanco    SkImageFilterCache* getImageFilterCache() override;
154841010f4bd54663e41900359fd32640767e6c8cdreed
15536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool forceConservativeRasterClip() const override { return true; }
15655b6d8be997a447ef9ce0f029697677a940bfc24senorblanco
1570166cfd311bb151af7745fe04fe850ee28b17e0aBrian Salomon    GrClipStackClip clip() const { return GrClipStackClip(&this->cs()); }
1583ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com
1593ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com    /**
1603ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com     * Helper functions called by drawBitmapCommon. By the time these are called the SkDraw's
1617edad87cdcb15e3d7f04cd3394047e3b82dfa355commit-bot@chromium.org     * matrix, clip, and the device's render target has already been set on GrContext.
1623ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com     */
1637edad87cdcb15e3d7f04cd3394047e3b82dfa355commit-bot@chromium.org
1647edad87cdcb15e3d7f04cd3394047e3b82dfa355commit-bot@chromium.org    // The tileSize and clippedSrcRect will be valid only if true is returned.
16585d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed    bool shouldTileImageID(uint32_t imageID, const SkIRect& imageRect,
16685d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed                           const SkMatrix& viewMatrix,
167e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                           const SkMatrix& srcToDstRectMatrix,
168514baff8be7f71111aa7bfb9b099a096b31e16ecBrian Salomon                           const GrSamplerParams& params,
16985d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed                           const SkRect* srcRectPtr,
17085d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed                           int maxTileSize,
17185d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed                           int* tileSize,
17285d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed                           SkIRect* clippedSubset) const;
17385d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed    // Just returns the predicate, not the out-tileSize or out-clippedSubset, as they are not
17485d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed    // needed at the moment.
17585d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed    bool shouldTileImage(const SkImage* image, const SkRect* srcRectPtr,
17685d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed                         SkCanvas::SrcRectConstraint constraint, SkFilterQuality quality,
177e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                         const SkMatrix& viewMatrix, const SkMatrix& srcToDstRect) const;
178c55271f2551533b37043aa2e37f754832a43073cbsalomon
179a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    sk_sp<SkSpecialImage> filterTexture(SkSpecialImage*,
180970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips                                        int left, int top,
181970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips                                        SkIPoint* offset,
182970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips                                        const SkImageFilter* filter);
183970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips
184e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon    // Splits bitmap into tiles of tileSize and draws them using separate textures for each tile.
1853ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com    void drawTiledBitmap(const SkBitmap& bitmap,
1865531d51ce7426bdae7563547326fcf0bf926a083joshualitt                         const SkMatrix& viewMatrix,
187e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                         const SkMatrix& srcToDstMatrix,
188bac6b0575a28792a6be350af44c0b05975d2a66brobertphillips@google.com                         const SkRect& srcRect,
1897edad87cdcb15e3d7f04cd3394047e3b82dfa355commit-bot@chromium.org                         const SkIRect& clippedSrcRect,
190514baff8be7f71111aa7bfb9b099a096b31e16ecBrian Salomon                         const GrSamplerParams& params,
191eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                         const SkPaint& paint,
192a5517e2b190a8083b38964972b031c13e99f1012reed                         SkCanvas::SrcRectConstraint,
193dec61503d02862760f3c91203a698636a02c882acommit-bot@chromium.org                         int tileSize,
194dec61503d02862760f3c91203a698636a02c882acommit-bot@chromium.org                         bool bicubic);
195ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
196e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon    // Used by drawTiledBitmap to draw each tile.
197e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon    void drawBitmapTile(const SkBitmap&,
198e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                        const SkMatrix& viewMatrix,
199e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                        const SkRect& dstRect,
200e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                        const SkRect& srcRect,
201514baff8be7f71111aa7bfb9b099a096b31e16ecBrian Salomon                        const GrSamplerParams& params,
202e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                        const SkPaint& paint,
203e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                        SkCanvas::SrcRectConstraint,
204e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                        bool bicubic,
205e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon                        bool needsTextureDomain);
206e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon
207b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon    void drawTextureProducer(GrTextureProducer*,
208c55271f2551533b37043aa2e37f754832a43073cbsalomon                             const SkRect* srcRect,
209c55271f2551533b37043aa2e37f754832a43073cbsalomon                             const SkRect* dstRect,
210b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon                             SkCanvas::SrcRectConstraint,
211c55271f2551533b37043aa2e37f754832a43073cbsalomon                             const SkMatrix& viewMatrix,
212b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon                             const GrClip&,
213b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon                             const SkPaint&);
214c55271f2551533b37043aa2e37f754832a43073cbsalomon
215b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon    void drawTextureProducerImpl(GrTextureProducer*,
216c55271f2551533b37043aa2e37f754832a43073cbsalomon                                 const SkRect& clippedSrcRect,
217c55271f2551533b37043aa2e37f754832a43073cbsalomon                                 const SkRect& clippedDstRect,
218b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon                                 SkCanvas::SrcRectConstraint,
219c55271f2551533b37043aa2e37f754832a43073cbsalomon                                 const SkMatrix& viewMatrix,
220c55271f2551533b37043aa2e37f754832a43073cbsalomon                                 const SkMatrix& srcToDstMatrix,
221b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon                                 const GrClip&,
222b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon                                 const SkPaint&);
223c55271f2551533b37043aa2e37f754832a43073cbsalomon
224d77061067af664a158058771189d152a30acd59arobertphillips    bool drawFilledDRRect(const SkMatrix& viewMatrix, const SkRRect& outer,
225d77061067af664a158058771189d152a30acd59arobertphillips                          const SkRRect& inner, const SkPaint& paint);
226d77061067af664a158058771189d152a30acd59arobertphillips
227a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawProducerNine(GrTextureProducer*, const SkIRect& center,
228f1ecd21bf6fd69953f78dd79502c7c9df92cdc9absalomon                          const SkRect& dst, const SkPaint&);
2292bbd0c61618405854e27f545cd501ebab93842a1bsalomon
230a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawProducerLattice(GrTextureProducer*, const SkCanvas::Lattice& lattice,
23110e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett                             const SkRect& dst, const SkPaint&);
23210e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett
233628ed0b22045a9544b56e00e73137d6050ce900ccommit-bot@chromium.org    bool drawDashLine(const SkPoint pts[2], const SkPaint& paint);
234a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed    void drawStrokedLine(const SkPoint pts[2], const SkPaint&);
235628ed0b22045a9544b56e00e73137d6050ce900ccommit-bot@chromium.org
236887cdf112809727c51890ba8b98b3ddce22249f0Mike Reed    void wireframeVertices(SkVertices::VertexMode, int vertexCount, const SkPoint verts[],
2372f6b5a47a50cdd218bc3302273be3a4a71add8fbMike Reed                           SkBlendMode, const uint16_t indices[], int indexCount, const SkPaint&);
2382f6b5a47a50cdd218bc3302273be3a4a71add8fbMike Reed
2391105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman    static sk_sp<GrRenderTargetContext> MakeRenderTargetContext(GrContext*,
2401105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman                                                                SkBudgeted,
2411105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman                                                                const SkImageInfo&,
2421105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman                                                                int sampleCount,
2431105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman                                                                GrSurfaceOrigin,
2441105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman                                                                const SkSurfaceProps*);
245abcfab4d68d53900ef33320bb2622696c14d14b0kkinnunen
246dbd3593e0b0cfb04f23b9d7bce623e6e32364b3fjoshualitt    friend class GrAtlasTextContext;
2477b05ff11ebc51f3f3abd1c1756337a04f563537erobertphillips    friend class SkSurface_Gpu;      // for access to surfaceProps
248c5e641cc9947b8b2d3c63f908c7b98fa5b3d0f07Mike Reed    typedef SkClipStackDevice INHERITED;
249ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com};
250ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
251ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#endif
252