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

Unified Diff: src/gpu/GrInOrderDrawBuffer.h

Issue 685883003: Clip in grdrawtarget (Closed) Base URL: https://skia.googlesource.com/skia.git@drawtarget_on_clip_manager
Patch Set: dm cleaned up Created 6 years, 1 month 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
Index: src/gpu/GrInOrderDrawBuffer.h
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h
index 1e8b5a6d3c85bb578b320d2a146efb74fda7f1b6..080d00a10acaa7c993b361e4091a6a64e6d18ab6 100644
--- a/src/gpu/GrInOrderDrawBuffer.h
+++ b/src/gpu/GrInOrderDrawBuffer.h
@@ -99,19 +99,16 @@ public:
virtual void initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* desc) SK_OVERRIDE;
-protected:
- virtual void clipWillBeSet(const GrClipData* newClip) SK_OVERRIDE;
-
private:
+ typedef GrClipMaskManager::ScissorState ScissorState;
enum {
kDraw_Cmd = 1,
kStencilPath_Cmd = 2,
kSetState_Cmd = 3,
- kSetClip_Cmd = 4,
- kClear_Cmd = 5,
- kCopySurface_Cmd = 6,
- kDrawPath_Cmd = 7,
- kDrawPaths_Cmd = 8,
+ kClear_Cmd = 4,
+ kCopySurface_Cmd = 5,
+ kDrawPath_Cmd = 6,
+ kDrawPaths_Cmd = 7,
};
struct Cmd : ::SkNoncopyable {
@@ -124,9 +121,11 @@ private:
};
struct Draw : public Cmd {
- Draw(const DrawInfo& info, const GrVertexBuffer* vb, const GrIndexBuffer* ib)
+ Draw(const DrawInfo& info, const ScissorState& scissorState,
+ const GrVertexBuffer* vb, const GrIndexBuffer* ib)
: Cmd(kDraw_Cmd)
, fInfo(info)
+ , fScissorState(scissorState)
, fVertexBuffer(vb)
, fIndexBuffer(ib) {}
@@ -135,7 +134,8 @@ private:
virtual void execute(GrClipTarget*);
- DrawInfo fInfo;
+ DrawInfo fInfo;
+ ScissorState fScissorState;
private:
GrPendingIOResource<const GrVertexBuffer, kRead_GrIOType> fVertexBuffer;
@@ -143,34 +143,39 @@ private:
};
struct StencilPath : public Cmd {
- StencilPath(const GrPath* path) : Cmd(kStencilPath_Cmd), fPath(path) {}
+ StencilPath(const GrPath* path)
+ : Cmd(kStencilPath_Cmd), fPath(path) {}
const GrPath* path() const { return fPath.get(); }
virtual void execute(GrClipTarget*);
- GrPathRendering::FillType fFill;
+ ScissorState fScissorState;
+ GrStencilSettings fStencilSettings;
private:
GrPendingIOResource<const GrPath, kRead_GrIOType> fPath;
};
struct DrawPath : public Cmd {
- DrawPath(const GrPath* path) : Cmd(kDrawPath_Cmd), fPath(path) {}
+ DrawPath(const GrPath* path)
+ : Cmd(kDrawPath_Cmd), fPath(path) {}
const GrPath* path() const { return fPath.get(); }
virtual void execute(GrClipTarget*);
- GrPathRendering::FillType fFill;
- GrDeviceCoordTexture fDstCopy;
+ GrDeviceCoordTexture fDstCopy;
+ ScissorState fScissorState;
+ GrStencilSettings fStencilSettings;
private:
GrPendingIOResource<const GrPath, kRead_GrIOType> fPath;
};
struct DrawPaths : public Cmd {
- DrawPaths(const GrPathRange* pathRange) : Cmd(kDrawPaths_Cmd), fPathRange(pathRange) {}
+ DrawPaths(const GrPathRange* pathRange)
+ : Cmd(kDrawPaths_Cmd), fPathRange(pathRange) {}
const GrPathRange* pathRange() const { return fPathRange.get(); }
uint32_t* indices() { return reinterpret_cast<uint32_t*>(CmdBuffer::GetDataForItem(this)); }
@@ -178,10 +183,11 @@ private:
virtual void execute(GrClipTarget*);
- size_t fCount;
- PathTransformType fTransformsType;
- GrPathRendering::FillType fFill;
- GrDeviceCoordTexture fDstCopy;
+ size_t fCount;
+ PathTransformType fTransformsType;
+ GrDeviceCoordTexture fDstCopy;
+ ScissorState fScissorState;
+ GrStencilSettings fStencilSettings;
private:
GrPendingIOResource<const GrPathRange, kRead_GrIOType> fPathRange;
@@ -242,38 +248,30 @@ private:
GrDrawState fState;
};
- struct SetClip : public Cmd {
- SetClip(const GrClipData* clipData)
- : Cmd(kSetClip_Cmd),
- fStackStorage(*clipData->fClipStack) {
- fClipData.fClipStack = &fStackStorage;
- fClipData.fOrigin = clipData->fOrigin;
- }
-
- virtual void execute(GrClipTarget*);
-
- GrClipData fClipData;
-
- private:
- SkClipStack fStackStorage;
- };
-
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 DrawInfo&) SK_OVERRIDE;
+ virtual void onDraw(const DrawInfo&, const GrClipMaskManager::ScissorState&) SK_OVERRIDE;
virtual void onDrawRect(const SkRect& rect,
const SkRect* localRect,
const SkMatrix* localMatrix) SK_OVERRIDE;
- virtual void onStencilPath(const GrPath*, GrPathRendering::FillType) SK_OVERRIDE;
- virtual void onDrawPath(const GrPath*, GrPathRendering::FillType,
+ virtual void onStencilPath(const GrPath*,
+ const GrClipMaskManager::ScissorState&,
+ const GrStencilSettings&) SK_OVERRIDE;
+ virtual void onDrawPath(const GrPath*,
+ const GrClipMaskManager::ScissorState&,
+ const GrStencilSettings&,
const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE;
virtual void onDrawPaths(const GrPathRange*,
- const uint32_t indices[], int count,
- const float transforms[], PathTransformType,
- GrPathRendering::FillType, const GrDeviceCoordTexture*) SK_OVERRIDE;
+ const uint32_t indices[],
+ int count,
+ const float transforms[],
+ PathTransformType,
+ const GrClipMaskManager::ScissorState&,
+ const GrStencilSettings&,
+ const GrDeviceCoordTexture*) SK_OVERRIDE;
virtual bool onReserveVertexSpace(size_t vertexSize,
int vertexCount,
@@ -293,14 +291,12 @@ private:
virtual void willReserveVertexAndIndexSpace(int vertexCount,
int indexCount) SK_OVERRIDE;
- bool quickInsideClip(const SkRect& devBounds);
-
virtual void didAddGpuTraceMarker() SK_OVERRIDE {}
virtual void didRemoveGpuTraceMarker() 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.
- int concatInstancedDraw(const DrawInfo& info);
+ int concatInstancedDraw(const DrawInfo& info, const GrClipMaskManager::ScissorState&);
// Determines whether the current draw operation requieres a new drawstate and if so records it.
void recordStateIfNecessary();
@@ -319,22 +315,10 @@ private:
CmdBuffer fCmdBuffer;
GrDrawState* fLastState;
- GrClipData* fLastClip;
-
SkTArray<GrTraceMarkerSet, false> fGpuCmdMarkers;
GrClipTarget* fDstGpu;
- bool fClipSet;
-
- enum ClipProxyState {
- kUnknown_ClipProxyState,
- kValid_ClipProxyState,
- kInvalid_ClipProxyState
- };
-
- ClipProxyState fClipProxyState;
- SkRect fClipProxy;
- GrVertexBufferAllocPool& fVertexPool;
- GrIndexBufferAllocPool& fIndexPool;
+ GrVertexBufferAllocPool& fVertexPool;
+ GrIndexBufferAllocPool& fIndexPool;
struct GeometryPoolState {
const GrVertexBuffer* fPoolVertexBuffer;

Powered by Google App Engine
This is Rietveld 408576698