| OLD | NEW |
| 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 GrBatchBuffer_DEFINED | 8 #ifndef GrBatchBuffer_DEFINED |
| 9 #define GrBatchBuffer_DEFINED | 9 #define GrBatchBuffer_DEFINED |
| 10 | 10 |
| 11 #include "GrBatchAtlas.h" | 11 #include "GrBatchAtlas.h" |
| 12 #include "GrBufferAllocPool.h" | 12 #include "GrBufferAllocPool.h" |
| 13 #include "GrPendingProgramElement.h" | 13 #include "GrPendingProgramElement.h" |
| 14 #include "GrPipeline.h" | 14 #include "GrPipeline.h" |
| 15 #include "GrGpu.h" | |
| 16 #include "GrTRecorder.h" | 15 #include "GrTRecorder.h" |
| 16 #include "GrVertices.h" |
| 17 | 17 |
| 18 /* | 18 /* |
| 19 * GrBatch instances use this object to allocate space for their geometry and to
issue the draws | 19 * GrBatch instances use this object to allocate space for their geometry and to
issue the draws |
| 20 * that render their batch. | 20 * that render their batch. |
| 21 */ | 21 */ |
| 22 | 22 |
| 23 class GrIndexBufferAllocPool; | 23 class GrIndexBufferAllocPool; |
| 24 class GrVertexBufferAllocPool; | 24 class GrVertexBufferAllocPool; |
| 25 | 25 |
| 26 class GrBatchTarget : public SkNoncopyable { | 26 class GrBatchTarget : public SkNoncopyable { |
| 27 public: | 27 public: |
| 28 typedef GrBatchAtlas::BatchToken BatchToken; | 28 typedef GrBatchAtlas::BatchToken BatchToken; |
| 29 GrBatchTarget(GrGpu* gpu, | 29 GrBatchTarget(GrGpu* gpu, |
| 30 GrVertexBufferAllocPool* vpool, | 30 GrVertexBufferAllocPool* vpool, |
| 31 GrIndexBufferAllocPool* ipool); | 31 GrIndexBufferAllocPool* ipool); |
| 32 | 32 |
| 33 typedef GrDrawTarget::DrawInfo DrawInfo; | |
| 34 void initDraw(const GrPrimitiveProcessor* primProc, const GrPipeline* pipeli
ne) { | 33 void initDraw(const GrPrimitiveProcessor* primProc, const GrPipeline* pipeli
ne) { |
| 35 GrNEW_APPEND_TO_RECORDER(fFlushBuffer, BufferedFlush, (primProc, pipelin
e)); | 34 GrNEW_APPEND_TO_RECORDER(fFlushBuffer, BufferedFlush, (primProc, pipelin
e)); |
| 36 fNumberOfDraws++; | 35 fNumberOfDraws++; |
| 37 fCurrentToken++; | 36 fCurrentToken++; |
| 38 } | 37 } |
| 39 | 38 |
| 40 class TextureUploader { | 39 class TextureUploader { |
| 41 public: | 40 public: |
| 42 TextureUploader(GrGpu* gpu) : fGpu(gpu) { SkASSERT(gpu); } | 41 TextureUploader(GrGpu* gpu) : fGpu(gpu) { SkASSERT(gpu); } |
| 43 | 42 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 }; | 75 }; |
| 77 | 76 |
| 78 void upload(Uploader* upload) { | 77 void upload(Uploader* upload) { |
| 79 if (this->asapToken() == upload->lastUploadToken()) { | 78 if (this->asapToken() == upload->lastUploadToken()) { |
| 80 fAsapUploads.push_back().reset(SkRef(upload)); | 79 fAsapUploads.push_back().reset(SkRef(upload)); |
| 81 } else { | 80 } else { |
| 82 fInlineUploads.push_back().reset(SkRef(upload)); | 81 fInlineUploads.push_back().reset(SkRef(upload)); |
| 83 } | 82 } |
| 84 } | 83 } |
| 85 | 84 |
| 86 void draw(const GrDrawTarget::DrawInfo& draw) { | 85 void draw(const GrVertices& vertices) { |
| 87 fFlushBuffer.back().fDraws.push_back(draw); | 86 fFlushBuffer.back().fVertexDraws.push_back(vertices); |
| 88 } | 87 } |
| 89 | 88 |
| 90 bool isIssued(BatchToken token) const { return fLastFlushedToken >= token; } | 89 bool isIssued(BatchToken token) const { return fLastFlushedToken >= token; } |
| 91 BatchToken currentToken() const { return fCurrentToken; } | 90 BatchToken currentToken() const { return fCurrentToken; } |
| 92 BatchToken asapToken() const { return fLastFlushedToken + 1; } | 91 BatchToken asapToken() const { return fLastFlushedToken + 1; } |
| 93 | 92 |
| 94 // TODO much of this complexity goes away when batch is everywhere | 93 // TODO much of this complexity goes away when batch is everywhere |
| 95 void resetNumberOfDraws() { fNumberOfDraws = 0; } | 94 void resetNumberOfDraws() { fNumberOfDraws = 0; } |
| 96 int numberOfDraws() const { return fNumberOfDraws; } | 95 int numberOfDraws() const { return fNumberOfDraws; } |
| 97 void preFlush() { | 96 void preFlush() { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 typedef void* TBufferAlign; // This wouldn't be enough align if a command us
ed long double. | 137 typedef void* TBufferAlign; // This wouldn't be enough align if a command us
ed long double. |
| 139 | 138 |
| 140 struct BufferedFlush { | 139 struct BufferedFlush { |
| 141 BufferedFlush(const GrPrimitiveProcessor* primProc, const GrPipeline* pi
peline) | 140 BufferedFlush(const GrPrimitiveProcessor* primProc, const GrPipeline* pi
peline) |
| 142 : fPrimitiveProcessor(primProc) | 141 : fPrimitiveProcessor(primProc) |
| 143 , fPipeline(pipeline) {} | 142 , fPipeline(pipeline) {} |
| 144 typedef GrPendingProgramElement<const GrPrimitiveProcessor> ProgramPrimi
tiveProcessor; | 143 typedef GrPendingProgramElement<const GrPrimitiveProcessor> ProgramPrimi
tiveProcessor; |
| 145 ProgramPrimitiveProcessor fPrimitiveProcessor; | 144 ProgramPrimitiveProcessor fPrimitiveProcessor; |
| 146 const GrPipeline* fPipeline; | 145 const GrPipeline* fPipeline; |
| 147 GrBatchTracker fBatchTracker; | 146 GrBatchTracker fBatchTracker; |
| 148 SkSTArray<1, DrawInfo, true> fDraws; | 147 SkSTArray<1, GrVertices, true> fVertexDraws; |
| 149 }; | 148 }; |
| 150 | 149 |
| 151 enum { | 150 enum { |
| 152 kFlushBufferInitialSizeInBytes = 8 * sizeof(BufferedFlush), | 151 kFlushBufferInitialSizeInBytes = 8 * sizeof(BufferedFlush), |
| 153 }; | 152 }; |
| 154 | 153 |
| 155 typedef GrTRecorder<BufferedFlush, TBufferAlign> FlushBuffer; | 154 typedef GrTRecorder<BufferedFlush, TBufferAlign> FlushBuffer; |
| 156 | 155 |
| 157 FlushBuffer fFlushBuffer; | 156 FlushBuffer fFlushBuffer; |
| 158 // TODO this is temporary | 157 // TODO this is temporary |
| 159 FlushBuffer::Iter fIter; | 158 FlushBuffer::Iter fIter; |
| 160 int fNumberOfDraws; | 159 int fNumberOfDraws; |
| 161 BatchToken fCurrentToken; | 160 BatchToken fCurrentToken; |
| 162 BatchToken fLastFlushedToken; // The next token to be flushed | 161 BatchToken fLastFlushedToken; // The next token to be flushed |
| 163 SkTArray<SkAutoTUnref<Uploader>, true> fAsapUploads; | 162 SkTArray<SkAutoTUnref<Uploader>, true> fAsapUploads; |
| 164 SkTArray<SkAutoTUnref<Uploader>, true> fInlineUploads; | 163 SkTArray<SkAutoTUnref<Uploader>, true> fInlineUploads; |
| 165 int fInlineUpdatesIndex; | 164 int fInlineUpdatesIndex; |
| 166 }; | 165 }; |
| 167 | 166 |
| 168 #endif | 167 #endif |
| OLD | NEW |