Index: src/gpu/GrInOrderDrawBuffer.h |
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h |
index 1d5480afc61470730b14821b5dcb5d8e69103f08..58b239baa481ca23dbf87e77aa12a99344da3e70 100644 |
--- a/src/gpu/GrInOrderDrawBuffer.h |
+++ b/src/gpu/GrInOrderDrawBuffer.h |
@@ -9,13 +9,12 @@ |
#define GrInOrderDrawBuffer_DEFINED |
#include "GrDrawTarget.h" |
-#include "GrAllocPool.h" |
-#include "GrAllocator.h" |
#include "GrGpu.h" |
#include "GrIndexBuffer.h" |
-#include "GrRenderTarget.h" |
+#include "GrOptDrawState.h" |
#include "GrPath.h" |
#include "GrPathRange.h" |
+#include "GrRenderTarget.h" |
#include "GrSurface.h" |
#include "GrTRecorder.h" |
#include "GrVertexBuffer.h" |
@@ -224,63 +223,60 @@ private: |
}; |
struct SetState : public Cmd { |
- SetState(const GrDrawState& state) : Cmd(kSetState_Cmd), fState(state) {} |
+ SetState(const GrOptDrawState* state) : Cmd(kSetState_Cmd), fState(SkRef(state)) {} |
virtual void execute(GrInOrderDrawBuffer*, const GrOptDrawState*); |
- GrDrawState fState; |
- GrGpu::DrawType fDrawType; |
- GrDeviceCoordTexture fDstCopy; |
+ SkAutoTUnref<const GrOptDrawState> fState; |
+ GrGpu::DrawType fDrawType; |
+ GrDeviceCoordTexture fDstCopy; |
}; |
typedef void* TCmdAlign; // This wouldn't be enough align if a command used long double. |
typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer; |
// overrides from GrDrawTarget |
- virtual void onDraw(const GrDrawState&, |
- const DrawInfo&, |
- const GrClipMaskManager::ScissorState&) SK_OVERRIDE; |
- virtual void onDrawRect(GrDrawState*, |
- const SkRect& rect, |
- const SkRect* localRect, |
- const SkMatrix* localMatrix) SK_OVERRIDE; |
- |
- virtual void onStencilPath(const GrDrawState&, |
- const GrPath*, |
- const GrClipMaskManager::ScissorState&, |
- const GrStencilSettings&) SK_OVERRIDE; |
- virtual void onDrawPath(const GrDrawState&, |
- const GrPath*, |
- const GrClipMaskManager::ScissorState&, |
- const GrStencilSettings&, |
- const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE; |
- virtual void onDrawPaths(const GrDrawState&, |
- const GrPathRange*, |
- const uint32_t indices[], |
- int count, |
- const float transforms[], |
- PathTransformType, |
- const GrClipMaskManager::ScissorState&, |
- const GrStencilSettings&, |
- const GrDeviceCoordTexture*) SK_OVERRIDE; |
- virtual void onClear(const SkIRect* rect, |
- GrColor color, |
- bool canIgnoreRect, |
- GrRenderTarget* renderTarget) SK_OVERRIDE; |
- virtual void setDrawBuffers(DrawInfo*) SK_OVERRIDE; |
- |
- virtual bool onReserveVertexSpace(size_t vertexSize, |
- int vertexCount, |
- void** vertices) SK_OVERRIDE; |
- virtual bool onReserveIndexSpace(int indexCount, |
- void** indices) SK_OVERRIDE; |
- virtual void releaseReservedVertexSpace() SK_OVERRIDE; |
- virtual void releaseReservedIndexSpace() SK_OVERRIDE; |
- virtual void geometrySourceWillPush() SK_OVERRIDE; |
- virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) SK_OVERRIDE; |
- virtual void willReserveVertexAndIndexSpace(int vertexCount, |
- size_t vertexStride, |
- int indexCount) SK_OVERRIDE; |
+ void onDraw(const GrDrawState&, |
+ const DrawInfo&, |
+ const GrClipMaskManager::ScissorState&) SK_OVERRIDE; |
+ void onDrawRect(GrDrawState*, |
+ const SkRect& rect, |
+ const SkRect* localRect, |
+ const SkMatrix* localMatrix) SK_OVERRIDE; |
+ |
+ void onStencilPath(const GrDrawState&, |
+ const GrPath*, |
+ const GrClipMaskManager::ScissorState&, |
+ const GrStencilSettings&) SK_OVERRIDE; |
+ void onDrawPath(const GrDrawState&, |
+ const GrPath*, |
+ const GrClipMaskManager::ScissorState&, |
+ const GrStencilSettings&, |
+ const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE; |
+ void onDrawPaths(const GrDrawState&, |
+ const GrPathRange*, |
+ const uint32_t indices[], |
+ int count, |
+ const float transforms[], |
+ PathTransformType, |
+ const GrClipMaskManager::ScissorState&, |
+ const GrStencilSettings&, |
+ const GrDeviceCoordTexture*) SK_OVERRIDE; |
+ void onClear(const SkIRect* rect, |
+ GrColor color, |
+ bool canIgnoreRect, |
+ GrRenderTarget* renderTarget) SK_OVERRIDE; |
+ void setDrawBuffers(DrawInfo*) SK_OVERRIDE; |
+ |
+ bool onReserveVertexSpace(size_t vertexSize, int vertexCount, void** vertices) SK_OVERRIDE; |
+ bool onReserveIndexSpace(int indexCount, void** indices) SK_OVERRIDE; |
+ void releaseReservedVertexSpace() SK_OVERRIDE; |
+ void releaseReservedIndexSpace() SK_OVERRIDE; |
+ void geometrySourceWillPush() SK_OVERRIDE; |
+ void geometrySourceWillPop(const GeometrySrcState& restoredState) SK_OVERRIDE; |
+ void willReserveVertexAndIndexSpace(int vertexCount, |
+ size_t vertexStride, |
+ int indexCount) SK_OVERRIDE; |
// 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. |
@@ -288,8 +284,12 @@ private: |
const DrawInfo&, |
const GrClipMaskManager::ScissorState&); |
- // Determines whether the current draw operation requieres a new drawstate and if so records it. |
- void recordStateIfNecessary(const GrDrawState&, GrGpu::DrawType, const GrDeviceCoordTexture*); |
+ // Determines whether the current draw operation requires a new GrOptDrawState and if so |
+ // records it. If the draw can be skipped false is returned and no new GrOptDrawState is |
+ // recorded. |
+ bool SK_WARN_UNUSED_RESULT recordStateAndShouldDraw(const GrDrawState&, |
+ GrGpu::DrawType, |
+ 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. |
@@ -305,15 +305,6 @@ private: |
kGeoPoolStatePreAllocCnt = 4, |
}; |
- CmdBuffer fCmdBuffer; |
- GrDrawState* fLastState; |
- SkTArray<GrTraceMarkerSet, false> fGpuCmdMarkers; |
- GrGpu* fDstGpu; |
- GrVertexBufferAllocPool& fVertexPool; |
- GrIndexBufferAllocPool& fIndexPool; |
- SkTDArray<uint32_t> fPathIndexBuffer; |
- SkTDArray<float> fPathTransformBuffer; |
- |
struct GeometryPoolState { |
const GrVertexBuffer* fPoolVertexBuffer; |
int fPoolStartVertex; |
@@ -328,9 +319,17 @@ private: |
typedef SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> GeoPoolStateStack; |
- GeoPoolStateStack fGeoPoolStateStack; |
- bool fFlushing; |
- uint32_t fDrawID; |
+ CmdBuffer fCmdBuffer; |
+ SkAutoTUnref<const GrOptDrawState> fLastState; |
+ SkTArray<GrTraceMarkerSet, false> fGpuCmdMarkers; |
+ GrGpu* fDstGpu; |
+ GrVertexBufferAllocPool& fVertexPool; |
+ GrIndexBufferAllocPool& fIndexPool; |
+ SkTDArray<uint32_t> fPathIndexBuffer; |
+ SkTDArray<float> fPathTransformBuffer; |
+ GeoPoolStateStack fGeoPoolStateStack; |
+ bool fFlushing; |
+ uint32_t fDrawID; |
typedef GrClipTarget INHERITED; |
}; |