Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(306)

Side by Side Diff: src/gpu/GrDrawTarget.h

Issue 1414773002: Add the machinery to GrDrawTarget to enable topological sorting (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address code review comments Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrDrawTarget.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2010 Google Inc. 2 * Copyright 2010 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrDrawTarget_DEFINED 8 #ifndef GrDrawTarget_DEFINED
9 #define GrDrawTarget_DEFINED 9 #define GrDrawTarget_DEFINED
10 10
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 // The context may not be fully constructed and should not be used during Gr DrawTarget 46 // The context may not be fully constructed and should not be used during Gr DrawTarget
47 // construction. 47 // construction.
48 GrDrawTarget(GrGpu* gpu, GrResourceProvider*); 48 GrDrawTarget(GrGpu* gpu, GrResourceProvider*);
49 49
50 ~GrDrawTarget() override; 50 ~GrDrawTarget() override;
51 51
52 void makeClosed() { 52 void makeClosed() {
53 // We only close drawTargets When MDB is enabled. When MDB is disabled t here is only 53 // We only close drawTargets When MDB is enabled. When MDB is disabled t here is only
54 // ever one drawTarget and all calls will be funnelled into it. 54 // ever one drawTarget and all calls will be funnelled into it.
55 #ifdef ENABLE_MDB 55 #ifdef ENABLE_MDB
56 fClosed = true; 56 this->setFlag(kClosed_Flag);
57 #endif 57 #endif
58 } 58 }
59 bool isClosed() const { return fClosed; } 59 bool isClosed() const { return this->isSetFlag(kClosed_Flag); }
60
61 /*
62 * Notify this drawTarget that it relies on the contents of 'dependedOn'
63 */
64 void addDependency(GrSurface* dependedOn);
65
66 /*
67 * Does this drawTarget depend on 'dependedOn'?
68 */
69 bool dependsOn(GrDrawTarget* dependedOn) const {
70 return fDependencies.find(dependedOn) >= 0;
71 }
60 72
61 /** 73 /**
62 * Empties the draw buffer of any queued up draws. 74 * Empties the draw buffer of any queued up draws.
63 */ 75 */
64 void reset(); 76 void reset();
65 77
66 /** 78 /**
67 * This plays any queued up draws to its GrGpu target. It also resets this o bject (i.e. flushing 79 * This plays any queued up draws to its GrGpu target. It also resets this o bject (i.e. flushing
68 * is destructive). 80 * is destructive).
69 */ 81 */
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 } 209 }
198 210
199 GrContext* context() const { return fDrawTarget->fContext; } 211 GrContext* context() const { return fDrawTarget->fContext; }
200 GrResourceProvider* resourceProvider() const { return fDrawTarget->fReso urceProvider; } 212 GrResourceProvider* resourceProvider() const { return fDrawTarget->fReso urceProvider; }
201 GrDrawTarget* fDrawTarget; 213 GrDrawTarget* fDrawTarget;
202 friend class GrClipMaskManager; 214 friend class GrClipMaskManager;
203 }; 215 };
204 216
205 const CMMAccess cmmAccess() { return CMMAccess(this); } 217 const CMMAccess cmmAccess() { return CMMAccess(this); }
206 218
219
207 private: 220 private:
221 friend class GrDrawingManager; // for resetFlag & TopoSortTraits
222
223 enum Flags {
224 kClosed_Flag = 0x01, //!< This drawTarget can't accept any more bat ches
225
226 kWasOutput_Flag = 0x02, //!< Flag for topological sorting
227 kTempMark_Flag = 0x04, //!< Flag for topological sorting
228 };
229
230 void setFlag(uint32_t flag) {
231 fFlags |= flag;
232 }
233
234 void resetFlag(uint32_t flag) {
235 fFlags &= ~flag;
236 }
237
238 bool isSetFlag(uint32_t flag) const {
239 return SkToBool(fFlags & flag);
240 }
241
242 struct TopoSortTraits {
243 static void Output(GrDrawTarget* dt, int /* index */) {
244 dt->setFlag(GrDrawTarget::kWasOutput_Flag);
245 }
246 static bool WasOutput(const GrDrawTarget* dt) {
247 return dt->isSetFlag(GrDrawTarget::kWasOutput_Flag);
248 }
249 static void SetTempMark(GrDrawTarget* dt) {
250 dt->setFlag(GrDrawTarget::kTempMark_Flag);
251 }
252 static void ResetTempMark(GrDrawTarget* dt) {
253 dt->resetFlag(GrDrawTarget::kTempMark_Flag);
254 }
255 static bool IsTempMarked(const GrDrawTarget* dt) {
256 return dt->isSetFlag(GrDrawTarget::kTempMark_Flag);
257 }
258 static int NumDependencies(const GrDrawTarget* dt) {
259 return dt->fDependencies.count();
260 }
261 static GrDrawTarget* Dependency(GrDrawTarget* dt, int index) {
262 return dt->fDependencies[index];
263 }
264 };
265
208 void recordBatch(GrBatch*); 266 void recordBatch(GrBatch*);
209 bool installPipelineInDrawBatch(const GrPipelineBuilder* pipelineBuilder, 267 bool installPipelineInDrawBatch(const GrPipelineBuilder* pipelineBuilder,
210 const GrScissorState* scissor, 268 const GrScissorState* scissor,
211 GrDrawBatch* batch); 269 GrDrawBatch* batch);
212 270
213 // Makes a copy of the dst if it is necessary for the draw. Returns false if a copy is required 271 // Makes a copy of the dst if it is necessary for the draw. Returns false if a copy is required
214 // but couldn't be made. Otherwise, returns true. This method needs to be p rotected because it 272 // but couldn't be made. Otherwise, returns true. This method needs to be p rotected because it
215 // needs to be accessed by GLPrograms to setup a correct drawstate 273 // needs to be accessed by GLPrograms to setup a correct drawstate
216 bool setupDstReadIfNecessary(const GrPipelineBuilder&, 274 bool setupDstReadIfNecessary(const GrPipelineBuilder&,
217 const GrProcOptInfo& colorPOI, 275 const GrProcOptInfo& colorPOI,
218 const GrProcOptInfo& coveragePOI, 276 const GrProcOptInfo& coveragePOI,
219 GrXferProcessor::DstTexture*, 277 GrXferProcessor::DstTexture*,
220 const SkRect& batchBounds); 278 const SkRect& batchBounds);
221 279
222 void drawPathBatch(const GrPipelineBuilder& pipelineBuilder, GrDrawPathBatch Base* batch, 280 void drawPathBatch(const GrPipelineBuilder& pipelineBuilder, GrDrawPathBatch Base* batch,
223 GrPathRendering::FillType fill); 281 GrPathRendering::FillType fill);
224 // Check to see if this set of draw commands has been sent out 282 // Check to see if this set of draw commands has been sent out
225 void getPathStencilSettingsForFilltype(GrPathRendering::FillType, 283 void getPathStencilSettingsForFilltype(GrPathRendering::FillType,
226 const GrStencilAttachment*, 284 const GrStencilAttachment*,
227 GrStencilSettings*); 285 GrStencilSettings*);
228 bool setupClip(const GrPipelineBuilder&, 286 bool setupClip(const GrPipelineBuilder&,
229 GrPipelineBuilder::AutoRestoreFragmentProcessorState* , 287 GrPipelineBuilder::AutoRestoreFragmentProcessorState* ,
230 GrPipelineBuilder::AutoRestoreStencil*, 288 GrPipelineBuilder::AutoRestoreStencil*,
231 GrScissorState*, 289 GrScissorState*,
232 const SkRect* devBounds); 290 const SkRect* devBounds);
233 291
292 void addDependency(GrDrawTarget* dependedOn);
293
234 // Used only by CMM. 294 // Used only by CMM.
235 void clearStencilClip(const SkIRect&, bool insideClip, GrRenderTarget*); 295 void clearStencilClip(const SkIRect&, bool insideClip, GrRenderTarget*);
236 296
237 SkSTArray<256, SkAutoTUnref<GrBatch>, true> fBatches; 297 SkSTArray<256, SkAutoTUnref<GrBatch>, true> fBatches;
238 SkAutoTDelete<GrClipMaskManager> fClipMaskManager; 298 SkAutoTDelete<GrClipMaskManager> fClipMaskManager;
239 // The context is only in service of the clip mask manager, remove once CMM doesn't need this. 299 // The context is only in service of the clip mask manager, remove once CMM doesn't need this.
240 GrContext* fContext; 300 GrContext* fContext;
241 GrGpu* fGpu; 301 GrGpu* fGpu;
242 GrResourceProvider* fResourceProvider; 302 GrResourceProvider* fResourceProvider;
243 GrBatchFlushState fFlushState; 303 GrBatchFlushState fFlushState;
244 bool fFlushing; 304 bool fFlushing;
245 int fFirstUnpreparedBatch; 305 int fFirstUnpreparedBatch;
246 306
247 bool fClosed; 307 uint32_t fFlags;
308
309 // 'this' drawTarget relies on the output of the drawTargets in 'fDependenci es'
310 SkTDArray<GrDrawTarget*> fDependencies;
248 311
249 typedef SkRefCnt INHERITED; 312 typedef SkRefCnt INHERITED;
250 }; 313 };
251 314
252 #endif 315 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrDrawTarget.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698