Home | History | Annotate | Download | only in gpu
      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 #include "GrSurfaceProxy.h"
     14 
     15 #include "SkTArray.h"
     16 
     17 class GrAuditTrail;
     18 class GrGpu;
     19 class GrOp;
     20 class GrTextureProxy;
     21 struct SkIPoint;
     22 struct SkIRect;
     23 
     24 class GrTextureOpList final : public GrOpList {
     25 public:
     26     GrTextureOpList(GrResourceProvider*, GrTextureProxy*, GrAuditTrail*);
     27     ~GrTextureOpList() override;
     28 
     29     /**
     30      * Empties the draw buffer of any queued ops.
     31      */
     32     void endFlush() override;
     33 
     34     /**
     35      * Together these two functions flush all queued ops to GrGpuCommandBuffer. The return value
     36      * of executeOps() indicates whether any commands were actually issued to the GPU.
     37      */
     38     void onPrepare(GrOpFlushState* flushState) override;
     39     bool onExecute(GrOpFlushState* flushState) override;
     40 
     41     /**
     42      * Copies a pixel rectangle from one surface to another. This call may finalize
     43      * reserved vertex/index data (as though a draw call was made). The src pixels
     44      * copied are specified by srcRect. They are copied to a rect of the same
     45      * size in dst with top left at dstPoint. If the src rect is clipped by the
     46      * src bounds then  pixel values in the dst rect corresponding to area clipped
     47      * by the src rect are not overwritten. This method is not guaranteed to succeed
     48      * depending on the type of surface, configs, etc, and the backend-specific
     49      * limitations.
     50      */
     51     bool copySurface(const GrCaps& caps,
     52                      GrSurfaceProxy* dst,
     53                      GrSurfaceProxy* src,
     54                      const SkIRect& srcRect,
     55                      const SkIPoint& dstPoint) override;
     56 
     57     GrTextureOpList* asTextureOpList() override { return this; }
     58 
     59     SkDEBUGCODE(void dump() const override;)
     60 
     61     SkDEBUGCODE(int numOps() const override { return fRecordedOps.count(); })
     62 
     63 private:
     64     void purgeOpsWithUninstantiatedProxies() override;
     65 
     66     void gatherProxyIntervals(GrResourceAllocator*) const override;
     67 
     68     void recordOp(std::unique_ptr<GrOp>);
     69 
     70     SkSTArray<2, std::unique_ptr<GrOp>, true> fRecordedOps;
     71 
     72     typedef GrOpList INHERITED;
     73 };
     74 
     75 #endif
     76