Index: tests/ImageTest.cpp |
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp |
index efded7c6defa347edefb8c86b00947339f75ba67..34660d84de9497f1b8c13210a791334079242d5f 100644 |
--- a/tests/ImageTest.cpp |
+++ b/tests/ImageTest.cpp |
@@ -26,6 +26,10 @@ |
#include "SkUtils.h" |
#include "Test.h" |
+#if SK_SUPPORT_GPU |
+#include "GrGpu.h" |
+#endif |
+ |
using namespace sk_gpu_test; |
static void assert_equal(skiatest::Reporter* reporter, SkImage* a, const SkIRect* subsetA, |
@@ -745,62 +749,30 @@ struct TextureReleaseChecker { |
static_cast<TextureReleaseChecker*>(self)->fReleaseCount++; |
} |
}; |
-static void check_image_color(skiatest::Reporter* reporter, SkImage* image, SkPMColor expected) { |
- const SkImageInfo info = SkImageInfo::MakeN32Premul(1, 1); |
- SkPMColor pixel; |
- REPORTER_ASSERT(reporter, image->readPixels(info, &pixel, sizeof(pixel), 0, 0)); |
- REPORTER_ASSERT(reporter, pixel == expected); |
-} |
-DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkImage_NewFromTexture, reporter, ctxInfo) { |
- GrTextureProvider* provider = ctxInfo.grContext()->textureProvider(); |
- const int w = 10; |
- const int h = 10; |
- SkPMColor storage[w * h]; |
- const SkPMColor expected0 = SkPreMultiplyColor(SK_ColorRED); |
- sk_memset32(storage, expected0, w * h); |
- GrSurfaceDesc desc; |
- desc.fFlags = kRenderTarget_GrSurfaceFlag; // needs to be a rendertarget for readpixels(); |
- desc.fOrigin = kDefault_GrSurfaceOrigin; |
- desc.fWidth = w; |
- desc.fHeight = h; |
- desc.fConfig = kSkia8888_GrPixelConfig; |
- desc.fSampleCnt = 0; |
- SkAutoTUnref<GrTexture> tex(provider->createTexture(desc, SkBudgeted::kNo, storage, w * 4)); |
- if (!tex) { |
- REPORTER_ASSERT(reporter, false); |
- return; |
- } |
- |
+DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkImage_NewFromTextureRelease, reporter, ctxInfo) { |
+ const int kWidth = 10; |
+ const int kHeight = 10; |
+ SkAutoTDeleteArray<uint32_t> pixels(new uint32_t[kWidth * kHeight]); |
GrBackendTextureDesc backendDesc; |
- backendDesc.fConfig = kSkia8888_GrPixelConfig; |
+ backendDesc.fConfig = kRGBA_8888_GrPixelConfig; |
backendDesc.fFlags = kRenderTarget_GrBackendTextureFlag; |
- backendDesc.fWidth = w; |
- backendDesc.fHeight = h; |
+ backendDesc.fWidth = kWidth; |
+ backendDesc.fHeight = kHeight; |
backendDesc.fSampleCnt = 0; |
- backendDesc.fTextureHandle = tex->getTextureHandle(); |
+ backendDesc.fTextureHandle = ctxInfo.grContext()->getGpu()->createTestingOnlyBackendTexture( |
+ pixels.get(), kWidth, kHeight, kRGBA_8888_GrPixelConfig, true); |
+ |
TextureReleaseChecker releaseChecker; |
sk_sp<SkImage> refImg( |
SkImage::MakeFromTexture(ctxInfo.grContext(), backendDesc, kPremul_SkAlphaType, |
TextureReleaseChecker::Release, &releaseChecker)); |
- check_image_color(reporter, refImg.get(), expected0); |
- |
- // Now lets jam new colors into our "external" texture, and see if the images notice |
- const SkPMColor expected1 = SkPreMultiplyColor(SK_ColorBLUE); |
- sk_memset32(storage, expected1, w * h); |
- tex->writePixels(0, 0, w, h, kSkia8888_GrPixelConfig, storage, GrContext::kFlushWrites_PixelOp); |
- |
- // The cpy'd one should still see the old color |
-#if 0 |
- // There is no guarantee that refImg sees the new color. We are free to have made a copy. Our |
- // write pixels call violated the contract with refImg and refImg is now undefined. |
- check_image_color(reporter, refImg, expected1); |
-#endif |
- |
// Now exercise the release proc |
REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount); |
refImg.reset(nullptr); // force a release of the image |
REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount); |
+ |
+ ctxInfo.grContext()->getGpu()->deleteTestingOnlyBackendTexture(backendDesc.fTextureHandle); |
} |
static void check_images_same(skiatest::Reporter* reporter, const SkImage* a, const SkImage* b) { |