diff options
-rw-r--r-- | tests/PackedConfigsTextureTest.cpp | 42 | ||||
-rw-r--r-- | tests/ReadPixelsTest.cpp | 50 | ||||
-rw-r--r-- | tests/ReadWriteAlphaTest.cpp | 17 | ||||
-rw-r--r-- | tests/VkUploadPixelsTests.cpp | 74 |
4 files changed, 79 insertions, 104 deletions
diff --git a/tests/PackedConfigsTextureTest.cpp b/tests/PackedConfigsTextureTest.cpp index e104be594d..35d9dfc3c5 100644 --- a/tests/PackedConfigsTextureTest.cpp +++ b/tests/PackedConfigsTextureTest.cpp @@ -96,40 +96,34 @@ static void check_565(skiatest::Reporter* reporter, } } -static void run_test(skiatest::Reporter* reporter, GrContext* context, - int arraySize, GrPixelConfig config) { - SkTDArray<uint16_t> controlPixelData; +template <typename T> +void runTest(skiatest::Reporter* reporter, GrContext* context, + T val1, T val2, int arraySize, GrPixelConfig config) { + SkTDArray<T> controlPixelData; // We will read back into an 8888 buffer since 565/4444 read backs aren't supported SkTDArray<GrColor> readBuffer; controlPixelData.setCount(arraySize); readBuffer.setCount(arraySize); for (int i = 0; i < arraySize; i += 2) { - controlPixelData[i] = 0xFF00; - controlPixelData[i + 1] = 0xFA62; + controlPixelData[i] = val1; + controlPixelData[i + 1] = val2; } - const SkImageInfo dstInfo = SkImageInfo::Make(DEV_W, DEV_H, - kRGBA_8888_SkColorType, kOpaque_SkAlphaType); - - for (auto origin : { kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin }) { + for (int origin = 0; origin < 2; ++origin) { GrSurfaceDesc desc; desc.fFlags = kNone_GrSurfaceFlags; desc.fWidth = DEV_W; desc.fHeight = DEV_H; desc.fConfig = config; - desc.fOrigin = origin; - - sk_sp<GrTextureProxy> proxy = GrSurfaceProxy::MakeDeferred(context->resourceProvider(), - desc, SkBudgeted::kNo, - controlPixelData.begin(), 0); - SkASSERT(proxy); - - sk_sp<GrSurfaceContext> sContext = context->contextPriv().makeWrappedSurfaceContext( - std::move(proxy), nullptr); - - SkAssertResult(sContext->readPixels(dstInfo, readBuffer.begin(), 0, 0, 0)); - + desc.fOrigin = 0 == origin ? kTopLeft_GrSurfaceOrigin : kBottomLeft_GrSurfaceOrigin; + sk_sp<GrTextureProxy> fpProxy = GrSurfaceProxy::MakeDeferred(context->resourceProvider(), + desc, SkBudgeted::kNo, + controlPixelData.begin(), 0); + SkASSERT(fpProxy); + context->contextPriv().readSurfacePixels(fpProxy.get(), nullptr, 0, 0, DEV_W, DEV_H, + kRGBA_8888_GrPixelConfig, nullptr, + readBuffer.begin(), 0); if (kRGBA_4444_GrPixelConfig == config) { check_4444(reporter, controlPixelData, readBuffer); } else { @@ -142,11 +136,13 @@ static void run_test(skiatest::Reporter* reporter, GrContext* context, static const int CONTROL_ARRAY_SIZE = DEV_W * DEV_H; DEF_GPUTEST_FOR_RENDERING_CONTEXTS(RGBA4444TextureTest, reporter, ctxInfo) { - run_test(reporter, ctxInfo.grContext(), CONTROL_ARRAY_SIZE, kRGBA_4444_GrPixelConfig); + runTest<uint16_t>(reporter, ctxInfo.grContext(), 0xFF00, 0xFA62, + CONTROL_ARRAY_SIZE, kRGBA_4444_GrPixelConfig); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(RGB565TextureTest, reporter, ctxInfo) { - run_test(reporter, ctxInfo.grContext(), CONTROL_ARRAY_SIZE, kRGB_565_GrPixelConfig); + runTest<uint16_t>(reporter, ctxInfo.grContext(), 0xFF00, 0xFA62, + CONTROL_ARRAY_SIZE, kRGB_565_GrPixelConfig); } #endif diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp index 10462c9140..c67e62b090 100644 --- a/tests/ReadPixelsTest.cpp +++ b/tests/ReadPixelsTest.cpp @@ -123,6 +123,21 @@ static void fill_src_canvas(SkCanvas* canvas) { canvas->restore(); } +#if SK_SUPPORT_GPU +static void fill_src_texture(GrContext* context, GrTextureProxy* proxy) { + SkBitmap bmp = make_src_bitmap(); + bmp.lockPixels(); + + SkDEBUGCODE(bool result =) context->contextPriv().writeSurfacePixels( + proxy, nullptr, + 0, 0, DEV_W, DEV_H, + kSkia8888_GrPixelConfig, nullptr, + bmp.getPixels(), bmp.rowBytes()); + SkASSERT(result); + bmp.unlockPixels(); +} +#endif + static void fill_dst_bmp_with_init_data(SkBitmap* bitmap) { SkAutoLockPixels alp(*bitmap); int w = bitmap->width(); @@ -428,7 +443,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Gpu, reporter, ctxInfo) { #if SK_SUPPORT_GPU static void test_readpixels_texture(skiatest::Reporter* reporter, - sk_sp<GrSurfaceContext> sContext) { + GrContext* context, sk_sp<GrTextureProxy> proxy) { + fill_src_texture(context, proxy.get()); for (size_t rect = 0; rect < SK_ARRAY_COUNT(gReadPixelsTestRects); ++rect) { const SkIRect& srcRect = gReadPixelsTestRects[rect]; for (BitmapInit bmi = kFirstBitmapInit; bmi <= kLast_BitmapInit; bmi = nextBMI(bmi)) { @@ -443,14 +459,18 @@ static void test_readpixels_texture(skiatest::Reporter* reporter, // Try doing the read directly from a non-renderable texture if (startsWithPixels) { fill_dst_bmp_with_init_data(&bmp); + GrPixelConfig dstConfig = SkImageInfo2GrPixelConfig(bmp.info(), + *context->caps()); uint32_t flags = 0; if (gReadPixelsConfigs[c].fAlphaType == kUnpremul_SkAlphaType) { flags = GrContextPriv::kUnpremul_PixelOpsFlag; } bmp.lockPixels(); - bool success = sContext->readPixels(bmp.info(), bmp.getPixels(), - bmp.rowBytes(), - srcRect.fLeft, srcRect.fTop, flags); + bool success = context->contextPriv().readSurfacePixels( + proxy.get(), nullptr, + srcRect.fLeft, srcRect.fTop, bmp.width(), + bmp.height(), dstConfig, nullptr, + bmp.getPixels(), bmp.rowBytes(), flags); bmp.unlockPixels(); check_read(reporter, bmp, srcRect.fLeft, srcRect.fTop, success, true, @@ -460,13 +480,7 @@ static void test_readpixels_texture(skiatest::Reporter* reporter, } } } - DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Texture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); - - SkBitmap bmp = make_src_bitmap(); - bmp.lockPixels(); - // On the GPU we will also try reading back from a non-renderable texture. for (auto origin : {kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin}) { for (auto flags : {kNone_GrSurfaceFlags, kRenderTarget_GrSurfaceFlag}) { @@ -476,20 +490,12 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Texture, reporter, ctxInfo) { desc.fHeight = DEV_H; desc.fConfig = kSkia8888_GrPixelConfig; desc.fOrigin = origin; - - sk_sp<GrTextureProxy> proxy = GrSurfaceProxy::MakeDeferred(context->resourceProvider(), - desc, SkBudgeted::kNo, - bmp.getPixels(), - bmp.rowBytes()); - - sk_sp<GrSurfaceContext> sContext = context->contextPriv().makeWrappedSurfaceContext( - std::move(proxy), nullptr); - - test_readpixels_texture(reporter, std::move(sContext)); + sk_sp<GrTexture> texture = + ctxInfo.grContext()->resourceProvider()->createTexture(desc, SkBudgeted::kNo); + test_readpixels_texture(reporter, ctxInfo.grContext(), + GrSurfaceProxy::MakeWrapped(std::move(texture))); } } - - bmp.unlockPixels(); } #endif diff --git a/tests/ReadWriteAlphaTest.cpp b/tests/ReadWriteAlphaTest.cpp index 531159ff6f..2a68191a2d 100644 --- a/tests/ReadWriteAlphaTest.cpp +++ b/tests/ReadWriteAlphaTest.cpp @@ -142,17 +142,13 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadWriteAlpha, reporter, ctxInfo) { } } - const SkImageInfo dstInfo = SkImageInfo::Make(X_SIZE, Y_SIZE, - kAlpha_8_SkColorType, - kPremul_SkAlphaType); - // Attempt to read back just alpha from a RGBA/BGRA texture. Once with a texture-only src and // once with a render target. - for (auto config : kRGBAConfigs) { + for (auto cfg : kRGBAConfigs) { for (int rt = 0; rt < 2; ++rt) { GrSurfaceDesc desc; desc.fFlags = rt ? kRenderTarget_GrSurfaceFlag : kNone_GrSurfaceFlags; - desc.fConfig = config; + desc.fConfig = cfg; desc.fWidth = X_SIZE; desc.fHeight = Y_SIZE; @@ -174,9 +170,6 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadWriteAlpha, reporter, ctxInfo) { continue; } - sk_sp<GrSurfaceContext> sContext = context->contextPriv().makeWrappedSurfaceContext( - std::move(proxy), nullptr); - for (auto rowBytes : kRowBytes) { size_t nonZeroRowBytes = rowBytes ? rowBytes : X_SIZE; @@ -185,7 +178,11 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadWriteAlpha, reporter, ctxInfo) { memset(readback.get(), kClearValue, nonZeroRowBytes * Y_SIZE); // read the texture back - bool result = sContext->readPixels(dstInfo, readback.get(), rowBytes, 0, 0); + bool result = context->contextPriv().readSurfacePixels( + proxy.get(), nullptr, + 0, 0, desc.fWidth, desc.fHeight, + kAlpha_8_GrPixelConfig, nullptr, + readback.get(), rowBytes); REPORTER_ASSERT_MESSAGE(reporter, result, "8888 readPixels failed"); // make sure the original & read back versions match diff --git a/tests/VkUploadPixelsTests.cpp b/tests/VkUploadPixelsTests.cpp index 7e8481b7c2..50fc84fda8 100644 --- a/tests/VkUploadPixelsTests.cpp +++ b/tests/VkUploadPixelsTests.cpp @@ -13,9 +13,7 @@ #include "GrContextFactory.h" #include "GrContextPriv.h" -#include "GrSurfaceProxy.h" #include "GrTest.h" -#include "SkGr.h" #include "Test.h" #include "vk/GrVkGpu.h" @@ -35,6 +33,7 @@ void fill_pixel_data(int width, int height, GrColor* data) { bool does_full_buffer_contain_correct_color(GrColor* srcBuffer, GrColor* dstBuffer, + GrPixelConfig config, int width, int height) { GrColor* srcPtr = srcBuffer; @@ -84,40 +83,28 @@ void basic_texture_test(skiatest::Reporter* reporter, GrContext* context, GrPixe surfDesc.fHeight = kHeight; surfDesc.fConfig = config; surfDesc.fSampleCnt = 0; - - SkColorType ct; - SkAssertResult(GrPixelConfigToColorType(config, &ct)); - - sk_sp<GrTextureProxy> proxy = GrSurfaceProxy::MakeDeferred(context->resourceProvider(), - surfDesc, SkBudgeted::kNo, - srcBuffer, 0); - - if (proxy) { + sk_sp<GrTexture> tex0(gpu->createTexture(surfDesc, SkBudgeted::kNo, srcBuffer, 0)); + if (tex0) { REPORTER_ASSERT(reporter, canCreate); - - sk_sp<GrSurfaceContext> sContext = context->contextPriv().makeWrappedSurfaceContext( - proxy, nullptr); - - SkImageInfo dstInfo = SkImageInfo::Make(kWidth, kHeight, ct, kOpaque_SkAlphaType); - - bool result = sContext->readPixels(dstInfo, dstBuffer, 0, 0, 0); - REPORTER_ASSERT(reporter, result); + gpu->readPixels(tex0.get(), 0, 0, kWidth, kHeight, config, dstBuffer, 0); REPORTER_ASSERT(reporter, does_full_buffer_contain_correct_color(srcBuffer, dstBuffer, + config, kWidth, kHeight)); - dstInfo = SkImageInfo::Make(10, 2, ct, kOpaque_SkAlphaType); - result = sContext->writePixels(dstInfo, srcBuffer, 0, 2, 10); - REPORTER_ASSERT(reporter, result); - - memset(dstBuffer, 0, kWidth*kHeight*sizeof(GrColor)); + sk_sp<GrTextureProxy> proxy = GrSurfaceProxy::MakeWrapped(tex0); - result = sContext->readPixels(dstInfo, dstBuffer, 0, 2, 10); - REPORTER_ASSERT(reporter, result); + bool success = context->contextPriv().writeSurfacePixels(proxy.get(), nullptr, + 2, 10, 10, 2, + config, nullptr, srcBuffer, 0); + REPORTER_ASSERT(reporter, success); + memset(dstBuffer, 0, kWidth*kHeight*sizeof(GrColor)); + gpu->readPixels(tex0.get(), 2, 10, 10, 2, config, dstBuffer, 0); REPORTER_ASSERT(reporter, does_full_buffer_contain_correct_color(srcBuffer, dstBuffer, + config, 10, 2)); } else { @@ -125,36 +112,28 @@ void basic_texture_test(skiatest::Reporter* reporter, GrContext* context, GrPixe } surfDesc.fOrigin = kBottomLeft_GrSurfaceOrigin; - - proxy = GrSurfaceProxy::MakeDeferred(context->resourceProvider(), - surfDesc, SkBudgeted::kNo, - srcBuffer, 0); - if (proxy) { + sk_sp<GrTexture> tex1(gpu->createTexture(surfDesc, SkBudgeted::kNo, srcBuffer, 0)); + if (tex1) { REPORTER_ASSERT(reporter, canCreate); - - sk_sp<GrSurfaceContext> sContext = context->contextPriv().makeWrappedSurfaceContext( - proxy, nullptr); - - SkImageInfo dstInfo = SkImageInfo::Make(kWidth, kHeight, ct, kOpaque_SkAlphaType); - - bool result = sContext->readPixels(dstInfo, dstBuffer, 0, 0, 0); - REPORTER_ASSERT(reporter, result); + gpu->readPixels(tex1.get(), 0, 0, kWidth, kHeight, config, dstBuffer, 0); REPORTER_ASSERT(reporter, does_full_buffer_contain_correct_color(srcBuffer, dstBuffer, + config, kWidth, kHeight)); - dstInfo = SkImageInfo::Make(4, 5, ct, kOpaque_SkAlphaType); - result = sContext->writePixels(dstInfo, srcBuffer, 0, 5, 4); - REPORTER_ASSERT(reporter, result); + sk_sp<GrTextureProxy> proxy = GrSurfaceProxy::MakeWrapped(tex1); - memset(dstBuffer, 0, kWidth*kHeight*sizeof(GrColor)); - - result = sContext->readPixels(dstInfo, dstBuffer, 0, 5, 4); - REPORTER_ASSERT(reporter, result); + bool success = context->contextPriv().writeSurfacePixels(proxy.get(), nullptr, + 5, 4, 4, 5, config, nullptr, + srcBuffer, 0); + REPORTER_ASSERT(reporter, success); + memset(dstBuffer, 0, kWidth*kHeight*sizeof(GrColor)); + gpu->readPixels(tex1.get(), 5, 4, 4, 5, config, dstBuffer, 0); REPORTER_ASSERT(reporter, does_full_buffer_contain_correct_color(srcBuffer, dstBuffer, + config, 4, 5)); @@ -164,13 +143,10 @@ void basic_texture_test(skiatest::Reporter* reporter, GrContext* context, GrPixe } DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkUploadPixelsTests, reporter, ctxInfo) { - // RGBA basic_texture_test(reporter, ctxInfo.grContext(), kRGBA_8888_GrPixelConfig, false, false); basic_texture_test(reporter, ctxInfo.grContext(), kRGBA_8888_GrPixelConfig, true, false); basic_texture_test(reporter, ctxInfo.grContext(), kRGBA_8888_GrPixelConfig, false, true); basic_texture_test(reporter, ctxInfo.grContext(), kRGBA_8888_GrPixelConfig, true, true); - - // BGRA basic_texture_test(reporter, ctxInfo.grContext(), kBGRA_8888_GrPixelConfig, false, false); basic_texture_test(reporter, ctxInfo.grContext(), kBGRA_8888_GrPixelConfig, true, false); basic_texture_test(reporter, ctxInfo.grContext(), kBGRA_8888_GrPixelConfig, false, true); |