Index: tests/ClipBoundsTest.cpp |
diff --git a/tests/ClipBoundsTest.cpp b/tests/ClipBoundsTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c9445729c55fd54c1bc80ce88b06ae69a3a49166 |
--- /dev/null |
+++ b/tests/ClipBoundsTest.cpp |
@@ -0,0 +1,115 @@ |
+/* |
robertphillips
2015/09/30 12:33:06
Should we update the date ?
bsalomon
2015/09/30 19:59:40
Done.
|
+ * Copyright 2012 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "Test.h" |
+// This is a GR test |
+#if SK_SUPPORT_GPU |
+#include "GrClipMaskManager.h" |
+#include "GrContextFactory.h" |
+#include "SkGpuDevice.h" |
+ |
+static const int X_SIZE = 12; |
bsalomon
2015/09/29 19:28:09
This is just the old ClipCacheTest.cpp with all th
|
+static const int Y_SIZE = 12; |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// note: this is unused |
robertphillips
2015/09/30 12:33:06
Can we delete this then ?
bsalomon
2015/09/30 19:59:40
Done, no idea why it was there.
|
+static GrTexture* create_texture(GrContext* context) { |
+ unsigned char textureData[X_SIZE][Y_SIZE][4]; |
+ |
+ memset(textureData, 0, 4* X_SIZE * Y_SIZE); |
+ |
+ GrSurfaceDesc desc; |
+ |
+ // let Skia know we will be using this texture as a render target |
+ desc.fFlags = kRenderTarget_GrSurfaceFlag; |
+ desc.fConfig = kSkia8888_GrPixelConfig; |
+ desc.fWidth = X_SIZE; |
+ desc.fHeight = Y_SIZE; |
+ |
+ // We are initializing the texture with zeros here |
+ GrTexture* texture = context->textureProvider()->createTexture(desc, false, textureData, 0); |
+ if (!texture) { |
+ return nullptr; |
+ } |
+ |
+ return texture; |
+} |
+ |
+// Ensure that the 'getConservativeBounds' calls are returning bounds clamped |
+// to the render target |
+static void test_clip_bounds(skiatest::Reporter* reporter, GrContext* context) { |
+ |
+ static const int kXSize = 100; |
+ static const int kYSize = 100; |
+ |
+ GrSurfaceDesc desc; |
+ desc.fFlags = kRenderTarget_GrSurfaceFlag; |
+ desc.fConfig = kAlpha_8_GrPixelConfig; |
+ desc.fWidth = kXSize; |
+ desc.fHeight = kYSize; |
+ |
robertphillips
2015/09/30 12:33:06
Just SkAutoTUnref<GrTexture> texture( ... ?
|
+ GrTexture* texture = context->textureProvider()->createTexture(desc, false, nullptr, 0); |
+ if (!texture) { |
+ return; |
+ } |
+ |
+ SkAutoTUnref<GrTexture> au(texture); |
+ |
+ SkIRect intScreen = SkIRect::MakeWH(kXSize, kYSize); |
robertphillips
2015/09/30 12:33:06
SkRect screen = SkRect::Make(intScreen); ?
bsalomon
2015/09/30 19:59:40
Done.
|
+ SkRect screen; |
+ |
+ screen = SkRect::MakeWH(SkIntToScalar(kXSize), |
+ SkIntToScalar(kYSize)); |
+ |
+ SkRect clipRect(screen); |
+ clipRect.outset(10, 10); |
+ |
+ // create a clip stack that will (trivially) reduce to a single rect that |
+ // is larger than the screen |
+ SkClipStack stack; |
+ stack.clipDevRect(clipRect, SkRegion::kReplace_Op, false); |
+ |
+ bool isIntersectionOfRects = true; |
+ SkRect devStackBounds; |
+ |
+ stack.getConservativeBounds(0, 0, kXSize, kYSize, |
+ &devStackBounds, |
+ &isIntersectionOfRects); |
+ |
+ // make sure that the SkClipStack is behaving itself |
+ REPORTER_ASSERT(reporter, screen == devStackBounds); |
+ REPORTER_ASSERT(reporter, isIntersectionOfRects); |
+ |
+ // wrap the SkClipStack in a GrClip |
+ GrClip clipData; |
+ clipData.setClipStack(&stack); |
+ |
+ SkIRect devGrClipBound; |
+ clipData.getConservativeBounds(texture, |
+ &devGrClipBound, |
+ &isIntersectionOfRects); |
+ |
+ // make sure that GrClip is behaving itself |
+ REPORTER_ASSERT(reporter, intScreen == devGrClipBound); |
+ REPORTER_ASSERT(reporter, isIntersectionOfRects); |
+} |
+ |
+DEF_GPUTEST(GrClipBounds, reporter, factory) { |
+ for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { |
+ GrContextFactory::GLContextType glType = static_cast<GrContextFactory::GLContextType>(type); |
+ if (!GrContextFactory::IsRenderingGLContext(glType)) { |
+ continue; |
+ } |
+ GrContext* context = factory->get(glType); |
+ if (nullptr == context) { |
+ continue; |
+ } |
+ test_clip_bounds(reporter, context); |
+ } |
+} |
+ |
+#endif |