From 0cf45f607cfc5d22ef9e6fbe0c7480a409349704 Mon Sep 17 00:00:00 2001 From: Greg Daniel Date: Mon, 17 Apr 2017 10:46:51 -0400 Subject: Split SkCrossContextImageData into Image and BackendTexture subclasses This is needed for a follow up CL where we switch from using GrBackendTextureDesc to GrBackendTexture. Bug: skia: Change-Id: Id12d3357af1cc7f30c7f9196e614089779dc0715 Reviewed-on: https://skia-review.googlesource.com/13588 Reviewed-by: Brian Osman Commit-Queue: Greg Daniel --- src/image/SkImage.cpp | 4 ++-- src/image/SkImage_Gpu.cpp | 28 +++++++++++++--------------- 2 files changed, 15 insertions(+), 17 deletions(-) (limited to 'src/image') diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index bbe1754c08..9db4ed1fe8 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -375,12 +375,12 @@ std::unique_ptr SkCrossContextImageData::MakeFromEncode return nullptr; } // TODO: Force decode to raster here? - return std::unique_ptr(new SkCrossContextImageData(std::move(image))); + return std::unique_ptr(new SkCCIDImage(std::move(image))); } sk_sp SkImage::MakeFromCrossContextImageData( GrContext*, std::unique_ptr ccid) { - return ccid->fImage; + return ccid->makeImage(nullptr); } sk_sp SkImage::makeNonTextureImage() const { diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp index 97a657a680..932bb383d2 100644 --- a/src/image/SkImage_Gpu.cpp +++ b/src/image/SkImage_Gpu.cpp @@ -445,14 +445,14 @@ std::unique_ptr SkCrossContextImageData::MakeFromEncode // Some backends or drivers don't support (safely) moving resources between contexts if (!context->caps()->crossContextTextureSupport()) { return std::unique_ptr( - new SkCrossContextImageData(std::move(codecImage))); + new SkCCIDImage(std::move(codecImage))); } sk_sp textureImage = codecImage->makeTextureImage(context, dstColorSpace); if (!textureImage) { // TODO: Force decode to raster here? Do mip-mapping, like getDeferredTextureImageData? return std::unique_ptr( - new SkCrossContextImageData(std::move(codecImage))); + new SkCCIDImage(std::move(codecImage))); } // Crack open the gpu image, extract the backend data, stick it in the SkCCID @@ -472,27 +472,25 @@ std::unique_ptr SkCrossContextImageData::MakeFromEncode SkASSERT(textureData); SkImageInfo info = as_IB(textureImage)->onImageInfo(); - return std::unique_ptr(new SkCrossContextImageData( + return std::unique_ptr(new SkCCIDBackendTexture( desc, std::move(textureData), info.alphaType(), info.refColorSpace())); } -sk_sp SkImage::MakeFromCrossContextImageData( - GrContext* context, std::unique_ptr ccid) { - if (ccid->fImage) { - // No pre-existing GPU resource. We could upload it now (with makeTextureImage), - // but we'd need a dstColorSpace. - return ccid->fImage; - } - - if (ccid->fTextureData) { - ccid->fTextureData->attachToContext(context); +sk_sp SkCCIDBackendTexture::makeImage(GrContext* context) { + if (fTextureData) { + fTextureData->attachToContext(context); } // This texture was created by Ganesh on another thread (see MakeFromEncoded, above). // Thus, we can import it back into our cache and treat it as our own (again). GrWrapOwnership ownership = kAdoptAndCache_GrWrapOwnership; - return new_wrapped_texture_common(context, ccid->fDesc, ccid->fAlphaType, - std::move(ccid->fColorSpace), ownership, nullptr, nullptr); + return new_wrapped_texture_common(context, fDesc, fAlphaType, + std::move(fColorSpace), ownership, nullptr, nullptr); +} + +sk_sp SkImage::MakeFromCrossContextImageData( + GrContext* context, std::unique_ptr ccid) { + return ccid->makeImage(context); } sk_sp SkImage::makeNonTextureImage() const { -- cgit v1.2.3