• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrTexureOpList_DEFINED
9 #define GrTexureOpList_DEFINED
10 
11 #include "GrGpuResource.h"
12 #include "GrOpList.h"
13 
14 #include "SkTArray.h"
15 
16 class GrAuditTrail;
17 class GrGpu;
18 class GrOp;
19 class GrTextureProxy;
20 struct SkIPoint;
21 struct SkIRect;
22 
23 class GrTextureOpList final : public GrOpList {
24 public:
25     GrTextureOpList(GrTextureProxy*, GrGpu*, GrAuditTrail*);
26 
27     ~GrTextureOpList() override;
28 
29     /**
30      * Empties the draw buffer of any queued ops.
31      */
32     void reset() override;
33 
abandonGpuResources()34     void abandonGpuResources() override {}
freeGpuResources()35     void freeGpuResources() override {}
36 
37     /**
38      * Together these two functions flush all queued ops to GrGpuCommandBuffer. The return value
39      * of executeOps() indicates whether any commands were actually issued to the GPU.
40      */
41     void prepareOps(GrOpFlushState* flushState) override;
42     bool executeOps(GrOpFlushState* flushState) override;
43 
44     /**
45      * Copies a pixel rectangle from one surface to another. This call may finalize
46      * reserved vertex/index data (as though a draw call was made). The src pixels
47      * copied are specified by srcRect. They are copied to a rect of the same
48      * size in dst with top left at dstPoint. If the src rect is clipped by the
49      * src bounds then  pixel values in the dst rect corresponding to area clipped
50      * by the src rect are not overwritten. This method is not guaranteed to succeed
51      * depending on the type of surface, configs, etc, and the backend-specific
52      * limitations.
53      */
54     bool copySurface(GrSurface* dst,
55                      GrSurface* src,
56                      const SkIRect& srcRect,
57                      const SkIPoint& dstPoint);
58 
asTextureOpList()59     GrTextureOpList* asTextureOpList() override { return this; }
60 
61     SkDEBUGCODE(void dump() const override;)
62 
63 private:
64     // The unique ID is only needed for the audit trail. This should be removed with MDB.
65     void recordOp(std::unique_ptr<GrOp>, GrGpuResource::UniqueID renderTargetID);
66 
67     SkSTArray<2, std::unique_ptr<GrOp>, true> fRecordedOps;
68     GrGpu*                          fGpu;
69 
70     typedef GrOpList INHERITED;
71 };
72 
73 #endif
74