blob: 325ab5d7dcff6355ddc83aab6778fa7502bd6269 [file] [log] [blame]
Brian Osman62e7b5f2016-10-26 12:02:18 -04001/*
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
Brian Salomon69868af2016-12-22 15:42:51 -050011#include "GrGpuResource.h"
Brian Osman62e7b5f2016-10-26 12:02:18 -040012#include "GrOpList.h"
13
14#include "SkTArray.h"
15
16class GrAuditTrail;
Brian Osman62e7b5f2016-10-26 12:02:18 -040017class GrGpu;
Brian Salomon25a88092016-12-01 09:36:50 -050018class GrOp;
Robert Phillipsc7635fa2016-10-28 13:25:24 -040019class GrTextureProxy;
Brian Osman62e7b5f2016-10-26 12:02:18 -040020struct SkIPoint;
21struct SkIRect;
22
23class GrTextureOpList final : public GrOpList {
24public:
Robert Phillipsc7635fa2016-10-28 13:25:24 -040025 GrTextureOpList(GrTextureProxy*, GrGpu*, GrAuditTrail*);
Brian Osman62e7b5f2016-10-26 12:02:18 -040026
27 ~GrTextureOpList() override;
28
29 /**
Brian Salomon69868af2016-12-22 15:42:51 -050030 * Empties the draw buffer of any queued ops.
Brian Osman62e7b5f2016-10-26 12:02:18 -040031 */
32 void reset() override;
33
34 void abandonGpuResources() override {}
35 void freeGpuResources() override {}
36
37 /**
Brian Salomon69868af2016-12-22 15:42:51 -050038 * 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.
Brian Osman62e7b5f2016-10-26 12:02:18 -040040 */
Brian Salomon742e31d2016-12-07 17:06:19 -050041 void prepareOps(GrOpFlushState* flushState) override;
42 bool executeOps(GrOpFlushState* flushState) override;
Brian Osman62e7b5f2016-10-26 12:02:18 -040043
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
Brian Osman45580d32016-11-23 09:37:01 -050059 GrTextureOpList* asTextureOpList() override { return this; }
60
Brian Osman62e7b5f2016-10-26 12:02:18 -040061 SkDEBUGCODE(void dump() const override;)
62
63private:
Brian Salomon69868af2016-12-22 15:42:51 -050064 // The unique ID is only needed for the audit trail. This should be removed with MDB.
Brian Salomonf8334782017-01-03 09:42:58 -050065 void recordOp(std::unique_ptr<GrOp>, GrGpuResource::UniqueID renderTargetID);
Brian Osman62e7b5f2016-10-26 12:02:18 -040066
Brian Salomonf8334782017-01-03 09:42:58 -050067 SkSTArray<2, std::unique_ptr<GrOp>, true> fRecordedOps;
Brian Salomon25a88092016-12-01 09:36:50 -050068 GrGpu* fGpu;
Brian Osman62e7b5f2016-10-26 12:02:18 -040069
70 typedef GrOpList INHERITED;
71};
72
73#endif