blob: a9ec1ccfdbba638414cff4203eef3c24b505f07d [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"
Robert Phillipsf7a72612017-03-31 10:03:45 -040013#include "GrSurfaceProxy.h"
Brian Osman62e7b5f2016-10-26 12:02:18 -040014
15#include "SkTArray.h"
16
17class GrAuditTrail;
Brian Osman62e7b5f2016-10-26 12:02:18 -040018class GrGpu;
Brian Salomon25a88092016-12-01 09:36:50 -050019class GrOp;
Robert Phillipsc7635fa2016-10-28 13:25:24 -040020class GrTextureProxy;
Brian Osman62e7b5f2016-10-26 12:02:18 -040021struct SkIPoint;
22struct SkIRect;
23
24class GrTextureOpList final : public GrOpList {
25public:
Robert Phillips18e94842017-05-15 13:06:44 -040026 GrTextureOpList(GrTextureProxy*, GrAuditTrail*);
Brian Osman62e7b5f2016-10-26 12:02:18 -040027
28 ~GrTextureOpList() override;
29
30 /**
Brian Salomon69868af2016-12-22 15:42:51 -050031 * Empties the draw buffer of any queued ops.
Brian Osman62e7b5f2016-10-26 12:02:18 -040032 */
33 void reset() override;
34
35 void abandonGpuResources() override {}
36 void freeGpuResources() override {}
37
38 /**
Brian Salomon69868af2016-12-22 15:42:51 -050039 * Together these two functions flush all queued ops to GrGpuCommandBuffer. The return value
40 * of executeOps() indicates whether any commands were actually issued to the GPU.
Brian Osman62e7b5f2016-10-26 12:02:18 -040041 */
Brian Salomon742e31d2016-12-07 17:06:19 -050042 void prepareOps(GrOpFlushState* flushState) override;
43 bool executeOps(GrOpFlushState* flushState) override;
Brian Osman62e7b5f2016-10-26 12:02:18 -040044
45 /**
46 * Copies a pixel rectangle from one surface to another. This call may finalize
47 * reserved vertex/index data (as though a draw call was made). The src pixels
48 * copied are specified by srcRect. They are copied to a rect of the same
49 * size in dst with top left at dstPoint. If the src rect is clipped by the
50 * src bounds then pixel values in the dst rect corresponding to area clipped
51 * by the src rect are not overwritten. This method is not guaranteed to succeed
52 * depending on the type of surface, configs, etc, and the backend-specific
53 * limitations.
54 */
Robert Phillipsbf25d432017-04-07 10:08:53 -040055 bool copySurface(GrResourceProvider* resourceProvider,
56 GrSurfaceProxy* dst,
57 GrSurfaceProxy* src,
Brian Osman62e7b5f2016-10-26 12:02:18 -040058 const SkIRect& srcRect,
59 const SkIPoint& dstPoint);
60
Brian Osman45580d32016-11-23 09:37:01 -050061 GrTextureOpList* asTextureOpList() override { return this; }
62
Brian Osman62e7b5f2016-10-26 12:02:18 -040063 SkDEBUGCODE(void dump() const override;)
64
Robert Phillipsc84c0302017-05-08 15:35:11 -040065 SkDEBUGCODE(int numOps() const override { return fRecordedOps.count(); })
66
Brian Osman62e7b5f2016-10-26 12:02:18 -040067private:
Robert Phillips318c4192017-05-17 09:36:38 -040068 void recordOp(std::unique_ptr<GrOp>);
Brian Osman62e7b5f2016-10-26 12:02:18 -040069
Brian Salomonf8334782017-01-03 09:42:58 -050070 SkSTArray<2, std::unique_ptr<GrOp>, true> fRecordedOps;
Brian Osman62e7b5f2016-10-26 12:02:18 -040071
72 typedef GrOpList INHERITED;
73};
74
75#endif