Revert "Migrate uses of deferred proxies to lazy proxies"
This reverts commit 990a0d8b6563941d69aa24ecae847be150ab1128.
Reason for revert: Keeping it. Deferred proxies are uploaded later than lazy and we want that for this use case.
Original change's description:
> Migrate uses of deferred proxies to lazy proxies
>
> A follow-up CL removes the deferred proxies system entirely.
>
> Bug: skia:11288
> Change-Id: Ic5b3ce820ea946f6ae27bd763c0f389caf8863d1
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/366716
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Adlai Holler <adlai@google.com>
TBR=bsalomon@google.com,robertphillips@google.com,adlai@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: skia:11288
Change-Id: I9ced532d013805afae3b20baa53cab31cae2b953
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/368797
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Adlai Holler <adlai@google.com>
diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp
index 69c254f..d477534 100644
--- a/src/gpu/GrSWMaskHelper.cpp
+++ b/src/gpu/GrSWMaskHelper.cpp
@@ -9,10 +9,8 @@
#include "include/gpu/GrRecordingContext.h"
#include "src/core/SkMatrixProvider.h"
-#include "src/core/SkTaskGroup.h"
#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
-#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrSurfaceContext.h"
@@ -45,96 +43,6 @@
return paint;
}
-GrSurfaceProxyView GrSWMaskHelper::MakeTexture(SkIRect bounds,
- GrRecordingContext* context,
- SkBackingFit fit,
- DrawFunc&& draw) {
- SkTaskGroup* taskGroup = nullptr;
- if (auto dContext = context->asDirectContext()) {
- taskGroup = dContext->priv().getTaskGroup();
- }
- if (taskGroup) {
- GrSWMaskHelper* helper = new GrSWMaskHelper(bounds);
- return helper->threadedExecute(taskGroup, context, fit, std::move(draw));
- } else {
- GrSWMaskHelper helper(bounds);
- return helper.nonThreadedExecute(context, fit, draw);
- }
-}
-
-GrSurfaceProxyView GrSWMaskHelper::threadedExecute(SkTaskGroup* taskGroup,
- GrRecordingContext* context,
- SkBackingFit fit,
- DrawFunc&& draw) {
- sk_sp<GrSWMaskHelper> spThis(this);
- taskGroup->add([spThis, draw{std::move(draw)}]() {
- if (spThis->allocate()) {
- draw(spThis.get());
- spThis->fBitmap.setImmutable();
- }
- spThis->fSemaphore.signal();
- });
- auto lazy_cb = [spThis{std::move(spThis)}](GrResourceProvider* provider,
- const GrProxyProvider::LazySurfaceDesc& desc) {
- spThis->fSemaphore.wait();
- const SkBitmap& mask = spThis->fBitmap;
- if (!mask.getPixels()) {
- return GrProxyProvider::LazyCallbackResult();
- }
- GrMipLevel mip{mask.getPixels(), mask.pixmap().rowBytes()};
- GrColorType ct{SkColorTypeToGrColorType(mask.colorType())};
- sk_sp<GrTexture> tex = provider->createTexture(desc.fDimensions,
- desc.fFormat,
- ct,
- desc.fRenderable,
- desc.fSampleCnt,
- desc.fBudgeted,
- desc.fFit,
- desc.fProtected,
- mip);
- GrProxyProvider::LazyCallbackResult result(std::move(tex));
- // Callback refs us, we own bitmap, don't release callback.
- result.fReleaseCallback = false;
- return result;
- };
- const GrCaps* caps = context->priv().caps();
- GrProxyProvider* proxyProvider = context->priv().proxyProvider();
-
- GrBackendFormat format = caps->getDefaultBackendFormat(GrColorType::kAlpha_8,
- GrRenderable::kNo);
- GrSwizzle swizzle = caps->getReadSwizzle(format, GrColorType::kAlpha_8);
- sk_sp<GrTextureProxy> p = proxyProvider->createLazyProxy(std::move(lazy_cb),
- format,
- fBitmap.dimensions(),
- GrMipMapped::kNo,
- GrMipmapStatus::kNotAllocated,
- GrInternalSurfaceFlags::kNone,
- fit,
- SkBudgeted::kYes,
- GrProtected::kNo,
- GrProxyProvider::UseAllocator::kYes);
- return GrSurfaceProxyView(std::move(p), kTopLeft_GrSurfaceOrigin, swizzle);
-}
-
-GrSurfaceProxyView GrSWMaskHelper::nonThreadedExecute(GrRecordingContext* context,
- SkBackingFit fit,
- const DrawFunc& draw) {
- if (!this->allocate()) {
- return {};
- }
- draw(this);
- fBitmap.setImmutable();
- GrBitmapTextureMaker maker(context, fBitmap, fit);
- return maker.view(GrMipmapped::kNo);
-}
-
-GrSWMaskHelper::GrSWMaskHelper(const SkIRect& resultBounds) {
- // We will need to translate draws so the bound's UL corner is at the origin
- fTranslate = {-SkIntToScalar(resultBounds.fLeft), -SkIntToScalar(resultBounds.fTop)};
- SkIRect bounds = SkIRect::MakeWH(resultBounds.width(), resultBounds.height());
- fBitmap.setInfo(SkImageInfo::MakeA8(bounds.width(), bounds.height()));
-}
-
/**
* Draw a single rect element of the clip stack into the accumulation bitmap
*/
@@ -220,14 +128,33 @@
}
}
-bool GrSWMaskHelper::allocate() {
- if (!fBitmap.tryAllocPixels()) {
- SkDEBUGFAIL("Unable to allocate SW mask.");
+bool GrSWMaskHelper::init(const SkIRect& resultBounds) {
+ // We will need to translate draws so the bound's UL corner is at the origin
+ fTranslate = {-SkIntToScalar(resultBounds.fLeft), -SkIntToScalar(resultBounds.fTop)};
+ SkIRect bounds = SkIRect::MakeWH(resultBounds.width(), resultBounds.height());
+
+ const SkImageInfo bmImageInfo = SkImageInfo::MakeA8(bounds.width(), bounds.height());
+ if (!fPixels->tryAlloc(bmImageInfo)) {
return false;
}
+ fPixels->erase(0);
- fDraw.fDst = fBitmap.pixmap();
- fRasterClip.setRect(fBitmap.info().bounds());
+ fDraw.fDst = *fPixels;
+ fRasterClip.setRect(bounds);
fDraw.fRC = &fRasterClip;
return true;
}
+
+GrSurfaceProxyView GrSWMaskHelper::toTextureView(GrRecordingContext* context, SkBackingFit fit) {
+ SkImageInfo ii = SkImageInfo::MakeA8(fPixels->width(), fPixels->height());
+ size_t rowBytes = fPixels->rowBytes();
+
+ SkBitmap bitmap;
+ SkAssertResult(bitmap.installPixels(ii, fPixels->detachPixels(), rowBytes,
+ [](void* addr, void* context) { sk_free(addr); },
+ nullptr));
+ bitmap.setImmutable();
+
+ GrBitmapTextureMaker maker(context, bitmap, fit);
+ return maker.view(GrMipmapped::kNo);
+}