diff options
Diffstat (limited to 'src/gpu/GrOpFlushState.h')
-rw-r--r-- | src/gpu/GrOpFlushState.h | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h index 4ba87feebf..0fc7b7f834 100644 --- a/src/gpu/GrOpFlushState.h +++ b/src/gpu/GrOpFlushState.h @@ -10,6 +10,7 @@ #include "GrBufferAllocPool.h" #include "GrGpu.h" +#include "SkArenaAlloc.h" #include "ops/GrMeshDrawOp.h" class GrGpuCommandBuffer; @@ -94,6 +95,7 @@ public: void reset() { fVertexPool.reset(); fIndexPool.reset(); + fPipelines.reset(); } /** Additional data required on a per-op basis when executing GrDrawOps. */ @@ -110,16 +112,22 @@ public: return *fOpArgs; } + template <typename... Args> + GrPipeline* allocPipeline(Args... args) { + return fPipelines.make<GrPipeline>(std::forward<Args>(args)...); + } + private: - GrGpu* fGpu; - GrResourceProvider* fResourceProvider; - GrGpuCommandBuffer* fCommandBuffer; - GrVertexBufferAllocPool fVertexPool; - GrIndexBufferAllocPool fIndexPool; - SkSTArray<4, GrDrawOp::DeferredUploadFn> fAsapUploads; - GrDrawOpUploadToken fLastIssuedToken; - GrDrawOpUploadToken fLastFlushedToken; - DrawOpArgs* fOpArgs; + GrGpu* fGpu; + GrResourceProvider* fResourceProvider; + GrGpuCommandBuffer* fCommandBuffer; + GrVertexBufferAllocPool fVertexPool; + GrIndexBufferAllocPool fIndexPool; + SkSTArray<4, GrDrawOp::DeferredUploadFn> fAsapUploads; + GrDrawOpUploadToken fLastIssuedToken; + GrDrawOpUploadToken fLastFlushedToken; + DrawOpArgs* fOpArgs; + SkArenaAlloc fPipelines{sizeof(GrPipeline) * 100}; }; /** @@ -182,6 +190,7 @@ public: protected: GrDrawOp* op() { return fOp; } GrOpFlushState* state() { return fState; } + const GrOpFlushState* state() const { return fState; } private: GrOpFlushState* fState; @@ -211,6 +220,19 @@ public: this->state()->putBackVertexSpace(vertices * vertexStride); } + GrRenderTarget* renderTarget() const { return this->state()->drawOpArgs().fRenderTarget; } + + const GrAppliedClip* clip() const { return this->state()->drawOpArgs().fAppliedClip; } + + const GrXferProcessor::DstTexture& dstTexture() const { + return this->state()->drawOpArgs().fDstTexture; + } + + template <typename... Args> + GrPipeline* allocPipeline(Args... args) { + return this->state()->allocPipeline(std::forward<Args>(args)...); + } + private: GrMeshDrawOp* meshDrawOp() { return static_cast<GrMeshDrawOp*>(this->op()); } typedef GrDrawOp::Target INHERITED; |