diff options
author | Robert Phillips <robertphillips@google.com> | 2017-04-05 12:18:58 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-05 17:00:10 +0000 |
commit | aaee31f18c0845417103d84285e365575def3c40 (patch) | |
tree | 9d0cea264cacdf51f64919ffc8f2b2d5dc83e961 /src/gpu/GrSurfaceProxy.cpp | |
parent | babb101291784b844a99b20b5164b271758f6d33 (diff) |
Rm readPixels from GrSurface & move read/writeSurfacePixels to GrContextPriv (take 2)
This is in service of: https://skia-review.googlesource.com/c/11125/ (Add parallel proxyID to StencilOps & RenderTargetOpList) where I want a better choke point for texture creation to improve discard handling.
This is a reland of: https://skia-review.googlesource.com/c/11200/ (Rm readPixels from GrSurface & move read/writeSurfacePixels to GrContextPriv)
Change-Id: Icd0a90d2beb483dc24ed87c3bace9c817019e148
Reviewed-on: https://skia-review.googlesource.com/11326
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/GrSurfaceProxy.cpp')
-rw-r--r-- | src/gpu/GrSurfaceProxy.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/gpu/GrSurfaceProxy.cpp b/src/gpu/GrSurfaceProxy.cpp index 2506540bf8..c243086f47 100644 --- a/src/gpu/GrSurfaceProxy.cpp +++ b/src/gpu/GrSurfaceProxy.cpp @@ -46,7 +46,7 @@ GrSurface* GrSurfaceProxy::instantiate(GrResourceProvider* resourceProvider) { if (SkBackingFit::kApprox == fFit) { fTarget = resourceProvider->createApproxTexture(fDesc, fFlags); } else { - fTarget = resourceProvider->createTexture(fDesc, fBudgeted, fFlags); + fTarget = resourceProvider->createTexture(fDesc, fBudgeted, fFlags).release(); } if (!fTarget) { return nullptr; @@ -216,9 +216,16 @@ sk_sp<GrTextureProxy> GrSurfaceProxy::MakeDeferred(GrResourceProvider* resourceP const void* srcData, size_t rowBytes) { if (srcData) { - // If we have srcData, for now, we create a wrapped GrTextureProxy - sk_sp<GrTexture> tex(resourceProvider->createTexture(desc, budgeted, srcData, rowBytes)); - return GrSurfaceProxy::MakeWrapped(std::move(tex)); + GrMipLevel tempTexels; + GrMipLevel* texels = nullptr; + int levelCount = 0; + if (srcData) { + tempTexels.fPixels = srcData; + tempTexels.fRowBytes = rowBytes; + texels = &tempTexels; + levelCount = 1; + } + return resourceProvider->createMipMappedTexture(desc, budgeted, texels, levelCount); } return GrSurfaceProxy::MakeDeferred(resourceProvider, desc, SkBackingFit::kExact, budgeted); |