blob: e8aae389941aaa85cb88072b02b53216bfc18e25 [file] [log] [blame]
bsalomon473addf2015-10-02 07:49:05 -07001/*
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
csmartdaltonc6f411e2016-08-05 22:32:12 -070011#include "GrClipStackClip.h"
kkinnunen15302832015-12-01 04:35:26 -080012#include "GrContext.h"
bsalomon473addf2015-10-02 07:49:05 -070013
14// Ensure that the 'getConservativeBounds' calls are returning bounds clamped
15// to the render target
bsalomon68d91342016-04-12 09:59:58 -070016DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrClipBounds, reporter, ctxInfo) {
bsalomon473addf2015-10-02 07:49:05 -070017 static const int kXSize = 100;
18 static const int kYSize = 100;
19
robertphillipsd4c741e2016-04-28 09:55:15 -070020 const SkIRect intScreen = SkIRect::MakeWH(kXSize, kYSize);
21 const SkRect screen = SkRect::Make(intScreen);
bsalomon473addf2015-10-02 07:49:05 -070022
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;
Mike Reedc1f77742016-12-09 09:00:50 -050029 stack.clipRect(clipRect, SkMatrix::I(), kReplace_SkClipOp, false);
bsalomon473addf2015-10-02 07:49:05 -070030
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
cdalton846c0512016-05-13 10:25:00 -070043 GrClipStackClip clipData(&stack);
bsalomon473addf2015-10-02 07:49:05 -070044
45 SkIRect devGrClipBound;
robertphillipsd4c741e2016-04-28 09:55:15 -070046 clipData.getConservativeBounds(kXSize, kYSize,
bsalomon473addf2015-10-02 07:49:05 -070047 &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
bsalomon473addf2015-10-02 07:49:05 -070055#endif