aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ops/GrClearStencilClipOp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/ops/GrClearStencilClipOp.h')
-rw-r--r--src/gpu/ops/GrClearStencilClipOp.h24
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;
};