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*, sk_sp<GrOpMemoryPool>, 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(GrContext*, 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(bool printDependencies) const override;) 60 61 private: 62 void deleteOp(int index); 63 void deleteOps(); 64 65 void purgeOpsWithUninstantiatedProxies() override; 66 67 void gatherProxyIntervals(GrResourceAllocator*) const override; 68 69 void recordOp(std::unique_ptr<GrOp>); 70 71 // The memory for the ops in 'fOpChains' is actually stored in 'fOpMemoryPool' 72 SkSTArray<2, std::unique_ptr<GrOp>, true> fRecordedOps; 73 74 typedef GrOpList INHERITED; 75 }; 76 77 #endif 78