Index: tests/WritePixelsTest.cpp |
diff --git a/tests/WritePixelsTest.cpp b/tests/WritePixelsTest.cpp |
index c4010b711976729c74cdac27dac19ea0665b7e0f..6d672f7d16cdbcebf4ecd91b3329e93cc753e472 100644 |
--- a/tests/WritePixelsTest.cpp |
+++ b/tests/WritePixelsTest.cpp |
@@ -14,13 +14,11 @@ |
#include "sk_tool_utils.h" |
#if SK_SUPPORT_GPU |
-#include "GrContextFactory.h" |
-#include "SkGpuDevice.h" |
-#else |
-class GrContext; |
-class GrContextFactory; |
+#include "GrContext.h" |
#endif |
+#include <initializer_list> |
+ |
static const int DEV_W = 100, DEV_H = 100; |
static const SkIRect DEV_RECT = SkIRect::MakeWH(DEV_W, DEV_H); |
static const SkRect DEV_RECT_S = SkRect::MakeWH(DEV_W * SK_Scalar1, |
@@ -254,28 +252,6 @@ static bool check_write(skiatest::Reporter* reporter, SkCanvas* canvas, const Sk |
return true; |
} |
-enum DevType { |
- kRaster_DevType, |
-#if SK_SUPPORT_GPU |
- kGpu_BottomLeft_DevType, |
- kGpu_TopLeft_DevType, |
-#endif |
-}; |
- |
-struct CanvasConfig { |
- DevType fDevType; |
- bool fTightRowBytes; |
-}; |
- |
-static const CanvasConfig gCanvasConfigs[] = { |
- {kRaster_DevType, true}, |
- {kRaster_DevType, false}, |
-#if SK_SUPPORT_GPU |
- {kGpu_BottomLeft_DevType, true}, // row bytes has no meaning on gpu devices |
- {kGpu_TopLeft_DevType, true}, // row bytes has no meaning on gpu devices |
-#endif |
-}; |
- |
#include "SkMallocPixelRef.h" |
// This is a tricky pattern, because we have to setConfig+rowBytes AND specify |
@@ -295,36 +271,6 @@ static void free_pixels(void* pixels, void* ctx) { |
sk_free(pixels); |
} |
-static SkSurface* create_surface(const CanvasConfig& c, GrContext* grCtx) { |
- SkImageInfo info = SkImageInfo::MakeN32Premul(DEV_W, DEV_H); |
- switch (c.fDevType) { |
- case kRaster_DevType: { |
- const size_t rowBytes = c.fTightRowBytes ? info.minRowBytes() : 4 * DEV_W + 100; |
- const size_t size = info.getSafeSize(rowBytes); |
- void* pixels = sk_malloc_throw(size); |
- // if rowBytes isn't tight then set the padding to a known value |
- if (!c.fTightRowBytes) { |
- memset(pixels, DEV_PAD, size); |
- } |
- return SkSurface::NewRasterDirectReleaseProc(info, pixels, rowBytes, free_pixels, nullptr); |
- } |
-#if SK_SUPPORT_GPU |
- case kGpu_BottomLeft_DevType: |
- case kGpu_TopLeft_DevType: |
- GrSurfaceDesc desc; |
- desc.fFlags = kRenderTarget_GrSurfaceFlag; |
- desc.fWidth = DEV_W; |
- desc.fHeight = DEV_H; |
- desc.fConfig = kSkia8888_GrPixelConfig; |
- desc.fOrigin = kGpu_TopLeft_DevType == c.fDevType ? |
- kTopLeft_GrSurfaceOrigin : kBottomLeft_GrSurfaceOrigin; |
- SkAutoTUnref<GrTexture> texture(grCtx->textureProvider()->createTexture(desc, false)); |
- return SkSurface::NewRenderTargetDirect(texture->asRenderTarget()); |
-#endif |
- } |
- return nullptr; |
-} |
- |
static bool setup_bitmap(SkBitmap* bm, SkColorType ct, SkAlphaType at, int w, int h, int tightRB) { |
size_t rowBytes = tightRB ? 0 : 4 * w + 60; |
SkImageInfo info = SkImageInfo::Make(w, h, ct, at); |
@@ -346,7 +292,7 @@ static void call_writepixels(SkCanvas* canvas) { |
canvas->writePixels(info, &pixel, sizeof(SkPMColor), 0, 0); |
} |
-static void test_surface_genid(skiatest::Reporter* reporter) { |
+DEF_TEST(WritePixelsSurfaceGenID, reporter) { |
const SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); |
SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); |
uint32_t genID1 = surface->generationID(); |
@@ -355,11 +301,7 @@ static void test_surface_genid(skiatest::Reporter* reporter) { |
REPORTER_ASSERT(reporter, genID1 != genID2); |
} |
-DEF_GPUTEST(WritePixels, reporter, factory) { |
- test_surface_genid(reporter); |
- |
- SkCanvas canvas; |
- |
+static void test_write_pixels(skiatest::Reporter* reporter, SkSurface* surface) { |
const SkIRect testRects[] = { |
// entire thing |
DEV_RECT, |
@@ -407,72 +349,73 @@ DEF_GPUTEST(WritePixels, reporter, factory) { |
SkIRect::MakeLTRB(3 * DEV_W / 4, -10, DEV_W + 10, DEV_H + 10), |
}; |
- for (size_t i = 0; i < SK_ARRAY_COUNT(gCanvasConfigs); ++i) { |
- int glCtxTypeCnt = 1; |
-#if SK_SUPPORT_GPU |
- bool isGPUDevice = kGpu_TopLeft_DevType == gCanvasConfigs[i].fDevType || |
- kGpu_BottomLeft_DevType == gCanvasConfigs[i].fDevType; |
- if (isGPUDevice) { |
- glCtxTypeCnt = GrContextFactory::kGLContextTypeCnt; |
- } |
-#endif |
- for (int glCtxType = 0; glCtxType < glCtxTypeCnt; ++glCtxType) { |
- GrContext* context = nullptr; |
-#if SK_SUPPORT_GPU |
- if (isGPUDevice) { |
- GrContextFactory::GLContextType type = |
- static_cast<GrContextFactory::GLContextType>(glCtxType); |
- if (!GrContextFactory::IsRenderingGLContext(type)) { |
- continue; |
- } |
- context = factory->get(type); |
- if (nullptr == context) { |
- continue; |
- } |
- } |
-#endif |
+ SkCanvas& canvas = *surface->getCanvas(); |
- SkAutoTUnref<SkSurface> surface(create_surface(gCanvasConfigs[i], context)); |
- SkCanvas& canvas = *surface->getCanvas(); |
- |
- static const struct { |
- SkColorType fColorType; |
- SkAlphaType fAlphaType; |
- } gSrcConfigs[] = { |
- { kRGBA_8888_SkColorType, kPremul_SkAlphaType }, |
- { kRGBA_8888_SkColorType, kUnpremul_SkAlphaType }, |
- { kBGRA_8888_SkColorType, kPremul_SkAlphaType }, |
- { kBGRA_8888_SkColorType, kUnpremul_SkAlphaType }, |
- }; |
- for (size_t r = 0; r < SK_ARRAY_COUNT(testRects); ++r) { |
- const SkIRect& rect = testRects[r]; |
- for (int tightBmp = 0; tightBmp < 2; ++tightBmp) { |
- for (size_t c = 0; c < SK_ARRAY_COUNT(gSrcConfigs); ++c) { |
- const SkColorType ct = gSrcConfigs[c].fColorType; |
- const SkAlphaType at = gSrcConfigs[c].fAlphaType; |
- |
- fill_canvas(&canvas); |
- SkBitmap bmp; |
- REPORTER_ASSERT(reporter, setup_bitmap(&bmp, ct, at, rect.width(), |
- rect.height(), SkToBool(tightBmp))); |
- uint32_t idBefore = surface->generationID(); |
- |
- // sk_tool_utils::write_pixels(&canvas, bmp, rect.fLeft, rect.fTop, ct, at); |
- canvas.writePixels(bmp, rect.fLeft, rect.fTop); |
- |
- uint32_t idAfter = surface->generationID(); |
- REPORTER_ASSERT(reporter, check_write(reporter, &canvas, bmp, |
- rect.fLeft, rect.fTop)); |
- |
- // we should change the genID iff pixels were actually written. |
- SkIRect canvasRect = SkIRect::MakeSize(canvas.getDeviceSize()); |
- SkIRect writeRect = SkIRect::MakeXYWH(rect.fLeft, rect.fTop, |
- bmp.width(), bmp.height()); |
- bool intersects = SkIRect::Intersects(canvasRect, writeRect) ; |
- REPORTER_ASSERT(reporter, intersects == (idBefore != idAfter)); |
- } |
- } |
+ static const struct { |
+ SkColorType fColorType; |
+ SkAlphaType fAlphaType; |
+ } gSrcConfigs[] = { |
+ { kRGBA_8888_SkColorType, kPremul_SkAlphaType }, |
+ { kRGBA_8888_SkColorType, kUnpremul_SkAlphaType }, |
+ { kBGRA_8888_SkColorType, kPremul_SkAlphaType }, |
+ { kBGRA_8888_SkColorType, kUnpremul_SkAlphaType }, |
+ }; |
+ for (size_t r = 0; r < SK_ARRAY_COUNT(testRects); ++r) { |
+ const SkIRect& rect = testRects[r]; |
+ for (int tightBmp = 0; tightBmp < 2; ++tightBmp) { |
+ for (size_t c = 0; c < SK_ARRAY_COUNT(gSrcConfigs); ++c) { |
+ const SkColorType ct = gSrcConfigs[c].fColorType; |
+ const SkAlphaType at = gSrcConfigs[c].fAlphaType; |
+ |
+ fill_canvas(&canvas); |
+ SkBitmap bmp; |
+ REPORTER_ASSERT(reporter, setup_bitmap(&bmp, ct, at, rect.width(), |
+ rect.height(), SkToBool(tightBmp))); |
+ uint32_t idBefore = surface->generationID(); |
+ |
+ // sk_tool_utils::write_pixels(&canvas, bmp, rect.fLeft, rect.fTop, ct, at); |
+ canvas.writePixels(bmp, rect.fLeft, rect.fTop); |
+ |
+ uint32_t idAfter = surface->generationID(); |
+ REPORTER_ASSERT(reporter, check_write(reporter, &canvas, bmp, |
+ rect.fLeft, rect.fTop)); |
+ |
+ // we should change the genID iff pixels were actually written. |
+ SkIRect canvasRect = SkIRect::MakeSize(canvas.getDeviceSize()); |
+ SkIRect writeRect = SkIRect::MakeXYWH(rect.fLeft, rect.fTop, |
+ bmp.width(), bmp.height()); |
+ bool intersects = SkIRect::Intersects(canvasRect, writeRect) ; |
+ REPORTER_ASSERT(reporter, intersects == (idBefore != idAfter)); |
} |
} |
} |
} |
+DEF_TEST(WritePixels, reporter) { |
+ const SkImageInfo info = SkImageInfo::MakeN32Premul(DEV_W, DEV_H); |
+ for (auto& tightRowBytes : { true, false }) { |
+ const size_t rowBytes = tightRowBytes ? info.minRowBytes() : 4 * DEV_W + 100; |
+ const size_t size = info.getSafeSize(rowBytes); |
+ void* pixels = sk_malloc_throw(size); |
+ // if rowBytes isn't tight then set the padding to a known value |
+ if (!tightRowBytes) { |
+ memset(pixels, DEV_PAD, size); |
+ } |
+ SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterDirectReleaseProc(info, pixels, rowBytes, free_pixels, nullptr)); |
+ test_write_pixels(reporter, surface); |
+ } |
+} |
+#if SK_SUPPORT_GPU |
+DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WritePixels_Gpu, reporter, context) { |
+ for (auto& origin : { kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin }) { |
+ GrSurfaceDesc desc; |
+ desc.fFlags = kRenderTarget_GrSurfaceFlag; |
+ desc.fWidth = DEV_W; |
+ desc.fHeight = DEV_H; |
+ desc.fConfig = kSkia8888_GrPixelConfig; |
+ desc.fOrigin = origin; |
+ SkAutoTUnref<GrTexture> texture(context->textureProvider()->createTexture(desc, false)); |
+ SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTargetDirect(texture->asRenderTarget())); |
+ test_write_pixels(reporter, surface); |
+ } |
+} |
+#endif |