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

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

Issue 1073943004: Join non-overlapping Xfer barriers (Closed) Base URL: https://skia.googlesource.com/skia.git@upload_4_implementxferbarriers
Patch Set: Created 5 years, 8 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/GrDrawTarget.cpp ('k') | src/gpu/GrTargetCommands.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 2015 Google Inc. 2 * Copyright 2015 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 GrTargetCommands_DEFINED 8 #ifndef GrTargetCommands_DEFINED
9 #define GrTargetCommands_DEFINED 9 #define GrTargetCommands_DEFINED
10 10
(...skipping 15 matching lines...) Expand all
26 class GrTargetCommands : ::SkNoncopyable { 26 class GrTargetCommands : ::SkNoncopyable {
27 struct SetState; 27 struct SetState;
28 28
29 public: 29 public:
30 GrTargetCommands(GrGpu* gpu, 30 GrTargetCommands(GrGpu* gpu,
31 GrVertexBufferAllocPool* vertexPool, 31 GrVertexBufferAllocPool* vertexPool,
32 GrIndexBufferAllocPool* indexPool) 32 GrIndexBufferAllocPool* indexPool)
33 : fCmdBuffer(kCmdBufferInitialSizeInBytes) 33 : fCmdBuffer(kCmdBufferInitialSizeInBytes)
34 , fPrevState(NULL) 34 , fPrevState(NULL)
35 , fBatchTarget(gpu, vertexPool, indexPool) 35 , fBatchTarget(gpu, vertexPool, indexPool)
36 , fDrawBatch(NULL) { 36 , fDrawBatch(NULL)
37 , fXferBarrier(NULL) {
37 } 38 }
38 39
39 class Cmd : ::SkNoncopyable { 40 class Cmd : ::SkNoncopyable {
40 public: 41 public:
41 enum CmdType { 42 enum CmdType {
42 kDraw_CmdType = 1, 43 kDraw_CmdType = 1,
43 kStencilPath_CmdType = 2, 44 kStencilPath_CmdType = 2,
44 kSetState_CmdType = 3, 45 kSetState_CmdType = 3,
45 kClear_CmdType = 4, 46 kClear_CmdType = 4,
46 kCopySurface_CmdType = 5, 47 kCopySurface_CmdType = 5,
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 void execute(GrGpu*, const SetState*) override; 299 void execute(GrGpu*, const SetState*) override;
299 300
300 // TODO it wouldn't be too hard to let batches allocate in the cmd buffe r 301 // TODO it wouldn't be too hard to let batches allocate in the cmd buffe r
301 SkAutoTUnref<GrBatch> fBatch; 302 SkAutoTUnref<GrBatch> fBatch;
302 303
303 private: 304 private:
304 GrBatchTarget* fBatchTarget; 305 GrBatchTarget* fBatchTarget;
305 }; 306 };
306 307
307 struct XferBarrier : public Cmd { 308 struct XferBarrier : public Cmd {
308 XferBarrier(GrXferBarrierType type) 309 XferBarrier(GrXferBarrierType type, GrRenderTarget* rt)
309 : Cmd(kXferBarrier_CmdType) 310 : Cmd(kXferBarrier_CmdType)
310 , fType(type) {} 311 , fType(type)
312 , fRenderTarget(rt) {}
311 313
312 void execute(GrGpu*, const SetState*) override; 314 void execute(GrGpu*, const SetState*) override;
313 315
314 const GrXferBarrierType fType; 316 const GrXferBarrierType fType;
315 SkIRect fBounds; 317 SkIRect fReadBounds;
318 SkIRect fInvalidBounds;
319
320 // The cmd buffer keeps these ptrs alive.
321 GrRenderTarget* const fRenderTarget;
322 SkSTArray<4, const GrXferProcessor*, true> fXferProcessors;
316 }; 323 };
317 324
318 static const int kCmdBufferInitialSizeInBytes = 8 * 1024; 325 static const int kCmdBufferInitialSizeInBytes = 8 * 1024;
319 326
320 typedef void* TCmdAlign; // This wouldn't be enough align if a command used long double. 327 typedef void* TCmdAlign; // This wouldn't be enough align if a command used long double.
321 typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer; 328 typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer;
322 329
323 CmdBuffer fCmdBuffer; 330 CmdBuffer fCmdBuffer;
324 SetState* fPrevState; 331 SetState* fPrevState;
325 GrBatchTarget fBatchTarget; 332 GrBatchTarget fBatchTarget;
326 // TODO hack until batch is everywhere 333 // TODO hack until batch is everywhere
327 GrTargetCommands::DrawBatch* fDrawBatch; 334 GrTargetCommands::DrawBatch* fDrawBatch;
335 XferBarrier* fXferBarrier;
328 336
329 // This will go away when everything uses batch. However, in the short ter m anything which 337 // This will go away when everything uses batch. However, in the short ter m anything which
330 // might be put into the GrInOrderDrawBuffer needs to make sure it closes t he last batch 338 // might be put into the GrInOrderDrawBuffer needs to make sure it closes t he last batch
331 void closeBatch(); 339 void closeBatch();
332 }; 340 };
333 341
334 #endif 342 #endif
335 343
OLDNEW
« no previous file with comments | « src/gpu/GrDrawTarget.cpp ('k') | src/gpu/GrTargetCommands.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698