Revert "Mark wrapped textures imported into SkImages as "read only"."
This reverts commit 796693af3cda0e24a76a89a092ed8de0e46ccb18.
Reason for revert: texture flags assertion in DDL config
Original change's description:
> Mark wrapped textures imported into SkImages as "read only".
>
> Read only textures and proxies fail writePixels, as copy dsts, and mip
> regeneration.
>
> Bug: skia:8509
>
> Change-Id: Iaa0b473cc9a9930fde3ef0e91373d5040650de35
> Reviewed-on: https://skia-review.googlesource.com/c/174316
> Commit-Queue: Brian Salomon <bsalomon@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
TBR=egdaniel@google.com,bsalomon@google.com,robertphillips@google.com
Change-Id: If5cb36e83795656185ff8d26e4ef2c52a2695a09
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:8509
Reviewed-on: https://skia-review.googlesource.com/c/174846
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/include/gpu/GrSurface.h b/include/gpu/GrSurface.h
index 3211a1e..bcd854f 100644
--- a/include/gpu/GrSurface.h
+++ b/include/gpu/GrSurface.h
@@ -65,12 +65,6 @@
static size_t ComputeSize(GrPixelConfig config, int width, int height, int colorSamplesPerPixel,
GrMipMapped, bool useNextPow2 = false);
- /**
- * The pixel values of this surface cannot be modified (e.g. doesn't support write pixels or
- * MIP map level regen).
- */
- bool readOnly() const { return fSurfaceFlags & GrInternalSurfaceFlags::kReadOnly; }
-
protected:
void setHasMixedSamples() {
SkASSERT(this->asRenderTarget());
@@ -94,11 +88,6 @@
return fSurfaceFlags & GrInternalSurfaceFlags::kGLRTFBOIDIs0;
}
- void setReadOnly() {
- SkASSERT(!this->asRenderTarget());
- fSurfaceFlags |= GrInternalSurfaceFlags::kReadOnly;
- }
-
// Methods made available via GrSurfacePriv
bool hasPendingRead() const;
bool hasPendingWrite() const;
diff --git a/include/private/GrSurfaceProxy.h b/include/private/GrSurfaceProxy.h
index df8505e..887400a 100644
--- a/include/private/GrSurfaceProxy.h
+++ b/include/private/GrSurfaceProxy.h
@@ -365,12 +365,6 @@
*/
SkBudgeted isBudgeted() const { return fBudgeted; }
- /**
- * The pixel values of this proxy's surface cannot be modified (e.g. doesn't support write
- * pixels or MIP map level regen),
- */
- bool readOnly() const { return fSurfaceFlags & GrInternalSurfaceFlags::kReadOnly; }
-
void setLastOpList(GrOpList* opList);
GrOpList* getLastOpList() { return fLastOpList; }
@@ -438,7 +432,7 @@
const GrBackendFormat& format, const GrSurfaceDesc&, GrSurfaceOrigin,
SkBackingFit, SkBudgeted, GrInternalSurfaceFlags);
- // Wrapped version.
+ // Wrapped version
GrSurfaceProxy(sk_sp<GrSurface>, GrSurfaceOrigin, SkBackingFit);
virtual ~GrSurfaceProxy();
diff --git a/include/private/GrTypesPriv.h b/include/private/GrTypesPriv.h
index c14e337..e9fd0a3 100644
--- a/include/private/GrTypesPriv.h
+++ b/include/private/GrTypesPriv.h
@@ -825,19 +825,11 @@
kNone = 0,
// Surface-level
-
kNoPendingIO = 1 << 0,
kSurfaceMask = kNoPendingIO,
- // Texture-level
-
- // Means the pixels in the texture are read-only. Cannot also be a GrRenderTarget[Proxy].
- kReadOnly = 1 << 1,
-
- kTextureMask = kReadOnly,
-
- // RT-level
+ // RT-only
// For internal resources:
// this is enabled whenever MSAA is enabled and GrCaps reports mixed samples are supported
diff --git a/src/gpu/GrAHardwareBufferImageGenerator.cpp b/src/gpu/GrAHardwareBufferImageGenerator.cpp
index 8b86721..b6cc28d 100644
--- a/src/gpu/GrAHardwareBufferImageGenerator.cpp
+++ b/src/gpu/GrAHardwareBufferImageGenerator.cpp
@@ -574,8 +574,8 @@
const bool isProtectedContent = fIsProtectedContent;
sk_sp<GrTextureProxy> texProxy = proxyProvider->createLazyProxy(
- [context, hardwareBuffer, width, height, pixelConfig, isProtectedContent,
- backendFormat](GrResourceProvider* resourceProvider) {
+ [context, hardwareBuffer, width, height, pixelConfig, isProtectedContent, backendFormat]
+ (GrResourceProvider* resourceProvider) {
if (!resourceProvider) {
AHardwareBuffer_release(hardwareBuffer);
return sk_sp<GrTexture>();
@@ -596,8 +596,7 @@
SkASSERT(deleteImageProc && deleteImageCtx);
backendTex.fConfig = pixelConfig;
- sk_sp<GrTexture> tex = resourceProvider->wrapBackendTexture(
- backendTex, kBorrow_GrWrapOwnership, kRead_GrIOType);
+ sk_sp<GrTexture> tex = resourceProvider->wrapBackendTexture(backendTex);
if (!tex) {
deleteImageProc(deleteImageCtx);
return sk_sp<GrTexture>();
@@ -611,8 +610,8 @@
return tex;
},
- backendFormat, desc, fSurfaceOrigin, GrMipMapped::kNo,
- GrInternalSurfaceFlags::kReadOnly, SkBackingFit::kExact, SkBudgeted::kNo);
+ backendFormat, desc, fSurfaceOrigin, GrMipMapped::kNo, SkBackingFit::kExact,
+ SkBudgeted::kNo);
if (!texProxy) {
AHardwareBuffer_release(hardwareBuffer);
diff --git a/src/gpu/GrBackendTextureImageGenerator.cpp b/src/gpu/GrBackendTextureImageGenerator.cpp
index 1785823..4f887f2 100644
--- a/src/gpu/GrBackendTextureImageGenerator.cpp
+++ b/src/gpu/GrBackendTextureImageGenerator.cpp
@@ -138,8 +138,8 @@
SkASSERT(format.isValid());
sk_sp<GrTextureProxy> proxy = proxyProvider->createLazyProxy(
- [refHelper, releaseProcHelper, semaphore,
- backendTexture](GrResourceProvider* resourceProvider) {
+ [refHelper, releaseProcHelper, semaphore, backendTexture]
+ (GrResourceProvider* resourceProvider) {
if (!resourceProvider) {
return sk_sp<GrTexture>();
}
@@ -163,8 +163,9 @@
// informs us that the context is done with it. This is unfortunate - we'll have
// two texture objects referencing the same GPU object. However, no client can
// ever see the original texture, so this should be safe.
- tex = resourceProvider->wrapBackendTexture(
- backendTexture, kBorrow_GrWrapOwnership, kRead_GrIOType, true);
+ tex = resourceProvider->wrapBackendTexture(backendTexture,
+ kBorrow_GrWrapOwnership,
+ true);
if (!tex) {
return sk_sp<GrTexture>();
}
@@ -175,8 +176,7 @@
return tex;
},
- format, desc, fSurfaceOrigin, mipMapped, GrInternalSurfaceFlags::kReadOnly,
- SkBackingFit::kExact, SkBudgeted::kNo);
+ format, desc, fSurfaceOrigin, mipMapped, SkBackingFit::kExact, SkBudgeted::kNo);
if (!proxy) {
return nullptr;
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp
index 562a7fc..64625d9 100644
--- a/src/gpu/GrCaps.cpp
+++ b/src/gpu/GrCaps.cpp
@@ -6,10 +6,9 @@
*/
#include "GrCaps.h"
+
#include "GrBackendSurface.h"
#include "GrContextOptions.h"
-#include "GrSurface.h"
-#include "GrSurfaceProxy.h"
#include "GrTypesPriv.h"
#include "GrWindowRectangles.h"
#include "SkJSONWriter.h"
@@ -243,15 +242,6 @@
void GrCaps::dumpJSON(SkJSONWriter* writer) const { }
#endif
-bool GrCaps::surfaceSupportsWritePixels(const GrSurface* surface) const {
- return surface->readOnly() ? false : this->onSurfaceSupportsWritePixels(surface);
-}
-
-bool GrCaps::canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const {
- return dst->readOnly() ? false : this->onCanCopySurface(dst, src, srcRect, dstPoint);
-}
-
bool GrCaps::validateSurfaceDesc(const GrSurfaceDesc& desc, GrMipMapped mipped) const {
if (!this->isConfigTexturable(desc.fConfig)) {
return false;
diff --git a/src/gpu/GrCaps.h b/src/gpu/GrCaps.h
index 7a9285d..c695ebe 100644
--- a/src/gpu/GrCaps.h
+++ b/src/gpu/GrCaps.h
@@ -192,7 +192,7 @@
* If this returns false then the caller should implement a fallback where a temporary texture
* is created, pixels are written to it, and then that is copied or drawn into the the surface.
*/
- bool surfaceSupportsWritePixels(const GrSurface*) const;
+ virtual bool surfaceSupportsWritePixels(const GrSurface*) const = 0;
/**
* Backends may have restrictions on what types of surfaces support GrGpu::readPixels().
@@ -246,8 +246,8 @@
/**
* Returns whether or not we will be able to do a copy given the passed in params
*/
- bool canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const;
+ virtual bool canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint) const = 0;
bool dynamicStateArrayGeometryProcessorTextureSupport() const {
return fDynamicStateArrayGeometryProcessorTextureSupport;
@@ -389,9 +389,6 @@
private:
virtual void onApplyOptionsOverrides(const GrContextOptions&) {}
virtual void onDumpJSON(SkJSONWriter*) const {}
- virtual bool onSurfaceSupportsWritePixels(const GrSurface*) const = 0;
- virtual bool onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const = 0;
// Backends should implement this if they have any extra requirements for use of window
// rectangles for a specific GrBackendRenderTarget outside of basic support.
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 1b2d13c..06eb6c4 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -928,8 +928,7 @@
sk_sp<SkColorSpace> colorSpace) {
ASSERT_SINGLE_OWNER_PRIV
- sk_sp<GrSurfaceProxy> proxy = this->proxyProvider()->wrapBackendTexture(
- tex, origin, kBorrow_GrWrapOwnership, kRW_GrIOType);
+ sk_sp<GrSurfaceProxy> proxy = this->proxyProvider()->wrapBackendTexture(tex, origin);
if (!proxy) {
return nullptr;
}
diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp
index 7b7ff2e..8e18fb8 100644
--- a/src/gpu/GrGpu.cpp
+++ b/src/gpu/GrGpu.cpp
@@ -145,9 +145,7 @@
sk_sp<GrTexture> GrGpu::wrapBackendTexture(const GrBackendTexture& backendTex,
GrWrapOwnership ownership,
- GrIOType ioType,
bool purgeImmediately) {
- SkASSERT(ioType != kWrite_GrIOType);
this->handleDirtyContext();
if (!this->caps()->isConfigTexturable(backendTex.config())) {
return nullptr;
@@ -156,7 +154,7 @@
backendTex.height() > this->caps()->maxTextureSize()) {
return nullptr;
}
- return this->onWrapBackendTexture(backendTex, ownership, ioType, purgeImmediately);
+ return this->onWrapBackendTexture(backendTex, ownership, purgeImmediately);
}
sk_sp<GrTexture> GrGpu::wrapRenderableBackendTexture(const GrBackendTexture& backendTex,
@@ -216,13 +214,7 @@
bool canDiscardOutsideDstRect) {
GR_CREATE_TRACE_MARKER_CONTEXT("GrGpu", "copySurface", fContext);
SkASSERT(dst && src);
-
- if (dst->readOnly()) {
- return false;
- }
-
this->handleDirtyContext();
-
return this->onCopySurface(dst, dstOrigin, src, srcOrigin, srcRect, dstPoint,
canDiscardOutsideDstRect);
}
@@ -247,11 +239,6 @@
bool GrGpu::writePixels(GrSurface* surface, int left, int top, int width, int height,
GrColorType srcColorType, const GrMipLevel texels[], int mipLevelCount) {
SkASSERT(surface);
-
- if (surface->readOnly()) {
- return false;
- }
-
if (1 == mipLevelCount) {
// We require that if we are not mipped, then the write region is contained in the surface
SkIRect subRect = SkIRect::MakeXYWH(left, top, width, height);
@@ -284,13 +271,8 @@
bool GrGpu::transferPixels(GrTexture* texture, int left, int top, int width, int height,
GrColorType bufferColorType, GrBuffer* transferBuffer, size_t offset,
size_t rowBytes) {
- SkASSERT(texture);
SkASSERT(transferBuffer);
- if (texture->readOnly()) {
- return false;
- }
-
// We require that the write region is contained in the texture
SkIRect subRect = SkIRect::MakeXYWH(left, top, width, height);
SkIRect bounds = SkIRect::MakeWH(texture->width(), texture->height());
@@ -316,9 +298,6 @@
SkASSERT(texture->texturePriv().mipMapped() == GrMipMapped::kYes);
SkASSERT(texture->texturePriv().mipMapsAreDirty());
SkASSERT(!texture->asRenderTarget() || !texture->asRenderTarget()->needsResolve());
- if (texture->readOnly()) {
- return false;
- }
if (this->onRegenerateMipMapLevels(texture)) {
texture->texturePriv().markMipMapsClean();
return true;
@@ -335,7 +314,6 @@
void GrGpu::didWriteToSurface(GrSurface* surface, GrSurfaceOrigin origin, const SkIRect* bounds,
uint32_t mipLevels) const {
SkASSERT(surface);
- SkASSERT(!surface->readOnly());
// Mark any MIP chain and resolve buffer as dirty if and only if there is a non-empty bounds.
if (nullptr == bounds || !bounds->isEmpty()) {
if (GrRenderTarget* target = surface->asRenderTarget()) {
diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
index 99985f1..cb8b2e9 100644
--- a/src/gpu/GrGpu.h
+++ b/src/gpu/GrGpu.h
@@ -104,7 +104,7 @@
/**
* Implements GrResourceProvider::wrapBackendTexture
*/
- sk_sp<GrTexture> wrapBackendTexture(const GrBackendTexture&, GrWrapOwnership, GrIOType,
+ sk_sp<GrTexture> wrapBackendTexture(const GrBackendTexture&, GrWrapOwnership,
bool purgeImmediately);
/**
@@ -445,7 +445,7 @@
const GrMipLevel texels[], int mipLevelCount) = 0;
virtual sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership,
- GrIOType, bool purgeImmediately) = 0;
+ bool purgeImmediately) = 0;
virtual sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
int sampleCnt,
GrWrapOwnership) = 0;
diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp
index dcf642b..3259f28 100644
--- a/src/gpu/GrProxyProvider.cpp
+++ b/src/gpu/GrProxyProvider.cpp
@@ -415,10 +415,8 @@
sk_sp<GrTextureProxy> GrProxyProvider::wrapBackendTexture(const GrBackendTexture& backendTex,
GrSurfaceOrigin origin,
GrWrapOwnership ownership,
- GrIOType ioType,
ReleaseProc releaseProc,
ReleaseContext releaseCtx) {
- SkASSERT(ioType != kWrite_GrIOType);
if (this->isAbandoned()) {
return nullptr;
}
@@ -428,7 +426,7 @@
return nullptr;
}
- sk_sp<GrTexture> tex = fResourceProvider->wrapBackendTexture(backendTex, ownership, ioType);
+ sk_sp<GrTexture> tex = fResourceProvider->wrapBackendTexture(backendTex, ownership);
if (!tex) {
return nullptr;
}
diff --git a/src/gpu/GrProxyProvider.h b/src/gpu/GrProxyProvider.h
index 1aec328..1e26f51 100644
--- a/src/gpu/GrProxyProvider.h
+++ b/src/gpu/GrProxyProvider.h
@@ -104,12 +104,11 @@
typedef void (*ReleaseProc)(ReleaseContext);
/*
- * Create a texture proxy that wraps a (non-renderable) backend texture. GrIOType must be
- * kRead or kRW.
+ * Create a texture proxy that wraps a (non-renderable) backend texture.
*/
sk_sp<GrTextureProxy> wrapBackendTexture(const GrBackendTexture&, GrSurfaceOrigin,
- GrWrapOwnership, GrIOType, ReleaseProc = nullptr,
- ReleaseContext = nullptr);
+ GrWrapOwnership = kBorrow_GrWrapOwnership,
+ ReleaseProc = nullptr, ReleaseContext = nullptr);
/*
* Create a texture proxy that wraps a backend texture and is both texture-able and renderable
@@ -120,7 +119,7 @@
GrWrapOwnership = kBorrow_GrWrapOwnership);
/*
- * Create a render target proxy that wraps a backend render target
+ * Create a render target proxy that wraps a backend rendertarget
*/
sk_sp<GrSurfaceProxy> wrapBackendRenderTarget(const GrBackendRenderTarget&, GrSurfaceOrigin);
diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp
index 1193246..78bd97b 100644
--- a/src/gpu/GrResourceProvider.cpp
+++ b/src/gpu/GrResourceProvider.cpp
@@ -226,13 +226,12 @@
sk_sp<GrTexture> GrResourceProvider::wrapBackendTexture(const GrBackendTexture& tex,
GrWrapOwnership ownership,
- GrIOType ioType,
bool purgeImmediately) {
ASSERT_SINGLE_OWNER
if (this->isAbandoned()) {
return nullptr;
}
- return fGpu->wrapBackendTexture(tex, ownership, ioType, purgeImmediately);
+ return fGpu->wrapBackendTexture(tex, ownership, purgeImmediately);
}
sk_sp<GrTexture> GrResourceProvider::wrapRenderableBackendTexture(const GrBackendTexture& tex,
diff --git a/src/gpu/GrResourceProvider.h b/src/gpu/GrResourceProvider.h
index c86136f..74e1dce 100644
--- a/src/gpu/GrResourceProvider.h
+++ b/src/gpu/GrResourceProvider.h
@@ -98,17 +98,13 @@
/**
* Wraps an existing texture with a GrTexture object.
*
- * GrIOType must either be kRead or kRW. kRead blocks any operations that would modify the
- * pixels (e.g. dst for a copy, regenerating MIP levels, write pixels).
- *
* OpenGL: if the object is a texture Gr may change its GL texture params
* when it is drawn.
*
* @return GrTexture object or NULL on failure.
*/
sk_sp<GrTexture> wrapBackendTexture(const GrBackendTexture& tex,
- GrWrapOwnership /* = kBorrow_GrWrapOwnership*/,
- GrIOType,
+ GrWrapOwnership = kBorrow_GrWrapOwnership,
bool purgeImmediately = false);
/**
diff --git a/src/gpu/GrTextureOpList.cpp b/src/gpu/GrTextureOpList.cpp
index ae51807..4b93803 100644
--- a/src/gpu/GrTextureOpList.cpp
+++ b/src/gpu/GrTextureOpList.cpp
@@ -25,7 +25,6 @@
GrAuditTrail* auditTrail)
: INHERITED(resourceProvider, std::move(opMemoryPool), proxy, auditTrail) {
SkASSERT(fOpMemoryPool);
- SkASSERT(!proxy->readOnly());
}
void GrTextureOpList::deleteOp(int index) {
diff --git a/src/gpu/GrTextureProxy.cpp b/src/gpu/GrTextureProxy.cpp
index b732818..854ed17 100644
--- a/src/gpu/GrTextureProxy.cpp
+++ b/src/gpu/GrTextureProxy.cpp
@@ -173,14 +173,7 @@
SkASSERT(surface->asTexture());
SkASSERT(GrMipMapped::kNo == this->proxyMipMapped() ||
GrMipMapped::kYes == surface->asTexture()->texturePriv().mipMapped());
-
SkASSERT(surface->asTexture()->texturePriv().textureType() == this->textureType());
-
- GrInternalSurfaceFlags proxyFlags = fSurfaceFlags;
- GrInternalSurfaceFlags surfaceFlags = surface->surfacePriv().flags();
- SkASSERT((proxyFlags & GrInternalSurfaceFlags::kTextureMask) ==
- (surfaceFlags & GrInternalSurfaceFlags::kTextureMask));
}
-
#endif
diff --git a/src/gpu/GrTextureRenderTargetProxy.cpp b/src/gpu/GrTextureRenderTargetProxy.cpp
index 3e52b2c..a665270 100644
--- a/src/gpu/GrTextureRenderTargetProxy.cpp
+++ b/src/gpu/GrTextureRenderTargetProxy.cpp
@@ -124,19 +124,11 @@
SkASSERT(surface->asRenderTarget());
SkASSERT(surface->asRenderTarget()->numStencilSamples() == this->numStencilSamples());
- SkASSERT(surface->asTexture()->texturePriv().textureType() == this->textureType());
-
GrInternalSurfaceFlags proxyFlags = fSurfaceFlags;
GrInternalSurfaceFlags surfaceFlags = surface->surfacePriv().flags();
-
- // Only non-RT textures can be read only.
- SkASSERT(!(proxyFlags & GrInternalSurfaceFlags::kReadOnly));
- SkASSERT(!(surfaceFlags & GrInternalSurfaceFlags::kReadOnly));
-
SkASSERT((proxyFlags & GrInternalSurfaceFlags::kRenderTargetMask) ==
(surfaceFlags & GrInternalSurfaceFlags::kRenderTargetMask));
- SkASSERT((proxyFlags & GrInternalSurfaceFlags::kTextureMask) ==
- (surfaceFlags & GrInternalSurfaceFlags::kTextureMask));
+ SkASSERT(surface->asTexture()->texturePriv().textureType() == this->textureType());
}
#endif
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index f90a1b0..9f26a7c 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -2172,8 +2172,8 @@
!rt->rtPriv().glRTFBOIDIs0();
}
-bool GrGLCaps::onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const {
+bool GrGLCaps::canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint) const {
GrSurfaceOrigin dstOrigin = dst->origin();
GrSurfaceOrigin srcOrigin = src->origin();
@@ -2756,7 +2756,7 @@
}
}
-bool GrGLCaps::onSurfaceSupportsWritePixels(const GrSurface* surface) const {
+bool GrGLCaps::surfaceSupportsWritePixels(const GrSurface* surface) const {
if (fDisallowTexSubImageForUnormConfigTexturesEverBoundToFBO) {
if (auto tex = static_cast<const GrGLTexture*>(surface->asTexture())) {
if (tex->hasBaseLevelBeenBoundToFBO()) {
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index 54dc126..4cdd316 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -311,6 +311,7 @@
/// Use indices or vertices in CPU arrays rather than VBOs for dynamic content.
bool useNonVBOVertexAndIndexDynamicData() const { return fUseNonVBOVertexAndIndexDynamicData; }
+ bool surfaceSupportsWritePixels(const GrSurface*) const override;
bool surfaceSupportsReadPixels(const GrSurface*) const override;
GrColorType supportedReadPixelsColorType(GrPixelConfig, GrColorType) const override;
@@ -418,6 +419,9 @@
const SkIRect& srcRect, const SkIPoint& dstPoint) const;
bool canCopyAsDraw(GrPixelConfig dstConfig, bool srcIsTextureable) const;
+ bool canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint) const override;
+
bool initDescForDstCopy(const GrRenderTargetProxy* src, GrSurfaceDesc* desc, GrSurfaceOrigin*,
bool* rectsMustMatch, bool* disallowSubrect) const override;
@@ -476,9 +480,6 @@
// This must be called after initFSAASupport().
void initConfigTable(const GrContextOptions&, const GrGLContextInfo&, const GrGLInterface*,
GrShaderCaps*);
- bool onSurfaceSupportsWritePixels(const GrSurface*) const override;
- bool onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const override;
GrGLStandard fStandard;
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index d344c3b..63bf032 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -652,8 +652,7 @@
}
sk_sp<GrTexture> GrGLGpu::onWrapBackendTexture(const GrBackendTexture& backendTex,
- GrWrapOwnership ownership, GrIOType ioType,
- bool purgeImmediately) {
+ GrWrapOwnership ownership, bool purgeImmediately) {
GrGLTexture::IDDesc idDesc;
if (!check_backend_texture(backendTex, this->glCaps(), &idDesc)) {
return nullptr;
@@ -677,7 +676,7 @@
GrMipMapsStatus mipMapsStatus = backendTex.hasMipMaps() ? GrMipMapsStatus::kValid
: GrMipMapsStatus::kNotAllocated;
- auto texture = GrGLTexture::MakeWrapped(this, surfDesc, mipMapsStatus, idDesc, ioType,
+ auto texture = GrGLTexture::MakeWrapped(this, surfDesc, mipMapsStatus, idDesc,
purgeImmediately);
// We don't know what parameters are already set on wrapped textures.
texture->textureParamsModified();
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index f74b98e..eb920db 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -189,7 +189,7 @@
GrBuffer* onCreateBuffer(size_t size, GrBufferType intendedType, GrAccessPattern,
const void* data) override;
- sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership, GrIOType,
+ sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership,
bool purgeImmediately) override;
sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
int sampleCnt,
diff --git a/src/gpu/gl/GrGLTexture.cpp b/src/gpu/gl/GrGLTexture.cpp
index 06bf662..2d432fe 100644
--- a/src/gpu/gl/GrGLTexture.cpp
+++ b/src/gpu/gl/GrGLTexture.cpp
@@ -51,15 +51,12 @@
}
GrGLTexture::GrGLTexture(GrGLGpu* gpu, Wrapped, const GrSurfaceDesc& desc,
- GrMipMapsStatus mipMapsStatus, const IDDesc& idDesc, GrIOType ioType,
+ GrMipMapsStatus mipMapsStatus, const IDDesc& idDesc,
bool purgeImmediately)
: GrSurface(gpu, desc)
, INHERITED(gpu, desc, TextureTypeFromTarget(idDesc.fInfo.fTarget), mipMapsStatus) {
this->init(desc, idDesc);
this->registerWithCacheWrapped(purgeImmediately);
- if (ioType == kRead_GrIOType) {
- this->setReadOnly();
- }
}
GrGLTexture::GrGLTexture(GrGLGpu* gpu, const GrSurfaceDesc& desc, const IDDesc& idDesc,
@@ -114,9 +111,9 @@
sk_sp<GrGLTexture> GrGLTexture::MakeWrapped(GrGLGpu* gpu, const GrSurfaceDesc& desc,
GrMipMapsStatus mipMapsStatus, const IDDesc& idDesc,
- GrIOType ioType, bool purgeImmediately) {
- return sk_sp<GrGLTexture>(
- new GrGLTexture(gpu, kWrapped, desc, mipMapsStatus, idDesc, ioType, purgeImmediately));
+ bool purgeImmediately) {
+ return sk_sp<GrGLTexture>(new GrGLTexture(gpu, kWrapped, desc, mipMapsStatus, idDesc,
+ purgeImmediately));
}
bool GrGLTexture::onStealBackendTexture(GrBackendTexture* backendTexture,
diff --git a/src/gpu/gl/GrGLTexture.h b/src/gpu/gl/GrGLTexture.h
index 290729b..a9d7a38 100644
--- a/src/gpu/gl/GrGLTexture.h
+++ b/src/gpu/gl/GrGLTexture.h
@@ -100,7 +100,7 @@
void baseLevelWasBoundToFBO() { fBaseLevelHasBeenBoundToFBO = true; }
static sk_sp<GrGLTexture> MakeWrapped(GrGLGpu*, const GrSurfaceDesc&, GrMipMapsStatus,
- const IDDesc&, GrIOType, bool purgeImmediately);
+ const IDDesc&, bool purgeImmediately);
void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const override;
@@ -110,7 +110,7 @@
enum Wrapped { kWrapped };
// Constructor for instances wrapping backend objects.
- GrGLTexture(GrGLGpu*, Wrapped, const GrSurfaceDesc&, GrMipMapsStatus, const IDDesc&, GrIOType,
+ GrGLTexture(GrGLGpu*, Wrapped, const GrSurfaceDesc&, GrMipMapsStatus, const IDDesc&,
bool purgeImmediately);
void init(const GrSurfaceDesc&, const IDDesc&);
diff --git a/src/gpu/mock/GrMockCaps.h b/src/gpu/mock/GrMockCaps.h
index e940423..d24afa5 100644
--- a/src/gpu/mock/GrMockCaps.h
+++ b/src/gpu/mock/GrMockCaps.h
@@ -66,8 +66,14 @@
return 0;
}
+ bool surfaceSupportsWritePixels(const GrSurface*) const override { return true; }
bool surfaceSupportsReadPixels(const GrSurface*) const override { return true; }
+ bool canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint) const override {
+ return true;
+ }
+
bool initDescForDstCopy(const GrRenderTargetProxy* src, GrSurfaceDesc* desc, GrSurfaceOrigin*,
bool* rectsMustMatch, bool* disallowSubrect) const override {
return false;
@@ -136,11 +142,6 @@
SkAssertResult(backendTex.getMockTextureInfo(&mockInfo));
return GrBackendFormat::MakeMock(mockInfo.fConfig);
}
- bool onSurfaceSupportsWritePixels(const GrSurface*) const override { return true; }
- bool onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const override {
- return true;
- }
static const int kMaxSampleCnt = 16;
diff --git a/src/gpu/mock/GrMockGpu.cpp b/src/gpu/mock/GrMockGpu.cpp
index 4f2c4cd..2de25ef 100644
--- a/src/gpu/mock/GrMockGpu.cpp
+++ b/src/gpu/mock/GrMockGpu.cpp
@@ -103,8 +103,7 @@
}
sk_sp<GrTexture> GrMockGpu::onWrapBackendTexture(const GrBackendTexture& tex,
- GrWrapOwnership ownership, GrIOType ioType,
- bool purgeImmediately) {
+ GrWrapOwnership ownership, bool purgeImmediately) {
GrSurfaceDesc desc;
desc.fWidth = tex.width();
desc.fHeight = tex.height();
@@ -117,7 +116,7 @@
: GrMipMapsStatus::kNotAllocated;
return sk_sp<GrTexture>(new GrMockTexture(this, GrMockTexture::kWrapped, desc, mipMapsStatus,
- info, ioType, purgeImmediately));
+ info, purgeImmediately));
}
sk_sp<GrTexture> GrMockGpu::onWrapRenderableBackendTexture(const GrBackendTexture& tex,
diff --git a/src/gpu/mock/GrMockGpu.h b/src/gpu/mock/GrMockGpu.h
index 832877a..a39a82b 100644
--- a/src/gpu/mock/GrMockGpu.h
+++ b/src/gpu/mock/GrMockGpu.h
@@ -59,7 +59,7 @@
sk_sp<GrTexture> onCreateTexture(const GrSurfaceDesc&, SkBudgeted, const GrMipLevel[],
int mipLevelCount) override;
- sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership, GrIOType,
+ sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership,
bool purgeImmediately) override;
sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
diff --git a/src/gpu/mock/GrMockTexture.h b/src/gpu/mock/GrMockTexture.h
index ee8780d..0565f81 100644
--- a/src/gpu/mock/GrMockTexture.h
+++ b/src/gpu/mock/GrMockTexture.h
@@ -23,12 +23,10 @@
}
enum Wrapped { kWrapped };
- GrMockTexture(GrMockGpu* gpu, Wrapped, const GrSurfaceDesc& desc, GrMipMapsStatus mipMapsStatus,
- const GrMockTextureInfo& info, GrIOType ioType, bool purgeImmediately)
+ GrMockTexture(GrMockGpu* gpu, Wrapped, const GrSurfaceDesc& desc,
+ GrMipMapsStatus mipMapsStatus, const GrMockTextureInfo& info,
+ bool purgeImmediately)
: GrMockTexture(gpu, desc, mipMapsStatus, info) {
- if (ioType == kRead_GrIOType) {
- this->setReadOnly();
- }
this->registerWithCacheWrapped(purgeImmediately);
}
diff --git a/src/gpu/mtl/GrMtlCaps.h b/src/gpu/mtl/GrMtlCaps.h
index 9d7b86f..7edfa79 100644
--- a/src/gpu/mtl/GrMtlCaps.h
+++ b/src/gpu/mtl/GrMtlCaps.h
@@ -33,6 +33,7 @@
int getRenderTargetSampleCount(int requestedCount, GrPixelConfig) const override;
int maxRenderTargetSampleCount(GrPixelConfig) const override;
+ bool surfaceSupportsWritePixels(const GrSurface*) const override { return true; }
bool surfaceSupportsReadPixels(const GrSurface*) const override { return true; }
bool isConfigCopyable(GrPixelConfig config) const override {
@@ -57,6 +58,9 @@
bool canCopyAsDrawThenBlit(GrPixelConfig dstConfig, GrPixelConfig srcConfig,
bool srcIsTextureable) const;
+ bool canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint) const override;
+
bool initDescForDstCopy(const GrRenderTargetProxy* src, GrSurfaceDesc* desc, GrSurfaceOrigin*,
bool* rectsMustMatch, bool* disallowSubrect) const override {
return false;
@@ -105,10 +109,6 @@
void initConfigTable();
- bool onSurfaceSupportsWritePixels(const GrSurface*) const override { return true; }
- bool onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const override;
-
struct ConfigInfo {
ConfigInfo() : fFlags(0) {}
diff --git a/src/gpu/mtl/GrMtlCaps.mm b/src/gpu/mtl/GrMtlCaps.mm
index 880b0fa..ca3779b 100644
--- a/src/gpu/mtl/GrMtlCaps.mm
+++ b/src/gpu/mtl/GrMtlCaps.mm
@@ -166,8 +166,8 @@
return true;
}
-bool GrMtlCaps::onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const {
+bool GrMtlCaps::canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint) const {
GrSurfaceOrigin dstOrigin = dst->origin();
GrSurfaceOrigin srcOrigin = src->origin();
diff --git a/src/gpu/mtl/GrMtlGpu.h b/src/gpu/mtl/GrMtlGpu.h
index 607f704..a727784 100644
--- a/src/gpu/mtl/GrMtlGpu.h
+++ b/src/gpu/mtl/GrMtlGpu.h
@@ -132,7 +132,7 @@
sk_sp<GrTexture> onCreateTexture(const GrSurfaceDesc& desc, SkBudgeted budgeted,
const GrMipLevel texels[], int mipLevelCount) override;
- sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership, GrIOType,
+ sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership,
bool purgeImmediately) override;
sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
diff --git a/src/gpu/mtl/GrMtlGpu.mm b/src/gpu/mtl/GrMtlGpu.mm
index 132f455..0661648 100644
--- a/src/gpu/mtl/GrMtlGpu.mm
+++ b/src/gpu/mtl/GrMtlGpu.mm
@@ -338,8 +338,7 @@
}
sk_sp<GrTexture> GrMtlGpu::onWrapBackendTexture(const GrBackendTexture& backendTex,
- GrWrapOwnership ownership, GrIOType ioType,
- bool purgeImmediately) {
+ GrWrapOwnership ownership, bool purgeImmediately) {
id<MTLTexture> mtlTexture = get_texture_from_backend(backendTex, ownership);
if (!mtlTexture) {
return nullptr;
@@ -348,7 +347,7 @@
GrSurfaceDesc surfDesc;
init_surface_desc(&surfDesc, mtlTexture, false, backendTex.config());
- return GrMtlTexture::MakeWrappedTexture(this, surfDesc, mtlTexture, ioType, purgeImmediately);
+ return GrMtlTexture::MakeWrappedTexture(this, surfDesc, mtlTexture, purgeImmediately);
}
sk_sp<GrTexture> GrMtlGpu::onWrapRenderableBackendTexture(const GrBackendTexture& backendTex,
diff --git a/src/gpu/mtl/GrMtlTexture.h b/src/gpu/mtl/GrMtlTexture.h
index 7564f94..5f6234e 100644
--- a/src/gpu/mtl/GrMtlTexture.h
+++ b/src/gpu/mtl/GrMtlTexture.h
@@ -21,8 +21,8 @@
MTLTextureDescriptor*,
GrMipMapsStatus);
- static sk_sp<GrMtlTexture> MakeWrappedTexture(GrMtlGpu*, const GrSurfaceDesc&, id<MTLTexture>,
- GrIOType, bool purgeImmediately);
+ static sk_sp<GrMtlTexture> MakeWrappedTexture(GrMtlGpu*, const GrSurfaceDesc&,
+ id<MTLTexture>, bool purgeImmediately);
~GrMtlTexture() override;
@@ -65,7 +65,7 @@
GrMipMapsStatus);
GrMtlTexture(GrMtlGpu*, Wrapped, const GrSurfaceDesc&, id<MTLTexture>, GrMipMapsStatus,
- GrIOType, bool purgeImmediately);
+ bool purgeImmediately);
id<MTLTexture> fTexture;
diff --git a/src/gpu/mtl/GrMtlTexture.mm b/src/gpu/mtl/GrMtlTexture.mm
index 5e91746..711d5ae 100644
--- a/src/gpu/mtl/GrMtlTexture.mm
+++ b/src/gpu/mtl/GrMtlTexture.mm
@@ -28,15 +28,11 @@
const GrSurfaceDesc& desc,
id<MTLTexture> texture,
GrMipMapsStatus mipMapsStatus,
- GrIOType ioType,
bool purgeImmediately)
: GrSurface(gpu, desc)
, INHERITED(gpu, desc, GrTextureType::k2D, mipMapsStatus)
, fTexture(texture) {
SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == texture.mipmapLevelCount));
- if (ioType == kRead_GrIOType) {
- this->setReadOnly();
- }
this->registerWithCacheWrapped(purgeImmediately);
}
@@ -67,7 +63,6 @@
sk_sp<GrMtlTexture> GrMtlTexture::MakeWrappedTexture(GrMtlGpu* gpu,
const GrSurfaceDesc& desc,
id<MTLTexture> texture,
- GrIOType ioType,
bool purgeImmediately) {
if (desc.fSampleCnt > 1) {
SkASSERT(false); // Currently we don't support msaa
@@ -77,7 +72,7 @@
SkASSERT(MTLTextureUsageShaderRead & texture.usage);
GrMipMapsStatus mipMapsStatus = texture.mipmapLevelCount > 1 ? GrMipMapsStatus::kValid
: GrMipMapsStatus::kNotAllocated;
- return sk_sp<GrMtlTexture>(new GrMtlTexture(gpu, kWrapped, desc, texture, mipMapsStatus, ioType,
+ return sk_sp<GrMtlTexture>(new GrMtlTexture(gpu, kWrapped, desc, texture, mipMapsStatus,
purgeImmediately));
}
diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp
index 75911b6..fbd381f 100644
--- a/src/gpu/vk/GrVkCaps.cpp
+++ b/src/gpu/vk/GrVkCaps.cpp
@@ -158,8 +158,8 @@
return true;
}
-bool GrVkCaps::onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const {
+bool GrVkCaps::canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint) const {
GrSurfaceOrigin dstOrigin = dst->origin();
GrSurfaceOrigin srcOrigin = src->origin();
@@ -698,7 +698,7 @@
return table[table.count() - 1];
}
-bool GrVkCaps::onSurfaceSupportsWritePixels(const GrSurface* surface) const {
+bool GrVkCaps::surfaceSupportsWritePixels(const GrSurface* surface) const {
if (auto rt = surface->asRenderTarget()) {
return rt->numColorSamples() <= 1 && SkToBool(surface->asTexture());
}
diff --git a/src/gpu/vk/GrVkCaps.h b/src/gpu/vk/GrVkCaps.h
index 9514d41..a20a104 100644
--- a/src/gpu/vk/GrVkCaps.h
+++ b/src/gpu/vk/GrVkCaps.h
@@ -43,6 +43,7 @@
int getRenderTargetSampleCount(int requestedCount, GrPixelConfig config) const override;
int maxRenderTargetSampleCount(GrPixelConfig config) const override;
+ bool surfaceSupportsWritePixels(const GrSurface*) const override;
bool surfaceSupportsReadPixels(const GrSurface*) const override { return true; }
bool isConfigTexturableLinearly(GrPixelConfig config) const {
@@ -150,6 +151,9 @@
bool canCopyAsDraw(GrPixelConfig dstConfig, bool dstIsRenderable,
GrPixelConfig srcConfig, bool srcIsTextureable) const;
+ bool canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint) const override;
+
bool initDescForDstCopy(const GrRenderTargetProxy* src, GrSurfaceDesc* desc, GrSurfaceOrigin*,
bool* rectsMustMatch, bool* disallowSubrect) const override;
@@ -197,10 +201,6 @@
void applyDriverCorrectnessWorkarounds(const VkPhysicalDeviceProperties&);
- bool onSurfaceSupportsWritePixels(const GrSurface*) const override;
- bool onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,
- const SkIRect& srcRect, const SkIPoint& dstPoint) const override;
-
struct ConfigInfo {
ConfigInfo() : fOptimalFlags(0), fLinearFlags(0) {}
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index 1c02e33..ca48271 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -888,8 +888,7 @@
}
sk_sp<GrTexture> GrVkGpu::onWrapBackendTexture(const GrBackendTexture& backendTex,
- GrWrapOwnership ownership, GrIOType ioType,
- bool purgeImmediately) {
+ GrWrapOwnership ownership, bool purgeImmediately) {
GrVkImageInfo imageInfo;
if (!backendTex.getVkImageInfo(&imageInfo)) {
return nullptr;
@@ -908,7 +907,7 @@
sk_sp<GrVkImageLayout> layout = backendTex.getGrVkImageLayout();
SkASSERT(layout);
- return GrVkTexture::MakeWrappedTexture(this, surfDesc, ownership, ioType, purgeImmediately,
+ return GrVkTexture::MakeWrappedTexture(this, surfDesc, ownership, purgeImmediately,
imageInfo, std::move(layout));
}
diff --git a/src/gpu/vk/GrVkGpu.h b/src/gpu/vk/GrVkGpu.h
index 32a7c89..c195d3b 100644
--- a/src/gpu/vk/GrVkGpu.h
+++ b/src/gpu/vk/GrVkGpu.h
@@ -170,7 +170,7 @@
sk_sp<GrTexture> onCreateTexture(const GrSurfaceDesc&, SkBudgeted, const GrMipLevel[],
int mipLevelCount) override;
- sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership, GrIOType,
+ sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership,
bool purgeImmediately) override;
sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
int sampleCnt,
diff --git a/src/gpu/vk/GrVkTexture.cpp b/src/gpu/vk/GrVkTexture.cpp
index a295c04..8157433 100644
--- a/src/gpu/vk/GrVkTexture.cpp
+++ b/src/gpu/vk/GrVkTexture.cpp
@@ -41,16 +41,12 @@
const GrVkImageView* view,
GrMipMapsStatus mipMapsStatus,
GrBackendObjectOwnership ownership,
- GrIOType ioType,
bool purgeImmediately)
: GrSurface(gpu, desc)
, GrVkImage(info, std::move(layout), ownership)
, INHERITED(gpu, desc, GrTextureType::k2D, mipMapsStatus)
, fTextureView(view) {
SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == info.fLevelCount));
- if (ioType == kRead_GrIOType) {
- this->setReadOnly();
- }
this->registerWithCacheWrapped(purgeImmediately);
}
@@ -96,7 +92,6 @@
sk_sp<GrVkTexture> GrVkTexture::MakeWrappedTexture(GrVkGpu* gpu,
const GrSurfaceDesc& desc,
GrWrapOwnership wrapOwnership,
- GrIOType ioType,
bool purgeImmediately,
const GrVkImageInfo& info,
sk_sp<GrVkImageLayout> layout) {
@@ -116,7 +111,7 @@
GrBackendObjectOwnership ownership = kBorrow_GrWrapOwnership == wrapOwnership
? GrBackendObjectOwnership::kBorrowed : GrBackendObjectOwnership::kOwned;
return sk_sp<GrVkTexture>(new GrVkTexture(gpu, kWrapped, desc, info, std::move(layout),
- imageView, mipMapsStatus, ownership, ioType,
+ imageView, mipMapsStatus, ownership,
purgeImmediately));
}
diff --git a/src/gpu/vk/GrVkTexture.h b/src/gpu/vk/GrVkTexture.h
index b85dee0..d841bf3 100644
--- a/src/gpu/vk/GrVkTexture.h
+++ b/src/gpu/vk/GrVkTexture.h
@@ -25,8 +25,8 @@
const GrVkImage::ImageDesc&,
GrMipMapsStatus);
- static sk_sp<GrVkTexture> MakeWrappedTexture(GrVkGpu*, const GrSurfaceDesc&, GrWrapOwnership,
- GrIOType, bool purgeImmediately,
+ static sk_sp<GrVkTexture> MakeWrappedTexture(GrVkGpu*, const GrSurfaceDesc&,
+ GrWrapOwnership, bool purgeImmediatley,
const GrVkImageInfo&, sk_sp<GrVkImageLayout>);
~GrVkTexture() override;
@@ -66,7 +66,7 @@
GrMipMapsStatus);
GrVkTexture(GrVkGpu*, Wrapped, const GrSurfaceDesc&, const GrVkImageInfo&,
sk_sp<GrVkImageLayout> layout, const GrVkImageView* imageView, GrMipMapsStatus,
- GrBackendObjectOwnership, GrIOType ioType, bool purgeImmediately);
+ GrBackendObjectOwnership, bool purgeImmediately);
const GrVkImageView* fTextureView;
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index 2404f36..600ba39 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -74,8 +74,8 @@
}
GrProxyProvider* proxyProvider = ctx->contextPriv().proxyProvider();
- sk_sp<GrTextureProxy> proxy = proxyProvider->wrapBackendTexture(
- backendTex, origin, ownership, kRead_GrIOType, releaseProc, releaseCtx);
+ sk_sp<GrTextureProxy> proxy = proxyProvider->wrapBackendTexture(backendTex, origin, ownership,
+ releaseProc, releaseCtx);
if (!proxy) {
return nullptr;
}
@@ -373,7 +373,6 @@
desc.fHeight = height;
desc.fConfig = config;
- // We pass kReadOnly here since we should treat content of the client's texture as immutable.
sk_sp<GrTextureProxy> proxy = proxyProvider->createLazyProxy(
[promiseHelper, config](GrResourceProvider* resourceProvider) mutable {
if (!resourceProvider) {
@@ -383,7 +382,7 @@
return promiseHelper.getTexture(resourceProvider, config);
},
- backendFormat, desc, origin, mipMapped, GrInternalSurfaceFlags::kReadOnly,
+ backendFormat, desc, origin, mipMapped, GrInternalSurfaceFlags::kNone,
SkBackingFit::kExact, SkBudgeted::kNo,
GrSurfaceProxy::LazyInstantiationType::kUninstantiate);
@@ -535,7 +534,7 @@
},
yuvaFormats[yuvaIndices[SkYUVAIndex::kY_Index].fIndex],
desc, imageOrigin, GrMipMapped::kNo,
- GrInternalSurfaceFlags::kReadOnly, SkBackingFit::kExact, SkBudgeted::kNo,
+ GrInternalSurfaceFlags::kNone, SkBackingFit::kExact, SkBudgeted::kNo,
GrSurfaceProxy::LazyInstantiationType::kUninstantiate);
if (!proxy) {
diff --git a/src/image/SkImage_GpuBase.cpp b/src/image/SkImage_GpuBase.cpp
index b12fee1..4dfc483 100644
--- a/src/image/SkImage_GpuBase.cpp
+++ b/src/image/SkImage_GpuBase.cpp
@@ -320,8 +320,7 @@
SkASSERT(yuvaTexturesCopy[textureIndex].isValid());
tempTextureProxies[textureIndex] =
- proxyProvider->wrapBackendTexture(yuvaTexturesCopy[textureIndex], imageOrigin,
- kBorrow_GrWrapOwnership, kRead_GrIOType);
+ proxyProvider->wrapBackendTexture(yuvaTexturesCopy[textureIndex], imageOrigin);
if (!tempTextureProxies[textureIndex]) {
return false;
}
@@ -401,8 +400,7 @@
return sk_sp<GrTexture>();
}
- tex = resourceProvider->wrapBackendTexture(fBackendTex, kBorrow_GrWrapOwnership,
- kRead_GrIOType);
+ tex = resourceProvider->wrapBackendTexture(fBackendTex, kBorrow_GrWrapOwnership);
if (!tex) {
// Even though the GrBackendTexture is not valid, we must call the release
// proc to keep our contract of always calling Fulfill and Release in pairs.
@@ -414,8 +412,7 @@
fReleaseHelper->weak_ref();
} else {
SkASSERT(fBackendTex.isValid());
- tex = resourceProvider->wrapBackendTexture(fBackendTex, kBorrow_GrWrapOwnership,
- kRead_GrIOType);
+ tex = resourceProvider->wrapBackendTexture(fBackendTex, kBorrow_GrWrapOwnership);
if (!tex) {
// We weren't able to make a texture here, but since we are in this branch
// of the calls (promiseHelper.fReleaseHelper is valid) there is already a
diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp
index f94e274..2bbfa4c 100644
--- a/tests/GrPorterDuffTest.cpp
+++ b/tests/GrPorterDuffTest.cpp
@@ -1068,8 +1068,8 @@
GrXferProcessor::DstProxy fakeDstProxy;
{
- sk_sp<GrTextureProxy> proxy = proxyProvider->wrapBackendTexture(
- backendTex, kTopLeft_GrSurfaceOrigin, kBorrow_GrWrapOwnership, kRead_GrIOType);
+ sk_sp<GrTextureProxy> proxy =
+ proxyProvider->wrapBackendTexture(backendTex, kTopLeft_GrSurfaceOrigin);
fakeDstProxy.setProxy(std::move(proxy));
}
diff --git a/tests/GrSurfaceTest.cpp b/tests/GrSurfaceTest.cpp
index 693fc54..d3cc2f4 100644
--- a/tests/GrSurfaceTest.cpp
+++ b/tests/GrSurfaceTest.cpp
@@ -5,6 +5,8 @@
* found in the LICENSE file.
*/
+#include "SkTypes.h"
+
#include "GrContext.h"
#include "GrContextPriv.h"
#include "GrGpu.h"
@@ -12,10 +14,7 @@
#include "GrRenderTarget.h"
#include "GrResourceProvider.h"
#include "GrTexture.h"
-#include "GrTexturePriv.h"
-#include "SkAutoPixmapStorage.h"
#include "SkMipMap.h"
-#include "SkTypes.h"
#include "Test.h"
// Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static upcasting of texture
@@ -237,94 +236,3 @@
}
}
}
-
-DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadOnlyTexture, reporter, context_info) {
- auto fillPixels = [](const SkPixmap* p, const std::function<uint32_t(int x, int y)>& f) {
- for (int y = 0; y < p->height(); ++y) {
- for (int x = 0; x < p->width(); ++x) {
- *p->writable_addr32(x, y) = f(x, y);
- }
- }
- };
-
- auto comparePixels = [](const SkPixmap& p1, const SkPixmap& p2, skiatest::Reporter* reporter) {
- SkASSERT(p1.info() == p2.info());
- for (int y = 0; y < p1.height(); ++y) {
- for (int x = 0; x < p1.width(); ++x) {
- REPORTER_ASSERT(reporter, p1.getColor(x, y) == p2.getColor(x, y));
- if (p1.getColor(x, y) != p2.getColor(x, y)) {
- return;
- }
- }
- }
- };
-
- static constexpr int kSize = 100;
- SkAutoPixmapStorage pixels;
- pixels.alloc(SkImageInfo::Make(kSize, kSize, kRGBA_8888_SkColorType, kPremul_SkAlphaType));
- fillPixels(&pixels,
- [](int x, int y) { return (0xFFU << 24) | (x << 16) | (y << 8) | uint8_t(x * y); });
-
- GrContext* context = context_info.grContext();
- GrProxyProvider* proxyProvider = context->contextPriv().proxyProvider();
-
- // We test both kRW in addition to kRead mostly to ensure that the calls are structured such
- // that they'd succeed if the texture wasn't kRead. We want to be sure we're failing with
- // kRead for the right reason.
- for (auto ioType : {kRead_GrIOType, kRW_GrIOType}) {
- auto backendTex = context->contextPriv().getGpu()->createTestingOnlyBackendTexture(
- pixels.addr(), kSize, kSize, kRGBA_8888_SkColorType, true, GrMipMapped::kNo);
- auto proxy = proxyProvider->wrapBackendTexture(backendTex, kTopLeft_GrSurfaceOrigin,
- kBorrow_GrWrapOwnership, ioType);
- auto surfContext = context->contextPriv().makeWrappedSurfaceContext(proxy);
-
- // Read pixels should work with a read-only texture.
- SkAutoPixmapStorage read;
- read.alloc(pixels.info());
- auto readResult = surfContext->readPixels(pixels.info(), read.writable_addr(), 0, 0, 0);
- REPORTER_ASSERT(reporter, readResult);
- if (readResult) {
- comparePixels(pixels, read, reporter);
- }
-
- // Write pixels should not work with a read-only texture.
- SkAutoPixmapStorage write;
- write.alloc(pixels.info());
- fillPixels(&write, [&pixels](int x, int y) { return ~*pixels.addr32(); });
- auto writeResult = surfContext->writePixels(pixels.info(), pixels.addr(), 0, 0, 0);
- REPORTER_ASSERT(reporter, writeResult == (ioType == kRW_GrIOType));
- // Try the low level write.
- context->flush();
- auto gpuWriteResult = context->contextPriv().getGpu()->writePixels(
- proxy->peekTexture(), 0, 0, kSize, kSize, GrColorType::kRGBA_8888, write.addr32(),
- 0);
- REPORTER_ASSERT(reporter, gpuWriteResult == (ioType == kRW_GrIOType));
-
- // Copies should not work with a read-only texture
- auto copySrc = proxyProvider->createTextureProxy(
- SkImage::MakeFromRaster(write, nullptr, nullptr), kNone_GrSurfaceFlags, 1,
- SkBudgeted::kYes, SkBackingFit::kExact);
- REPORTER_ASSERT(reporter, copySrc);
- auto copyResult = surfContext->copy(copySrc.get());
- REPORTER_ASSERT(reporter, copyResult == (ioType == kRW_GrIOType));
- // Try the low level copy.
- context->flush();
- auto gpuCopyResult = context->contextPriv().getGpu()->copySurface(
- proxy->peekTexture(), kTopLeft_GrSurfaceOrigin, copySrc->peekTexture(),
- kTopLeft_GrSurfaceOrigin, SkIRect::MakeWH(kSize, kSize), {0, 0});
- REPORTER_ASSERT(reporter, gpuCopyResult == (ioType == kRW_GrIOType));
-
- // Mip regen should not work with a read only texture.
- if (context->contextPriv().caps()->mipMapSupport()) {
- backendTex = context->contextPriv().getGpu()->createTestingOnlyBackendTexture(
- nullptr, kSize, kSize, kRGBA_8888_SkColorType, true, GrMipMapped::kYes);
- proxy = proxyProvider->wrapBackendTexture(backendTex, kTopLeft_GrSurfaceOrigin,
- kBorrow_GrWrapOwnership, ioType);
- context->flush();
- proxy->peekTexture()->texturePriv().markMipMapsDirty(); // avoids assert in GrGpu.
- auto regenResult =
- context->contextPriv().getGpu()->regenerateMipMapLevels(proxy->peekTexture());
- REPORTER_ASSERT(reporter, regenResult == (ioType == kRW_GrIOType));
- }
- }
-}
diff --git a/tests/GrTestingBackendTextureUploadTest.cpp b/tests/GrTestingBackendTextureUploadTest.cpp
index 9ff0e50..979d05e 100644
--- a/tests/GrTestingBackendTextureUploadTest.cpp
+++ b/tests/GrTestingBackendTextureUploadTest.cpp
@@ -50,8 +50,9 @@
wrappedTex = gpu->wrapRenderableBackendTexture(backendTex, 1,
GrWrapOwnership::kAdopt_GrWrapOwnership);
} else {
- wrappedTex = gpu->wrapBackendTexture(backendTex, GrWrapOwnership::kAdopt_GrWrapOwnership,
- kRead_GrIOType, false);
+ wrappedTex = gpu->wrapBackendTexture(backendTex,
+ GrWrapOwnership::kAdopt_GrWrapOwnership,
+ false);
}
REPORTER_ASSERT(reporter, wrappedTex);
diff --git a/tests/LazyProxyTest.cpp b/tests/LazyProxyTest.cpp
index e3fea66..8b106f0 100644
--- a/tests/LazyProxyTest.cpp
+++ b/tests/LazyProxyTest.cpp
@@ -469,8 +469,7 @@
return sk_sp<GrTexture>();
}
- sk_sp<GrTexture> texture = rp->wrapBackendTexture(
- backendTex, kBorrow_GrWrapOwnership, kRead_GrIOType);
+ sk_sp<GrTexture> texture = rp->wrapBackendTexture(backendTex);
if (!texture) {
return sk_sp<GrTexture>();
}
@@ -479,7 +478,7 @@
return texture;
},
format, desc, kTopLeft_GrSurfaceOrigin, GrMipMapped::kNo,
- GrInternalSurfaceFlags::kReadOnly, SkBackingFit::kExact, SkBudgeted::kNo, lazyType);
+ GrInternalSurfaceFlags::kNone, SkBackingFit::kExact, SkBudgeted::kNo, lazyType);
REPORTER_ASSERT(reporter, lazyProxy.get());
diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp
index a52ed8e..9a5a0d1 100644
--- a/tests/ProxyTest.cpp
+++ b/tests/ProxyTest.cpp
@@ -317,7 +317,7 @@
false, GrMipMapped::kNo);
sk_sp<GrSurfaceProxy> sProxy = proxyProvider->wrapBackendTexture(
- backendTex, origin, kBorrow_GrWrapOwnership, kRead_GrIOType);
+ backendTex, origin, kBorrow_GrWrapOwnership, nullptr, nullptr);
if (!sProxy) {
gpu->deleteTestingOnlyBackendTexture(backendTex);
continue;
diff --git a/tests/RectangleTextureTest.cpp b/tests/RectangleTextureTest.cpp
index dc1d3b7..21a9e19 100644
--- a/tests/RectangleTextureTest.cpp
+++ b/tests/RectangleTextureTest.cpp
@@ -135,8 +135,7 @@
}
}
- sk_sp<GrTextureProxy> rectProxy = proxyProvider->wrapBackendTexture(
- rectangleTex, origin, kBorrow_GrWrapOwnership, kRW_GrIOType);
+ sk_sp<GrTextureProxy> rectProxy = proxyProvider->wrapBackendTexture(rectangleTex, origin);
if (!rectProxy) {
ERRORF(reporter, "Error creating proxy for rectangle texture.");
diff --git a/tests/ResourceAllocatorTest.cpp b/tests/ResourceAllocatorTest.cpp
index 07d82b1..58af84e 100644
--- a/tests/ResourceAllocatorTest.cpp
+++ b/tests/ResourceAllocatorTest.cpp
@@ -69,8 +69,7 @@
return nullptr;
}
- auto tmp = proxyProvider->wrapBackendTexture(*backendTex, p.fOrigin, kBorrow_GrWrapOwnership,
- kRead_GrIOType);
+ auto tmp = proxyProvider->wrapBackendTexture(*backendTex, p.fOrigin);
if (!tmp) {
return nullptr;
}
diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp
index 1748125..03ba4d1 100644
--- a/tests/ResourceCacheTest.cpp
+++ b/tests/ResourceCacheTest.cpp
@@ -223,10 +223,10 @@
context->resetContext();
sk_sp<GrTexture> borrowed(resourceProvider->wrapBackendTexture(
- backendTextures[0], kBorrow_GrWrapOwnership, kRead_GrIOType));
+ backendTextures[0], kBorrow_GrWrapOwnership));
sk_sp<GrTexture> adopted(resourceProvider->wrapBackendTexture(
- backendTextures[1], kAdopt_GrWrapOwnership, kRead_GrIOType));
+ backendTextures[1], kAdopt_GrWrapOwnership));
REPORTER_ASSERT(reporter, borrowed != nullptr && adopted != nullptr);
if (!borrowed || !adopted) {
diff --git a/tests/TextureProxyTest.cpp b/tests/TextureProxyTest.cpp
index 5260a0e..03ded09 100644
--- a/tests/TextureProxyTest.cpp
+++ b/tests/TextureProxyTest.cpp
@@ -112,8 +112,7 @@
GrBackendTexture backendTex = (*backingSurface)->getBackendTexture();
backendTex.setPixelConfig(desc.fConfig);
- return proxyProvider->wrapBackendTexture(backendTex, kBottomLeft_GrSurfaceOrigin,
- kBorrow_GrWrapOwnership, kRead_GrIOType);
+ return proxyProvider->wrapBackendTexture(backendTex, kBottomLeft_GrSurfaceOrigin);
}
diff --git a/tests/TraceMemoryDumpTest.cpp b/tests/TraceMemoryDumpTest.cpp
index c58e915..32eab62 100644
--- a/tests/TraceMemoryDumpTest.cpp
+++ b/tests/TraceMemoryDumpTest.cpp
@@ -128,7 +128,7 @@
idDesc.fOwnership = GrBackendObjectOwnership::kBorrowed;
auto texture = GrGLTexture::MakeWrapped(gpu, desc, GrMipMapsStatus::kNotAllocated, idDesc,
- kRead_GrIOType, false);
+ false);
ValidateMemoryDumps(reporter, context, texture->gpuMemorySize(), false /* isOwned */);
}
diff --git a/tests/VkWrapTests.cpp b/tests/VkWrapTests.cpp
index 7c846ad..1553334 100644
--- a/tests/VkWrapTests.cpp
+++ b/tests/VkWrapTests.cpp
@@ -42,8 +42,7 @@
GrVkImageInfo imageInfo;
SkAssertResult(origBackendTex.getVkImageInfo(&imageInfo));
- sk_sp<GrTexture> tex =
- gpu->wrapBackendTexture(origBackendTex, kBorrow_GrWrapOwnership, kRead_GrIOType, false);
+ sk_sp<GrTexture> tex = gpu->wrapBackendTexture(origBackendTex, kBorrow_GrWrapOwnership, false);
REPORTER_ASSERT(reporter, tex);
// image is null
@@ -52,9 +51,9 @@
backendCopy.fImage = VK_NULL_HANDLE;
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
backendTex.setPixelConfig(kPixelConfig);
- tex = gpu->wrapBackendTexture(backendTex, kBorrow_GrWrapOwnership, kRead_GrIOType, false);
+ tex = gpu->wrapBackendTexture(backendTex, kBorrow_GrWrapOwnership, false);
REPORTER_ASSERT(reporter, !tex);
- tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership, kRead_GrIOType, false);
+ tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership, false);
REPORTER_ASSERT(reporter, !tex);
}
@@ -64,9 +63,9 @@
backendCopy.fAlloc = GrVkAlloc();
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
backendTex.setPixelConfig(kPixelConfig);
- tex = gpu->wrapBackendTexture(backendTex, kBorrow_GrWrapOwnership, kRead_GrIOType, false);
+ tex = gpu->wrapBackendTexture(backendTex, kBorrow_GrWrapOwnership, false);
REPORTER_ASSERT(reporter, !tex);
- tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership, kRead_GrIOType, false);
+ tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership, false);
REPORTER_ASSERT(reporter, !tex);
}
@@ -75,7 +74,7 @@
GrVkImageInfo backendCopy = imageInfo;
GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
backendTex.setPixelConfig(kPixelConfig);
- tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership, kRead_GrIOType, false);
+ tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership, false);
REPORTER_ASSERT(reporter, tex);
}
diff --git a/tools/gpu/ProxyUtils.cpp b/tools/gpu/ProxyUtils.cpp
index a1f4df6..fc167d8 100644
--- a/tools/gpu/ProxyUtils.cpp
+++ b/tools/gpu/ProxyUtils.cpp
@@ -36,7 +36,7 @@
backendTex, origin, 1, kAdopt_GrWrapOwnership);
} else {
proxy = context->contextPriv().proxyProvider()->wrapBackendTexture(
- backendTex, origin, kAdopt_GrWrapOwnership, kRW_GrIOType);
+ backendTex, origin, kAdopt_GrWrapOwnership);
}
if (!proxy) {