diff options
Diffstat (limited to 'src/gpu/ops/GrClearStencilClipOp.h')
-rw-r--r-- | src/gpu/ops/GrClearStencilClipOp.h | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/gpu/ops/GrClearStencilClipOp.h b/src/gpu/ops/GrClearStencilClipOp.h index ffd2fd9b28..9f23a665d9 100644 --- a/src/gpu/ops/GrClearStencilClipOp.h +++ b/src/gpu/ops/GrClearStencilClipOp.h @@ -9,6 +9,7 @@ #define GrClearStencilClipOp_DEFINED #include "GrFixedClip.h" +#include "GrCaps.h" #include "GrGpuCommandBuffer.h" #include "GrOp.h" #include "GrOpFlushState.h" @@ -19,8 +20,10 @@ public: DEFINE_OP_CLASS_ID static std::unique_ptr<GrOp> Make(const GrFixedClip& clip, bool insideStencilMask, - GrRenderTargetProxy* proxy) { - return std::unique_ptr<GrOp>(new GrClearStencilClipOp(clip, insideStencilMask, proxy)); + bool canIgnoreClip, GrRenderTargetProxy* proxy, + const GrCaps& caps) { + return std::unique_ptr<GrOp>( + new GrClearStencilClipOp(clip, insideStencilMask, canIgnoreClip, proxy, caps)); } const char* name() const override { return "ClearStencilClip"; } @@ -39,11 +42,16 @@ public: } private: - GrClearStencilClipOp(const GrFixedClip& clip, bool insideStencilMask, - GrRenderTargetProxy* proxy) + GrClearStencilClipOp(const GrFixedClip& clip, bool insideStencilMask, bool canIgnoreClip, + GrRenderTargetProxy* proxy, const GrCaps& caps) : INHERITED(ClassID()) - , fClip(clip) - , fInsideStencilMask(insideStencilMask) { + , fInsideStencilMask(insideStencilMask) + , fClip(clip) { + if (fClip.hasWindowRectangles() && + GrCaps::WindowRectsSupport::kDrawAndClear != caps.windowRectsSupport() && + canIgnoreClip) { + fClip.disableWindowRectangles(); + } const SkRect& bounds = fClip.scissorEnabled() ? SkRect::Make(fClip.scissorRect()) : SkRect::MakeIWH(proxy->width(), proxy->height()); @@ -59,8 +67,8 @@ private: state->rtCommandBuffer()->clearStencilClip(fClip, fInsideStencilMask); } - const GrFixedClip fClip; - const bool fInsideStencilMask; + const bool fInsideStencilMask; + GrFixedClip fClip; typedef GrOp INHERITED; }; |