Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Unified Diff: src/gpu/GrInOrderDrawBuffer.h

Issue 581123002: Make GrIODB keep pending IO refs on all resources it records into its cmd stream. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix param init order warning Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrGpuResourceRef.cpp ('k') | src/gpu/GrInOrderDrawBuffer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrInOrderDrawBuffer.h
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h
index 491da5dbfb9eb679c6e0a56239ddf94a52f03fe9..532b83f1d1ca9f1c50adc1d9b3401982f577fc26 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(); }
- 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;
};
« no previous file with comments | « src/gpu/GrGpuResourceRef.cpp ('k') | src/gpu/GrInOrderDrawBuffer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698