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