Expand SkImage::getTextureHandle call
AFAICT cc/output/gl_renderer.cc only calls SkImage:getTexture to determine the origin of the backing GrTexture. What do y'all think of this CL as a means of removing that call to getTexture?
One alternative would be to add a new entry point like:
bool SkImage::getBackendTextureDesc(GrBackendTextureDesc* desc) const;
which fills in the entire desc and returns whether the image is texture backed.
Change-Id: Idd302c0a11d69ad08e0100bcf546b3bbaa7cf27e
Reviewed-on: https://skia-review.googlesource.com/7788
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index 66f19fa..76ddd96 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -740,8 +740,9 @@
const int kHeight = 10;
std::unique_ptr<uint32_t[]> pixels(new uint32_t[kWidth * kHeight]);
GrBackendTextureDesc backendDesc;
- backendDesc.fConfig = kRGBA_8888_GrPixelConfig;
backendDesc.fFlags = kRenderTarget_GrBackendTextureFlag;
+ backendDesc.fOrigin = kBottomLeft_GrSurfaceOrigin;
+ backendDesc.fConfig = kRGBA_8888_GrPixelConfig;
backendDesc.fWidth = kWidth;
backendDesc.fHeight = kHeight;
backendDesc.fSampleCnt = 0;
@@ -753,6 +754,23 @@
SkImage::MakeFromTexture(ctxInfo.grContext(), backendDesc, kPremul_SkAlphaType,
TextureReleaseChecker::Release, &releaseChecker));
+ GrSurfaceOrigin readBackOrigin;
+ GrBackendObject readBackHandle = refImg->getTextureHandle(false, &readBackOrigin);
+ // TODO: Make it so we can check this (see skbug.com/5019)
+#if 0
+ if (*readBackHandle != *(backendDesc.fTextureHandle)) {
+ ERRORF(reporter, "backend mismatch %d %d\n",
+ (int)readBackHandle, (int)backendDesc.fTextureHandle);
+ }
+ REPORTER_ASSERT(reporter, readBackHandle == backendDesc.fTextureHandle);
+#else
+ REPORTER_ASSERT(reporter, SkToBool(readBackHandle));
+#endif
+ if (readBackOrigin != backendDesc.fOrigin) {
+ ERRORF(reporter, "origin mismatch %d %d\n", readBackOrigin, backendDesc.fOrigin);
+ }
+ REPORTER_ASSERT(reporter, readBackOrigin == backendDesc.fOrigin);
+
// Now exercise the release proc
REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
refImg.reset(nullptr); // force a release of the image