Chromium Code Reviews| Index: src/gpu/GrInOrderDrawBuffer.h |
| diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h |
| index 491da5dbfb9eb679c6e0a56239ddf94a52f03fe9..6caedb1e90a76738ced60807fc73a5b5291622e5 100644 |
| --- a/src/gpu/GrInOrderDrawBuffer.h |
| +++ b/src/gpu/GrInOrderDrawBuffer.h |
| @@ -11,7 +11,12 @@ |
| #include "GrDrawTarget.h" |
| #include "GrAllocPool.h" |
| #include "GrAllocator.h" |
| +#include "GrIndexBuffer.h" |
| +#include "GrRenderTarget.h" |
| #include "GrPath.h" |
| +#include "GrPathRange.h" |
| +#include "GrSurface.h" |
| +#include "GrVertexBuffer.h" |
| #include "SkClipStack.h" |
| #include "SkTemplates.h" |
| @@ -19,7 +24,6 @@ |
| class GrGpu; |
| class GrIndexBufferAllocPool; |
| -class GrPathRange; |
| class GrVertexBufferAllocPool; |
| /** |
| @@ -94,57 +98,98 @@ private: |
| kDrawPaths_Cmd = 8, |
| }; |
| - class DrawRecord : public DrawInfo { |
| + class Draw : public DrawInfo { |
| public: |
| - DrawRecord(const DrawInfo& info) : DrawInfo(info) {} |
| - const GrVertexBuffer* fVertexBuffer; |
| - const GrIndexBuffer* fIndexBuffer; |
| + Draw(const DrawInfo& info, const GrVertexBuffer* vb, const GrIndexBuffer* ib) |
| + : DrawInfo(info) |
| + , fVertexBuffer(vb, GrGpuResourceRef::kRead_IOType) |
| + , fIndexBuffer(ib, GrGpuResourceRef::kRead_IOType) {} |
| + |
| + const GrVertexBuffer* vertexBuffer() const { return fVertexBuffer.get(); } |
| + const GrIndexBuffer* indexBuffer() const { return fIndexBuffer.get(); } |
| + |
| + private: |
| + GrPendingIOResource<const GrVertexBuffer> fVertexBuffer; |
| + GrPendingIOResource<const GrIndexBuffer> fIndexBuffer; |
| }; |
| struct StencilPath : public ::SkNoncopyable { |
| - StencilPath(); |
| + StencilPath(const GrPath* path) : fPath(path, GrGpuResourceRef::kRead_IOType) {} |
| + |
| + const GrPath* path() const { return fPath.get(); } |
| - SkAutoTUnref<const GrPath> fPath; |
| - SkPath::FillType fFill; |
| + SkPath::FillType fFill; |
| + |
| + private: |
| + GrPendingIOResource<const GrPath> fPath; |
| }; |
| struct DrawPath : public ::SkNoncopyable { |
| - DrawPath(); |
| + DrawPath(const GrPath* path) : fPath(path, GrGpuResourceRef::kRead_IOType) {} |
| + |
| + const GrPath* path() const { return fPath.get(); } |
|
robertphillips
2014/09/18 19:30:51
Move fFill right a space ?
bsalomon
2014/09/18 19:43:55
Done. (moved both to the next tab stop)
|
| - SkAutoTUnref<const GrPath> fPath; |
| - SkPath::FillType fFill; |
| - GrDeviceCoordTexture fDstCopy; |
| + SkPath::FillType fFill; |
| + GrDeviceCoordTexture fDstCopy; |
| + |
| + private: |
| + GrPendingIOResource<const GrPath> fPath; |
| }; |
| struct DrawPaths : public ::SkNoncopyable { |
| - DrawPaths(); |
| - ~DrawPaths(); |
| - |
| - SkAutoTUnref<const GrPathRange> fPathRange; |
| - uint32_t* fIndices; |
| - size_t fCount; |
| - float* fTransforms; |
| - PathTransformType fTransformsType; |
| - SkPath::FillType fFill; |
| - GrDeviceCoordTexture fDstCopy; |
| + DrawPaths(const GrPathRange* pathRange) |
| + : fPathRange(pathRange, GrGpuResourceRef::kRead_IOType) {} |
| + |
| + ~DrawPaths() { |
| + if (fTransforms) { |
| + SkDELETE_ARRAY(fTransforms); |
| + } |
| + if (fIndices) { |
| + SkDELETE_ARRAY(fIndices); |
| + } |
| + } |
| + |
| + const GrPathRange* pathRange() const { return fPathRange.get(); } |
| + |
| + uint32_t* fIndices; |
| + size_t fCount; |
| + float* fTransforms; |
| + PathTransformType fTransformsType; |
| + SkPath::FillType fFill; |
| + GrDeviceCoordTexture fDstCopy; |
| + |
| + private: |
| + GrPendingIOResource<const GrPathRange> fPathRange; |
| }; |
| // This is also used to record a discard by setting the color to GrColor_ILLEGAL |
| struct Clear : public ::SkNoncopyable { |
| - Clear() : fRenderTarget(NULL) {} |
| - ~Clear() { SkSafeUnref(fRenderTarget); } |
| + Clear(GrRenderTarget* rt) : fRenderTarget(rt, GrGpuResourceRef::kWrite_IOType) {} |
| + ~Clear() { } |
| + GrRenderTarget* renderTarget() const { return fRenderTarget.get(); } |
| + |
| + SkIRect fRect; |
| + GrColor fColor; |
| + bool fCanIgnoreRect; |
| - SkIRect fRect; |
| - GrColor fColor; |
| - bool fCanIgnoreRect; |
| - GrRenderTarget* fRenderTarget; |
| + private: |
| + GrPendingIOResource<GrRenderTarget> fRenderTarget; |
| }; |
| struct CopySurface : public ::SkNoncopyable { |
| - SkAutoTUnref<GrSurface> fDst; |
| - SkAutoTUnref<GrSurface> fSrc; |
| - SkIRect fSrcRect; |
| - SkIPoint fDstPoint; |
| + CopySurface(GrSurface* dst, GrSurface* src) |
| + : fDst(dst, GrGpuResourceRef::kWrite_IOType) |
| + , fSrc(src, GrGpuResourceRef::kRead_IOType) {} |
| + |
| + GrSurface* dst() const { return fDst.get(); } |
| + GrSurface* src() const { return fSrc.get(); } |
| + |
| + SkIPoint fDstPoint; |
| + SkIRect fSrcRect; |
| + |
| + private: |
| + GrPendingIOResource<GrSurface> fDst; |
| + GrPendingIOResource<GrSurface> fSrc; |
| }; |
| struct Clip : public ::SkNoncopyable { |
| @@ -209,12 +254,15 @@ private: |
| // these functions record a command |
| void recordState(); |
| void recordClip(); |
| - DrawRecord* recordDraw(const DrawInfo&); |
| - StencilPath* recordStencilPath(); |
| - DrawPath* recordDrawPath(); |
| - DrawPaths* recordDrawPaths(); |
| - Clear* recordClear(); |
| - CopySurface* recordCopySurface(); |
| + Draw* recordDraw(const DrawInfo&, const GrVertexBuffer*, const GrIndexBuffer*); |
| + StencilPath* recordStencilPath(const GrPath*); |
| + DrawPath* recordDrawPath(const GrPath*); |
| + DrawPaths* recordDrawPaths(const GrPathRange*); |
| + Clear* recordClear(GrRenderTarget*); |
| + CopySurface* recordCopySurface(GrSurface* dst, GrSurface* src); |
| + |
| + virtual bool isIssued(uint32_t drawID) { return drawID != fDrawID; } |
| + void addToCmdBuffer(uint8_t cmd); |
| // TODO: Use a single allocator for commands and records |
| enum { |
| @@ -230,63 +278,57 @@ private: |
| kCopySurfacePreallocCnt = 4, |
| }; |
| - typedef GrTAllocator<DrawRecord> DrawAllocator; |
| - typedef GrTAllocator<StencilPath> StencilPathAllocator; |
| - typedef GrTAllocator<DrawPath> DrawPathAllocator; |
| - typedef GrTAllocator<DrawPaths> DrawPathsAllocator; |
| - typedef GrTAllocator<GrDrawState> StateAllocator; |
| - typedef GrTAllocator<Clear> ClearAllocator; |
| - typedef GrTAllocator<CopySurface> CopySurfaceAllocator; |
| - typedef GrTAllocator<Clip> ClipAllocator; |
| - |
| - GrSTAllocator<kDrawPreallocCnt, DrawRecord> fDraws; |
| - GrSTAllocator<kStencilPathPreallocCnt, StencilPath> fStencilPaths; |
| - GrSTAllocator<kDrawPathPreallocCnt, DrawPath> fDrawPath; |
| - GrSTAllocator<kDrawPathsPreallocCnt, DrawPaths> fDrawPaths; |
| - GrSTAllocator<kStatePreallocCnt, GrDrawState> fStates; |
| - GrSTAllocator<kClearPreallocCnt, Clear> fClears; |
| - GrSTAllocator<kCopySurfacePreallocCnt, CopySurface> fCopySurfaces; |
| - GrSTAllocator<kClipPreallocCnt, Clip> fClips; |
| - |
| - SkTArray<GrTraceMarkerSet, false> fGpuCmdMarkers; |
| - |
| - SkSTArray<kCmdPreallocCnt, uint8_t, true> fCmds; |
| - |
| - GrDrawTarget* fDstGpu; |
| - |
| - bool fClipSet; |
| + typedef GrTAllocator<Draw> DrawAllocator; |
| + typedef GrTAllocator<StencilPath> StencilPathAllocator; |
| + typedef GrTAllocator<DrawPath> DrawPathAllocator; |
| + typedef GrTAllocator<DrawPaths> DrawPathsAllocator; |
| + typedef GrTAllocator<GrDrawState> StateAllocator; |
| + typedef GrTAllocator<Clear> ClearAllocator; |
| + typedef GrTAllocator<CopySurface> CopySurfaceAllocator; |
| + typedef GrTAllocator<Clip> ClipAllocator; |
| + |
| + GrSTAllocator<kDrawPreallocCnt, Draw> fDraws; |
| + GrSTAllocator<kStencilPathPreallocCnt, StencilPath> fStencilPaths; |
| + GrSTAllocator<kDrawPathPreallocCnt, DrawPath> fDrawPath; |
| + GrSTAllocator<kDrawPathsPreallocCnt, DrawPaths> fDrawPaths; |
| + GrSTAllocator<kStatePreallocCnt, GrDrawState> fStates; |
| + GrSTAllocator<kClearPreallocCnt, Clear> fClears; |
| + GrSTAllocator<kCopySurfacePreallocCnt, CopySurface> fCopySurfaces; |
| + GrSTAllocator<kClipPreallocCnt, Clip> fClips; |
| + |
| + SkTArray<GrTraceMarkerSet, false> fGpuCmdMarkers; |
| + SkSTArray<kCmdPreallocCnt, uint8_t, true> fCmds; |
| + GrDrawTarget* fDstGpu; |
| + bool fClipSet; |
| enum ClipProxyState { |
| kUnknown_ClipProxyState, |
| kValid_ClipProxyState, |
| kInvalid_ClipProxyState |
| }; |
| - ClipProxyState fClipProxyState; |
| - SkRect fClipProxy; |
| - |
| - GrVertexBufferAllocPool& fVertexPool; |
| - GrIndexBufferAllocPool& fIndexPool; |
| + ClipProxyState fClipProxyState; |
| + SkRect fClipProxy; |
| + GrVertexBufferAllocPool& fVertexPool; |
| + GrIndexBufferAllocPool& fIndexPool; |
| struct GeometryPoolState { |
| - const GrVertexBuffer* fPoolVertexBuffer; |
| - int fPoolStartVertex; |
| - const GrIndexBuffer* fPoolIndexBuffer; |
| - int fPoolStartIndex; |
| + const GrVertexBuffer* fPoolVertexBuffer; |
| + int fPoolStartVertex; |
| + const GrIndexBuffer* fPoolIndexBuffer; |
| + int fPoolStartIndex; |
| // caller may conservatively over reserve vertices / indices. |
| // we release unused space back to allocator if possible |
| // can only do this if there isn't an intervening pushGeometrySource() |
| - size_t fUsedPoolVertexBytes; |
| - size_t fUsedPoolIndexBytes; |
| + size_t fUsedPoolVertexBytes; |
| + size_t fUsedPoolIndexBytes; |
| }; |
| - SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> fGeoPoolStateStack; |
| - virtual bool isIssued(uint32_t drawID) { return drawID != fDrawID; } |
| - |
| - void addToCmdBuffer(uint8_t cmd); |
| + typedef SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> GeoPoolStateStack; |
| - bool fFlushing; |
| - uint32_t fDrawID; |
| + GeoPoolStateStack fGeoPoolStateStack; |
| + bool fFlushing; |
| + uint32_t fDrawID; |
| typedef GrDrawTarget INHERITED; |
| }; |