Don't add change listeners to pixelRefs in DDL mode
Change-Id: I1ddfec1e0d697dd4ed183c304514b14c89aca11d Reviewed-on: https://skia-review.googlesource.com/115400 Reviewed-by: Greg Daniel <egdaniel@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
This commit is contained in:
parent
7e86547842
commit
5c4b33bce1
@ -308,8 +308,8 @@ sk_sp<GrTextureProxy> GrProxyProvider::createMipMapProxyFromBitmap(const SkBitma
|
||||
// In non-ddl we will always instantiate right away. Thus we never want to copy the SkBitmap
|
||||
// even if its mutable. In ddl, if the bitmap is mutable then we must make a copy since the
|
||||
// upload of the data to the gpu can happen at anytime and the bitmap may change by then.
|
||||
SkCopyPixelsMode copyMode = this->mutableBitmapsNeedCopy() ? kIfMutable_SkCopyPixelsMode
|
||||
: kNever_SkCopyPixelsMode;
|
||||
SkCopyPixelsMode copyMode = this->recordingDDL() ? kIfMutable_SkCopyPixelsMode
|
||||
: kNever_SkCopyPixelsMode;
|
||||
sk_sp<SkImage> baseLevel = SkMakeImageFromRasterBitmap(bitmap, copyMode);
|
||||
|
||||
if (!baseLevel) {
|
||||
|
@ -236,10 +236,9 @@ public:
|
||||
void removeAllUniqueKeys();
|
||||
|
||||
/**
|
||||
* Helper function for callers who are wrapping a bitmap into an SkImage so they know whether or
|
||||
* not that bitmap should be copied or not.
|
||||
* Are we currently recording a DDL?
|
||||
*/
|
||||
bool mutableBitmapsNeedCopy() const { return !SkToBool(fResourceProvider); }
|
||||
bool recordingDDL() const { return !SkToBool(fResourceProvider); }
|
||||
|
||||
private:
|
||||
friend class GrAHardwareBufferImageGenerator; // for createWrapped
|
||||
|
@ -84,8 +84,8 @@ sk_sp<GrTextureProxy> GrUploadBitmapToTextureProxy(GrProxyProvider* proxyProvide
|
||||
// In non-ddl we will always instantiate right away. Thus we never want to copy the SkBitmap
|
||||
// even if it's mutable. In ddl, if the bitmap is mutable then we must make a copy since the
|
||||
// upload of the data to the gpu can happen at anytime and the bitmap may change by then.
|
||||
SkCopyPixelsMode cpyMode = proxyProvider->mutableBitmapsNeedCopy() ? kIfMutable_SkCopyPixelsMode
|
||||
: kNever_SkCopyPixelsMode;
|
||||
SkCopyPixelsMode cpyMode = proxyProvider->recordingDDL() ? kIfMutable_SkCopyPixelsMode
|
||||
: kNever_SkCopyPixelsMode;
|
||||
sk_sp<SkImage> image = SkMakeImageFromRasterBitmap(bitmap, cpyMode);
|
||||
|
||||
return proxyProvider->createTextureProxy(std::move(image), kNone_GrSurfaceFlags, 1,
|
||||
@ -160,8 +160,8 @@ sk_sp<GrTextureProxy> GrMakeCachedBitmapProxy(GrProxyProvider* proxyProvider,
|
||||
// In non-ddl we will always instantiate right away. Thus we never want to copy the SkBitmap
|
||||
// even if its mutable. In ddl, if the bitmap is mutable then we must make a copy since the
|
||||
// upload of the data to the gpu can happen at anytime and the bitmap may change by then.
|
||||
SkCopyPixelsMode cpyMode = proxyProvider->mutableBitmapsNeedCopy() ? kIfMutable_SkCopyPixelsMode
|
||||
: kNever_SkCopyPixelsMode;
|
||||
SkCopyPixelsMode cpyMode = proxyProvider->recordingDDL() ? kIfMutable_SkCopyPixelsMode
|
||||
: kNever_SkCopyPixelsMode;
|
||||
sk_sp<SkImage> image = SkMakeImageFromRasterBitmap(bitmap, cpyMode);
|
||||
|
||||
if (!image) {
|
||||
@ -205,7 +205,10 @@ sk_sp<GrTextureProxy> GrMakeCachedImageProxy(GrProxyProvider* proxyProvider,
|
||||
SkBudgeted::kYes, fit);
|
||||
if (proxy && originalKey.isValid()) {
|
||||
proxyProvider->assignUniqueKeyToProxy(originalKey, proxy.get());
|
||||
if (const SkBitmap* bm = as_IB(srcImage.get())->onPeekBitmap()) {
|
||||
const SkBitmap* bm = as_IB(srcImage.get())->onPeekBitmap();
|
||||
// When recording DDLs we do not want to install change listeners because doing
|
||||
// so isn't threadsafe.
|
||||
if (bm && !proxyProvider->recordingDDL()) {
|
||||
GrInstallBitmapUniqueKeyInvalidator(originalKey, bm->pixelRef());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user