Index: src/gpu/GrInOrderDrawBuffer.h |
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h |
index ce82c889a76037d7ed751308d8f630bf77dff12a..b253768f84bdde01d8b8844fc039dcb9dc6fa334 100644 |
--- a/src/gpu/GrInOrderDrawBuffer.h |
+++ b/src/gpu/GrInOrderDrawBuffer.h |
@@ -72,6 +72,17 @@ protected: |
private: |
friend class GrTargetCommands; |
+ typedef GrTargetCommands::State State; |
+ |
+ State* allocState(const GrPrimitiveProcessor* primProc = NULL) { |
+ void* allocation = fPipelineBuffer.alloc(sizeof(State), SkChunkAlloc::kThrow_AllocFailType); |
+ return SkNEW_PLACEMENT_ARGS(allocation, State, (primProc)); |
+ } |
+ |
+ void unallocState(State* state) { |
+ state->unref(); |
+ fPipelineBuffer.unalloc(state); |
+ } |
void onReset() override; |
void onFlush() override; |
@@ -84,7 +95,6 @@ private: |
const SkRect& rect, |
const SkRect* localRect, |
const SkMatrix* localMatrix) override; |
- |
void onStencilPath(const GrPipelineBuilder&, |
const GrPathProcessor*, |
const GrPath*, |
@@ -122,17 +132,29 @@ private: |
} |
bool isIssued(uint32_t drawID) override { return drawID != fDrawID; } |
+ State* SK_WARN_UNUSED_RESULT setupPipelineAndShouldDraw(const GrPrimitiveProcessor*, |
+ const GrDrawTarget::PipelineInfo&); |
+ State* SK_WARN_UNUSED_RESULT setupPipelineAndShouldDraw(GrBatch*, |
+ const GrDrawTarget::PipelineInfo&); |
+ |
// TODO: Use a single allocator for commands and records |
enum { |
kPathIdxBufferMinReserve = 2 * 64, // 64 uint16_t's |
kPathXformBufferMinReserve = 2 * 64, // 64 two-float transforms |
+ kPipelineBufferMinReserve = 32 * sizeof(State), |
}; |
+ // every 100 flushes we should reset our fPipelineBuffer to prevent us from holding at a |
+ // highwater mark |
+ static const int kPipelineBufferHighWaterMark = 100; |
+ |
GrTargetCommands fCommands; |
SkTArray<GrTraceMarkerSet, false> fGpuCmdMarkers; |
SkChunkAlloc fPathIndexBuffer; |
SkChunkAlloc fPathTransformBuffer; |
+ SkChunkAlloc fPipelineBuffer; |
uint32_t fDrawID; |
+ SkAutoTUnref<State> fPrevState; |
typedef GrClipTarget INHERITED; |
}; |