| Index: src/gpu/GrInOrderDrawBuffer.h
|
| diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h
|
| index 1100d95a9c04fbb0fcf00c602e30e6804dca10c2..464fdcb3798f40935c2b0a023ade5c128ff61f60 100644
|
| --- a/src/gpu/GrInOrderDrawBuffer.h
|
| +++ b/src/gpu/GrInOrderDrawBuffer.h
|
| @@ -9,298 +9,8 @@
|
| #define GrInOrderDrawBuffer_DEFINED
|
|
|
| #include "GrFlushToGpuDrawTarget.h"
|
| -
|
| -#include "GrBatch.h"
|
| -#include "GrBatchTarget.h"
|
| +#include "GrTargetCommands.h"
|
| #include "SkChunkAlloc.h"
|
| -#include "GrPipeline.h"
|
| -#include "GrPath.h"
|
| -#include "GrTRecorder.h"
|
| -
|
| -class GrInOrderDrawBuffer;
|
| -
|
| -class GrTargetCommands : ::SkNoncopyable {
|
| - struct SetState;
|
| -
|
| -public:
|
| - GrTargetCommands(GrGpu* gpu,
|
| - GrVertexBufferAllocPool* vertexPool,
|
| - GrIndexBufferAllocPool* indexPool)
|
| - : fCmdBuffer(kCmdBufferInitialSizeInBytes)
|
| - , fPrevState(NULL)
|
| - , fBatchTarget(gpu, vertexPool, indexPool)
|
| - , fDrawBatch(NULL) {
|
| - }
|
| -
|
| - struct Cmd : ::SkNoncopyable {
|
| - enum {
|
| - kDraw_Cmd = 1,
|
| - kStencilPath_Cmd = 2,
|
| - kSetState_Cmd = 3,
|
| - kClear_Cmd = 4,
|
| - kCopySurface_Cmd = 5,
|
| - kDrawPath_Cmd = 6,
|
| - kDrawPaths_Cmd = 7,
|
| - kDrawBatch_Cmd = 8,
|
| - };
|
| -
|
| - Cmd(uint8_t type) : fType(type) {}
|
| - virtual ~Cmd() {}
|
| -
|
| - virtual void execute(GrGpu*, const SetState*) = 0;
|
| -
|
| - uint8_t type() const { return fType & kCmdMask; }
|
| -
|
| - bool isTraced() const { return SkToBool(fType & kTraceCmdBit); }
|
| - void makeTraced() { fType |= kTraceCmdBit; }
|
| -
|
| - private:
|
| - static const int kCmdMask = 0x7F;
|
| - static const int kTraceCmdBit = 0x80;
|
| -
|
| - uint8_t fType;
|
| - };
|
| -
|
| - void reset();
|
| - void flush(GrInOrderDrawBuffer*);
|
| -
|
| - Cmd* recordClearStencilClip(GrInOrderDrawBuffer*,
|
| - const SkIRect& rect,
|
| - bool insideClip,
|
| - GrRenderTarget* renderTarget);
|
| -
|
| - Cmd* recordDiscard(GrInOrderDrawBuffer*, GrRenderTarget*);
|
| -
|
| - Cmd* recordDraw(GrInOrderDrawBuffer*,
|
| - const GrGeometryProcessor*,
|
| - const GrDrawTarget::DrawInfo&,
|
| - const GrDrawTarget::PipelineInfo&);
|
| - Cmd* recordDrawBatch(GrInOrderDrawBuffer*,
|
| - GrBatch*,
|
| - const GrDrawTarget::PipelineInfo&);
|
| - void recordDrawRect(GrInOrderDrawBuffer*,
|
| - GrPipelineBuilder*,
|
| - GrColor,
|
| - const SkMatrix& viewMatrix,
|
| - const SkRect& rect,
|
| - const SkRect* localRect,
|
| - const SkMatrix* localMatrix);
|
| - Cmd* recordStencilPath(GrInOrderDrawBuffer*,
|
| - const GrPipelineBuilder&,
|
| - const GrPathProcessor*,
|
| - const GrPath*,
|
| - const GrScissorState&,
|
| - const GrStencilSettings&);
|
| - Cmd* recordDrawPath(GrInOrderDrawBuffer*,
|
| - const GrPathProcessor*,
|
| - const GrPath*,
|
| - const GrStencilSettings&,
|
| - const GrDrawTarget::PipelineInfo&);
|
| - Cmd* recordDrawPaths(GrInOrderDrawBuffer*,
|
| - const GrPathProcessor*,
|
| - const GrPathRange*,
|
| - const void*,
|
| - GrDrawTarget::PathIndexType,
|
| - const float transformValues[],
|
| - GrDrawTarget::PathTransformType ,
|
| - int,
|
| - const GrStencilSettings&,
|
| - const GrDrawTarget::PipelineInfo&);
|
| - Cmd* recordClear(GrInOrderDrawBuffer*,
|
| - const SkIRect* rect,
|
| - GrColor,
|
| - bool canIgnoreRect,
|
| - GrRenderTarget*);
|
| - Cmd* recordCopySurface(GrInOrderDrawBuffer*,
|
| - GrSurface* dst,
|
| - GrSurface* src,
|
| - const SkIRect& srcRect,
|
| - const SkIPoint& dstPoint);
|
| -
|
| -protected:
|
| - void willReserveVertexAndIndexSpace(int vertexCount,
|
| - size_t vertexStride,
|
| - int indexCount);
|
| -
|
| -private:
|
| - friend class GrInOrderDrawBuffer;
|
| -
|
| - typedef GrGpu::DrawArgs DrawArgs;
|
| -
|
| - // Attempts to concat instances from info onto the previous draw. info must represent an
|
| - // instanced draw. The caller must have already recorded a new draw state and clip if necessary.
|
| - int concatInstancedDraw(GrInOrderDrawBuffer*, const GrDrawTarget::DrawInfo&);
|
| -
|
| - bool SK_WARN_UNUSED_RESULT setupPipelineAndShouldDraw(GrInOrderDrawBuffer*,
|
| - const GrPrimitiveProcessor*,
|
| - const GrDrawTarget::PipelineInfo&);
|
| - bool SK_WARN_UNUSED_RESULT setupPipelineAndShouldDraw(GrInOrderDrawBuffer*,
|
| - GrBatch*,
|
| - const GrDrawTarget::PipelineInfo&);
|
| -
|
| - struct Draw : public Cmd {
|
| - Draw(const GrDrawTarget::DrawInfo& info) : Cmd(kDraw_Cmd), fInfo(info) {}
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - GrDrawTarget::DrawInfo fInfo;
|
| - };
|
| -
|
| - struct StencilPath : public Cmd {
|
| - StencilPath(const GrPath* path, GrRenderTarget* rt)
|
| - : Cmd(kStencilPath_Cmd)
|
| - , fRenderTarget(rt)
|
| - , fPath(path) {}
|
| -
|
| - const GrPath* path() const { return fPath.get(); }
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - SkMatrix fViewMatrix;
|
| - bool fUseHWAA;
|
| - GrStencilSettings fStencil;
|
| - GrScissorState fScissor;
|
| - private:
|
| - GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget;
|
| - GrPendingIOResource<const GrPath, kRead_GrIOType> fPath;
|
| - };
|
| -
|
| - struct DrawPath : public Cmd {
|
| - DrawPath(const GrPath* path) : Cmd(kDrawPath_Cmd), fPath(path) {}
|
| -
|
| - const GrPath* path() const { return fPath.get(); }
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - GrStencilSettings fStencilSettings;
|
| -
|
| - private:
|
| - GrPendingIOResource<const GrPath, kRead_GrIOType> fPath;
|
| - };
|
| -
|
| - struct DrawPaths : public Cmd {
|
| - DrawPaths(const GrPathRange* pathRange) : Cmd(kDrawPaths_Cmd), fPathRange(pathRange) {}
|
| -
|
| - const GrPathRange* pathRange() const { return fPathRange.get(); }
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - char* fIndices;
|
| - GrDrawTarget::PathIndexType fIndexType;
|
| - float* fTransforms;
|
| - GrDrawTarget::PathTransformType fTransformType;
|
| - int fCount;
|
| - GrStencilSettings fStencilSettings;
|
| -
|
| - private:
|
| - GrPendingIOResource<const GrPathRange, kRead_GrIOType> fPathRange;
|
| - };
|
| -
|
| - // This is also used to record a discard by setting the color to GrColor_ILLEGAL
|
| - struct Clear : public Cmd {
|
| - Clear(GrRenderTarget* rt) : Cmd(kClear_Cmd), fRenderTarget(rt) {}
|
| -
|
| - GrRenderTarget* renderTarget() const { return fRenderTarget.get(); }
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - SkIRect fRect;
|
| - GrColor fColor;
|
| - bool fCanIgnoreRect;
|
| -
|
| - private:
|
| - GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget;
|
| - };
|
| -
|
| - // This command is ONLY used by the clip mask manager to clear the stencil clip bits
|
| - struct ClearStencilClip : public Cmd {
|
| - ClearStencilClip(GrRenderTarget* rt) : Cmd(kClear_Cmd), fRenderTarget(rt) {}
|
| -
|
| - GrRenderTarget* renderTarget() const { return fRenderTarget.get(); }
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - SkIRect fRect;
|
| - bool fInsideClip;
|
| -
|
| - private:
|
| - GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget;
|
| - };
|
| -
|
| - struct CopySurface : public Cmd {
|
| - CopySurface(GrSurface* dst, GrSurface* src) : Cmd(kCopySurface_Cmd), fDst(dst), fSrc(src) {}
|
| -
|
| - GrSurface* dst() const { return fDst.get(); }
|
| - GrSurface* src() const { return fSrc.get(); }
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - SkIPoint fDstPoint;
|
| - SkIRect fSrcRect;
|
| -
|
| - private:
|
| - GrPendingIOResource<GrSurface, kWrite_GrIOType> fDst;
|
| - GrPendingIOResource<GrSurface, kRead_GrIOType> fSrc;
|
| - };
|
| -
|
| - // TODO: rename to SetPipeline once pp, batch tracker, and desc are removed
|
| - struct SetState : public Cmd {
|
| - // TODO get rid of the prim proc parameter when we use batch everywhere
|
| - SetState(const GrPrimitiveProcessor* primProc = NULL)
|
| - : Cmd(kSetState_Cmd)
|
| - , fPrimitiveProcessor(primProc) {}
|
| -
|
| - ~SetState() { reinterpret_cast<GrPipeline*>(fPipeline.get())->~GrPipeline(); }
|
| -
|
| - // This function is only for getting the location in memory where we will create our
|
| - // pipeline object.
|
| - GrPipeline* pipelineLocation() { return reinterpret_cast<GrPipeline*>(fPipeline.get()); }
|
| -
|
| - const GrPipeline* getPipeline() const {
|
| - return reinterpret_cast<const GrPipeline*>(fPipeline.get());
|
| - }
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - typedef GrPendingProgramElement<const GrPrimitiveProcessor> ProgramPrimitiveProcessor;
|
| - ProgramPrimitiveProcessor fPrimitiveProcessor;
|
| - SkAlignedSStorage<sizeof(GrPipeline)> fPipeline;
|
| - GrProgramDesc fDesc;
|
| - GrBatchTracker fBatchTracker;
|
| - };
|
| -
|
| - struct DrawBatch : public Cmd {
|
| - DrawBatch(GrBatch* batch, GrBatchTarget* batchTarget)
|
| - : Cmd(kDrawBatch_Cmd)
|
| - , fBatch(SkRef(batch))
|
| - , fBatchTarget(batchTarget) {
|
| - SkASSERT(!batch->isUsed());
|
| - }
|
| -
|
| - void execute(GrGpu*, const SetState*) SK_OVERRIDE;
|
| -
|
| - // TODO it wouldn't be too hard to let batches allocate in the cmd buffer
|
| - SkAutoTUnref<GrBatch> fBatch;
|
| -
|
| - private:
|
| - GrBatchTarget* fBatchTarget;
|
| - };
|
| -
|
| - static const int kCmdBufferInitialSizeInBytes = 8 * 1024;
|
| -
|
| - typedef void* TCmdAlign; // This wouldn't be enough align if a command used long double.
|
| - typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer;
|
| -
|
| - CmdBuffer fCmdBuffer;
|
| - SetState* fPrevState;
|
| - GrBatchTarget fBatchTarget;
|
| - // TODO hack until batch is everywhere
|
| - GrTargetCommands::DrawBatch* fDrawBatch;
|
| -
|
| - // This will go away when everything uses batch. However, in the short term anything which
|
| - // might be put into the GrInOrderDrawBuffer needs to make sure it closes the last batch
|
| - void closeBatch();
|
| -};
|
|
|
| /**
|
| * GrInOrderDrawBuffer is an implementation of GrDrawTarget that queues up draws for eventual
|
| @@ -382,8 +92,6 @@ protected:
|
| private:
|
| friend class GrTargetCommands;
|
|
|
| - typedef GrGpu::DrawArgs DrawArgs;
|
| -
|
| void onReset() SK_OVERRIDE;
|
| void onFlush() SK_OVERRIDE;
|
|
|
|
|