Clip scissor to RT bounds
authorbsalomon <bsalomon@google.com>
Fri, 6 Mar 2015 16:42:34 +0000 (08:42 -0800)
committerCommit bot <commit-bot@chromium.org>
Fri, 6 Mar 2015 16:42:34 +0000 (08:42 -0800)
R=joshualitt@google.com

NOTREECHECKS=true

Review URL: https://codereview.chromium.org/985783002

src/gpu/GrClipMaskManager.cpp

index b58c565..66d817e 100644 (file)
@@ -240,10 +240,15 @@ bool GrClipMaskManager::setupClipping(GrPipelineBuilder* pipelineBuilder,
         case GrClip::kWideOpen_ClipType:
             SkFAIL("Should have caught this with clip.isWideOpen()");
             return true;
-        case GrClip::kIRect_ClipType:
-            scissorState->set(clip.irect());
-            this->setPipelineBuilderStencil(pipelineBuilder, ars);
-            return true;
+        case GrClip::kIRect_ClipType: {
+            SkIRect scissor = clip.irect();
+            if (scissor.intersect(clipSpaceRTIBounds)) {
+                scissorState->set(scissor);
+                this->setPipelineBuilderStencil(pipelineBuilder, ars);
+                return true;
+            }
+            return false;
+        }
         case GrClip::kClipStack_ClipType: {
             clipSpaceRTIBounds.offset(clip.origin());
             GrReducedClip::ReduceClipStack(*clip.clipStack(),