7f296c421e
This reverts commit0d7de6bc9a
. Reason for revert: new test failing on pixels Original change's description: > Reland "asyncRescaleAndRead supports unpremul results on GPU" > > This is a reland of70fa84a9bf
> > Bug: skia:11019 > > Original change's description: > > asyncRescaleAndRead supports unpremul results on GPU > > > > GrSurfaceContext::rescale uses GrSurfaceFillContext instead of > > GrSurfaceDrawContext. > > Change-Id: I9c2d647d8f221c129ec4485a4ed936202aee6362 > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/351923 > > Reviewed-by: Robert Phillips <robertphillips@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > Cq-Include-Trybots: luci.chromium.try:android-marshmallow-arm64-rel > Change-Id: I7b696c37edea8f755ec03431d026ea78556e5844 > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/353099 > Commit-Queue: Brian Salomon <bsalomon@google.com> > Reviewed-by: Robert Phillips <robertphillips@google.com> TBR=bsalomon@google.com,robertphillips@google.com,adlai@google.com Change-Id: I20523adc2a94185be4802c3802c23531e6e7546f No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia:11019 Cq-Include-Trybots: luci.chromium.try:android-marshmallow-arm64-rel Reviewed-on: https://skia-review.googlesource.com/c/skia/+/353557 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
108 lines
4.9 KiB
C++
108 lines
4.9 KiB
C++
/*
|
|
* Copyright 2020 Google LLC
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "tools/gpu/BackendSurfaceFactory.h"
|
|
|
|
#include "include/core/SkSurface.h"
|
|
#include "include/gpu/GrDirectContext.h"
|
|
#include "src/gpu/GrDirectContextPriv.h"
|
|
#include "src/gpu/GrGpu.h"
|
|
#include "tools/gpu/ManagedBackendTexture.h"
|
|
|
|
namespace sk_gpu_test {
|
|
|
|
sk_sp<SkSurface> MakeBackendTextureSurface(GrDirectContext* dContext,
|
|
const SkImageInfo& ii,
|
|
GrSurfaceOrigin origin,
|
|
int sampleCnt,
|
|
GrMipmapped mipMapped,
|
|
GrProtected isProtected,
|
|
const SkSurfaceProps* props) {
|
|
if (ii.alphaType() == kUnpremul_SkAlphaType) {
|
|
return nullptr;
|
|
}
|
|
auto mbet = ManagedBackendTexture::MakeWithoutData(dContext,
|
|
ii.width(),
|
|
ii.height(),
|
|
ii.colorType(),
|
|
mipMapped,
|
|
GrRenderable::kYes,
|
|
isProtected);
|
|
if (!mbet) {
|
|
return nullptr;
|
|
}
|
|
return SkSurface::MakeFromBackendTexture(dContext,
|
|
mbet->texture(),
|
|
origin,
|
|
sampleCnt,
|
|
ii.colorType(),
|
|
ii.refColorSpace(),
|
|
props,
|
|
ManagedBackendTexture::ReleaseProc,
|
|
mbet->releaseContext());
|
|
}
|
|
|
|
sk_sp<SkSurface> MakeBackendTextureSurface(GrDirectContext* dContext,
|
|
SkISize dimensions,
|
|
GrSurfaceOrigin origin,
|
|
int sampleCnt,
|
|
SkColorType colorType,
|
|
sk_sp<SkColorSpace> colorSpace,
|
|
GrMipmapped mipMapped,
|
|
GrProtected isProtected,
|
|
const SkSurfaceProps* props) {
|
|
auto ii = SkImageInfo::Make(dimensions, colorType, kPremul_SkAlphaType, std::move(colorSpace));
|
|
return MakeBackendTextureSurface(
|
|
dContext, ii, origin, sampleCnt, mipMapped, isProtected, props);
|
|
}
|
|
sk_sp<SkSurface> MakeBackendRenderTargetSurface(GrDirectContext* dContext,
|
|
const SkImageInfo& ii,
|
|
GrSurfaceOrigin origin,
|
|
int sampleCnt,
|
|
GrProtected isProtected,
|
|
const SkSurfaceProps* props) {
|
|
if (ii.alphaType() == kUnpremul_SkAlphaType) {
|
|
return nullptr;
|
|
}
|
|
auto ct = SkColorTypeToGrColorType(ii.colorType());
|
|
|
|
struct ReleaseContext {
|
|
sk_sp<GrDirectContext> fContext;
|
|
GrBackendRenderTarget fRenderTarget;
|
|
};
|
|
|
|
auto bert = dContext->priv().getGpu()->createTestingOnlyBackendRenderTarget(
|
|
ii.dimensions(), ct, sampleCnt, isProtected);
|
|
auto rc = new ReleaseContext{sk_ref_sp(dContext), bert};
|
|
SkASSERT(!bert.isValid() || bert.sampleCnt() >= sampleCnt);
|
|
|
|
auto proc = [](void* c) {
|
|
const auto* rc = static_cast<ReleaseContext*>(c);
|
|
if (auto gpu = rc->fContext->priv().getGpu(); gpu && rc->fRenderTarget.isValid()) {
|
|
gpu->deleteTestingOnlyBackendRenderTarget(rc->fRenderTarget);
|
|
}
|
|
delete rc;
|
|
};
|
|
|
|
return SkSurface::MakeFromBackendRenderTarget(
|
|
dContext, bert, origin, ii.colorType(), ii.refColorSpace(), props, proc, rc);
|
|
}
|
|
|
|
sk_sp<SkSurface> MakeBackendRenderTargetSurface(GrDirectContext* dContext,
|
|
SkISize dimensions,
|
|
GrSurfaceOrigin origin,
|
|
int sampleCnt,
|
|
SkColorType colorType,
|
|
sk_sp<SkColorSpace> colorSpace,
|
|
GrProtected isProtected,
|
|
const SkSurfaceProps* props) {
|
|
auto ii = SkImageInfo::Make(dimensions, colorType, kPremul_SkAlphaType, std::move(colorSpace));
|
|
return MakeBackendRenderTargetSurface(dContext, ii, origin, sampleCnt, isProtected, props);
|
|
}
|
|
|
|
} // namespace sk_gpu_test
|