| Index: src/gpu/GrInOrderDrawBuffer.h
|
| diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h
|
| index afa7d27394d8428fcaa735466e29d287e5f81032..bf9237d4268896b2793f9c4671253653c108443b 100644
|
| --- a/src/gpu/GrInOrderDrawBuffer.h
|
| +++ b/src/gpu/GrInOrderDrawBuffer.h
|
| @@ -9,6 +9,9 @@
|
| #define GrInOrderDrawBuffer_DEFINED
|
|
|
| #include "GrFlushToGpuDrawTarget.h"
|
| +
|
| +#include "GrBatch.h"
|
| +#include "GrBatchTarget.h"
|
| #include "GrPipeline.h"
|
| #include "GrPath.h"
|
| #include "GrTRecorder.h"
|
| @@ -50,16 +53,21 @@ public:
|
|
|
| void discard(GrRenderTarget*) SK_OVERRIDE;
|
|
|
| + void willReserveVertexAndIndexSpace(int vertexCount,
|
| + size_t vertexStride,
|
| + int indexCount);
|
| +
|
| private:
|
| typedef GrGpu::DrawArgs DrawArgs;
|
| enum {
|
| - kDraw_Cmd = 1,
|
| - kStencilPath_Cmd = 2,
|
| - kSetState_Cmd = 3,
|
| - kClear_Cmd = 4,
|
| - kCopySurface_Cmd = 5,
|
| - kDrawPath_Cmd = 6,
|
| - kDrawPaths_Cmd = 7,
|
| + kDraw_Cmd = 1,
|
| + kStencilPath_Cmd = 2,
|
| + kSetState_Cmd = 3,
|
| + kClear_Cmd = 4,
|
| + kCopySurface_Cmd = 5,
|
| + kDrawPath_Cmd = 6,
|
| + kDrawPaths_Cmd = 7,
|
| + kDrawBatch_Cmd = 8,
|
| };
|
|
|
| struct SetState;
|
| @@ -180,6 +188,7 @@ private:
|
|
|
| // TODO: rename to SetPipeline once pp, batch tracker, and desc are removed
|
| struct SetState : public Cmd {
|
| + // TODO get rid of the prim proc version of this when we use batch everywhere
|
| SetState(const GrPipelineBuilder& pipelineBuilder, const GrPrimitiveProcessor* primProc,
|
| const GrDrawTargetCaps& caps,
|
| const GrScissorState& scissor, const GrDeviceCoordTexture* dstCopy)
|
| @@ -187,6 +196,13 @@ private:
|
| , fPrimitiveProcessor(primProc)
|
| , fPipeline(pipelineBuilder, primProc, caps, scissor, dstCopy) {}
|
|
|
| + SetState(GrBatch* batch,
|
| + const GrPipelineBuilder& pipelineBuilder,
|
| + const GrDrawTargetCaps& caps,
|
| + const GrScissorState& scissor, const GrDeviceCoordTexture* dstCopy)
|
| + : Cmd(kSetState_Cmd)
|
| + , fPipeline(batch, pipelineBuilder, caps, scissor, dstCopy) {}
|
| +
|
| void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
|
|
|
| typedef GrPendingProgramElement<const GrPrimitiveProcessor> ProgramPrimitiveProcessor;
|
| @@ -196,6 +212,17 @@ private:
|
| GrBatchTracker fBatchTracker;
|
| };
|
|
|
| + struct DrawBatch : public Cmd {
|
| + DrawBatch(GrBatch* batch) : Cmd(kDrawBatch_Cmd), fBatch(SkRef(batch)) {
|
| + SkASSERT(!batch->isUsed());
|
| + }
|
| +
|
| + void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
|
| +
|
| + // TODO it wouldn't be too hard to let batches allocate in the cmd buffer
|
| + SkAutoTUnref<GrBatch> fBatch;
|
| + };
|
| +
|
| typedef void* TCmdAlign; // This wouldn't be enough align if a command used long double.
|
| typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer;
|
|
|
| @@ -208,6 +235,10 @@ private:
|
| const DrawInfo&,
|
| const GrScissorState&,
|
| const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE;
|
| + void onDrawBatch(GrBatch*,
|
| + const GrPipelineBuilder&,
|
| + const GrScissorState&,
|
| + const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE;
|
| void onDrawRect(GrPipelineBuilder*,
|
| GrColor,
|
| const SkMatrix& viewMatrix,
|
| @@ -253,10 +284,16 @@ private:
|
| // Determines whether the current draw operation requires a new GrPipeline and if so
|
| // records it. If the draw can be skipped false is returned and no new GrPipeline is
|
| // recorded.
|
| + // TODO delete the primproc variant when we have batches everywhere
|
| bool SK_WARN_UNUSED_RESULT recordStateAndShouldDraw(const GrPipelineBuilder&,
|
| const GrPrimitiveProcessor*,
|
| const GrScissorState&,
|
| const GrDeviceCoordTexture*);
|
| + bool SK_WARN_UNUSED_RESULT recordStateAndShouldDraw(GrBatch*,
|
| + const GrPipelineBuilder&,
|
| + const GrScissorState&,
|
| + const GrDeviceCoordTexture*);
|
| +
|
| // We lazily record clip changes in order to skip clips that have no effect.
|
| void recordClipIfNecessary();
|
| // Records any trace markers for a command after adding it to the buffer.
|
| @@ -264,6 +301,8 @@ private:
|
|
|
| bool isIssued(uint32_t drawID) SK_OVERRIDE { return drawID != fDrawID; }
|
|
|
| + GrBatchTarget* getBatchTarget() { return &fBatchTarget; }
|
| +
|
| // TODO: Use a single allocator for commands and records
|
| enum {
|
| kCmdBufferInitialSizeInBytes = 8 * 1024,
|
| @@ -277,6 +316,11 @@ private:
|
| SkTDArray<char> fPathIndexBuffer;
|
| SkTDArray<float> fPathTransformBuffer;
|
| uint32_t fDrawID;
|
| + GrBatchTarget fBatchTarget;
|
| + // TODO hack until batch is everywhere
|
| + DrawBatch* fDrawBatch;
|
| +
|
| + void closeBatch();
|
|
|
| typedef GrFlushToGpuDrawTarget INHERITED;
|
| };
|
|
|