1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "Test.h" 9 // This is a GR test 10 #if SK_SUPPORT_GPU 11 #include "GrClipStackClip.h" 12 #include "GrContext.h" 13 14 // Ensure that the 'getConservativeBounds' calls are returning bounds clamped 15 // to the render target 16 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrClipBounds, reporter, ctxInfo) { 17 static const int kXSize = 100; 18 static const int kYSize = 100; 19 20 const SkIRect intScreen = SkIRect::MakeWH(kXSize, kYSize); 21 const SkRect screen = SkRect::Make(intScreen); 22 23 SkRect clipRect(screen); 24 clipRect.outset(10, 10); 25 26 // create a clip stack that will (trivially) reduce to a single rect that 27 // is larger than the screen 28 SkClipStack stack; 29 stack.clipRect(clipRect, SkMatrix::I(), kReplace_SkClipOp, false); 30 31 bool isIntersectionOfRects = true; 32 SkRect devStackBounds; 33 34 stack.getConservativeBounds(0, 0, kXSize, kYSize, 35 &devStackBounds, 36 &isIntersectionOfRects); 37 38 // make sure that the SkClipStack is behaving itself 39 REPORTER_ASSERT(reporter, screen == devStackBounds); 40 REPORTER_ASSERT(reporter, isIntersectionOfRects); 41 42 // wrap the SkClipStack in a GrClip 43 GrClipStackClip clipData(&stack); 44 45 SkIRect devGrClipBound; 46 clipData.getConservativeBounds(kXSize, kYSize, 47 &devGrClipBound, 48 &isIntersectionOfRects); 49 50 // make sure that GrClip is behaving itself 51 REPORTER_ASSERT(reporter, intScreen == devGrClipBound); 52 REPORTER_ASSERT(reporter, isIntersectionOfRects); 53 } 54 55 #endif 56