Switch path renderers over to using GrRecordingContext
The path renderers convert paths into Ganesh ops when recording so should also be able to make due with only the GrRecordingContext.
Change-Id: Ie796af73ca5aa2a074ebd037d6d558ec85ff5928
Reviewed-on: https://skia-review.googlesource.com/c/191568
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/GrClip.h b/src/gpu/GrClip.h
index 7358e67..eb7d95b 100644
--- a/src/gpu/GrClip.h
+++ b/src/gpu/GrClip.h
@@ -35,7 +35,7 @@
* conservative bounds of the clip. A return value of false indicates that the draw can be
* skipped as it is fully clipped out.
*/
- virtual bool apply(GrContext*, GrRenderTargetContext*, bool useHWAA,
+ virtual bool apply(GrRecordingContext*, GrRenderTargetContext*, bool useHWAA,
bool hasUserStencilSettings, GrAppliedClip*, SkRect* bounds) const = 0;
virtual ~GrClip() {}
@@ -147,8 +147,8 @@
virtual bool apply(int rtWidth, int rtHeight, GrAppliedHardClip* out, SkRect* bounds) const = 0;
private:
- bool apply(GrContext*, GrRenderTargetContext* rtc, bool useHWAA, bool hasUserStencilSettings,
- GrAppliedClip* out, SkRect* bounds) const final {
+ bool apply(GrRecordingContext*, GrRenderTargetContext* rtc, bool useHWAA,
+ bool hasUserStencilSettings, GrAppliedClip* out, SkRect* bounds) const final {
return this->apply(rtc->width(), rtc->height(), &out->hardClip(), bounds);
}
};
diff --git a/src/gpu/GrClipStackClip.cpp b/src/gpu/GrClipStackClip.cpp
index c2209d9..6ec73e7 100644
--- a/src/gpu/GrClipStackClip.cpp
+++ b/src/gpu/GrClipStackClip.cpp
@@ -7,12 +7,12 @@
#include "GrClipStackClip.h"
#include "GrAppliedClip.h"
-#include "GrContextPriv.h"
#include "GrDeferredProxyUploader.h"
#include "GrDrawingManager.h"
#include "GrFixedClip.h"
#include "GrGpuResourcePriv.h"
#include "GrProxyProvider.h"
+#include "GrRecordingContextPriv.h"
#include "GrRenderTargetContextPriv.h"
#include "GrSWMaskHelper.h"
#include "GrShape.h"
@@ -87,7 +87,7 @@
// Does the path in 'element' require SW rendering? If so, return true (and,
// optionally, set 'prOut' to NULL. If not, return false (and, optionally, set
// 'prOut' to the non-SW path renderer that will do the job).
-bool GrClipStackClip::PathNeedsSWRenderer(GrContext* context,
+bool GrClipStackClip::PathNeedsSWRenderer(GrRecordingContext* context,
const SkIRect& scissorRect,
bool hasUserStencilSettings,
const GrRenderTargetContext* renderTargetContext,
@@ -146,7 +146,7 @@
* will be used on any element. If so, it returns true to indicate that the
* entire clip should be rendered in SW and then uploaded en masse to the gpu.
*/
-bool GrClipStackClip::UseSWOnlyPath(GrContext* context,
+bool GrClipStackClip::UseSWOnlyPath(GrRecordingContext* context,
bool hasUserStencilSettings,
const GrRenderTargetContext* renderTargetContext,
const GrReducedClip& reducedClip) {
@@ -189,7 +189,7 @@
////////////////////////////////////////////////////////////////////////////////
// sort out what kind of clip mask needs to be created: alpha, stencil,
// scissor, or entirely software
-bool GrClipStackClip::apply(GrContext* context, GrRenderTargetContext* renderTargetContext,
+bool GrClipStackClip::apply(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext,
bool useHWAA, bool hasUserStencilSettings, GrAppliedClip* out,
SkRect* bounds) const {
SkRect devBounds = SkRect::MakeIWH(renderTargetContext->width(), renderTargetContext->height());
@@ -249,7 +249,8 @@
return true;
}
-bool GrClipStackClip::applyClipMask(GrContext* context, GrRenderTargetContext* renderTargetContext,
+bool GrClipStackClip::applyClipMask(GrRecordingContext* context,
+ GrRenderTargetContext* renderTargetContext,
const GrReducedClip& reducedClip, bool hasUserStencilSettings,
GrAppliedClip* out) const {
#ifdef SK_DEBUG
@@ -322,7 +323,7 @@
builder[3] = numAnalyticFPs;
}
-static void add_invalidate_on_pop_message(GrContext* context,
+static void add_invalidate_on_pop_message(GrRecordingContext* context,
const SkClipStack& stack, uint32_t clipGenID,
const GrUniqueKey& clipMaskKey) {
GrProxyProvider* proxyProvider = context->priv().proxyProvider();
@@ -337,7 +338,7 @@
SkDEBUGFAIL("Gen ID was not found in stack.");
}
-sk_sp<GrTextureProxy> GrClipStackClip::createAlphaClipMask(GrContext* context,
+sk_sp<GrTextureProxy> GrClipStackClip::createAlphaClipMask(GrRecordingContext* context,
const GrReducedClip& reducedClip) const {
GrProxyProvider* proxyProvider = context->priv().proxyProvider();
GrUniqueKey key;
@@ -457,7 +458,7 @@
}
sk_sp<GrTextureProxy> GrClipStackClip::createSoftwareClipMask(
- GrContext* context, const GrReducedClip& reducedClip,
+ GrRecordingContext* context, const GrReducedClip& reducedClip,
GrRenderTargetContext* renderTargetContext) const {
GrUniqueKey key;
create_clip_mask_key(reducedClip.maskGenID(), reducedClip.scissor(),
@@ -475,7 +476,11 @@
// left corner of the resulting rect to the top left of the texture.
SkIRect maskSpaceIBounds = SkIRect::MakeWH(reducedClip.width(), reducedClip.height());
- SkTaskGroup* taskGroup = context->priv().getTaskGroup();
+ SkTaskGroup* taskGroup = nullptr;
+ if (auto direct = context->priv().asDirectContext()) {
+ taskGroup = direct->priv().getTaskGroup();
+ }
+
if (taskGroup && renderTargetContext) {
// Create our texture proxy
GrSurfaceDesc desc;
diff --git a/src/gpu/GrClipStackClip.h b/src/gpu/GrClipStackClip.h
index aeb9834..6f4b2b1 100644
--- a/src/gpu/GrClipStackClip.h
+++ b/src/gpu/GrClipStackClip.h
@@ -28,8 +28,8 @@
bool quickContains(const SkRRect&) const final;
void getConservativeBounds(int width, int height, SkIRect* devResult,
bool* isIntersectionOfRects) const final;
- bool apply(GrContext*, GrRenderTargetContext*, bool useHWAA, bool hasUserStencilSettings,
- GrAppliedClip* out, SkRect* bounds) const final;
+ bool apply(GrRecordingContext*, GrRenderTargetContext*, bool useHWAA,
+ bool hasUserStencilSettings, GrAppliedClip* out, SkRect* bounds) const final;
bool isRRect(const SkRect& rtBounds, SkRRect* rr, GrAA* aa) const override;
@@ -37,7 +37,7 @@
static const char kMaskTestTag[];
private:
- static bool PathNeedsSWRenderer(GrContext* context,
+ static bool PathNeedsSWRenderer(GrRecordingContext* context,
const SkIRect& scissorRect,
bool hasUserStencilSettings,
const GrRenderTargetContext*,
@@ -46,18 +46,18 @@
GrPathRenderer** prOut,
bool needsStencil);
- bool applyClipMask(GrContext*, GrRenderTargetContext*, const GrReducedClip&,
+ bool applyClipMask(GrRecordingContext*, GrRenderTargetContext*, const GrReducedClip&,
bool hasUserStencilSettings, GrAppliedClip*) const;
// Creates an alpha mask of the clip. The mask is a rasterization of elements through the
// rect specified by clipSpaceIBounds.
- sk_sp<GrTextureProxy> createAlphaClipMask(GrContext*, const GrReducedClip&) const;
+ sk_sp<GrTextureProxy> createAlphaClipMask(GrRecordingContext*, const GrReducedClip&) const;
// Similar to createAlphaClipMask but it rasterizes in SW and uploads to the result texture.
- sk_sp<GrTextureProxy> createSoftwareClipMask(GrContext*, const GrReducedClip&,
+ sk_sp<GrTextureProxy> createSoftwareClipMask(GrRecordingContext*, const GrReducedClip&,
GrRenderTargetContext*) const;
- static bool UseSWOnlyPath(GrContext*,
+ static bool UseSWOnlyPath(GrRecordingContext*,
bool hasUserStencilSettings,
const GrRenderTargetContext*,
const GrReducedClip&);
diff --git a/src/gpu/GrContextPriv.cpp b/src/gpu/GrContextPriv.cpp
index 341d787..b502bf8 100644
--- a/src/gpu/GrContextPriv.cpp
+++ b/src/gpu/GrContextPriv.cpp
@@ -44,21 +44,38 @@
}
sk_sp<GrRenderTargetContext> GrContextPriv::makeDeferredRenderTargetContext(
- const GrBackendFormat& format,
- SkBackingFit fit,
- int width, int height,
- GrPixelConfig config,
- sk_sp<SkColorSpace> colorSpace,
- int sampleCnt,
- GrMipMapped mipMapped,
- GrSurfaceOrigin origin,
- const SkSurfaceProps* surfaceProps,
- SkBudgeted budgeted) {
+ const GrBackendFormat& format,
+ SkBackingFit fit,
+ int width, int height,
+ GrPixelConfig config,
+ sk_sp<SkColorSpace> colorSpace,
+ int sampleCnt,
+ GrMipMapped mipMapped,
+ GrSurfaceOrigin origin,
+ const SkSurfaceProps* surfaceProps,
+ SkBudgeted budgeted) {
return fContext->makeDeferredRenderTargetContext(format, fit, width, height, config,
std::move(colorSpace), sampleCnt, mipMapped,
origin, surfaceProps, budgeted);
}
+sk_sp<GrRenderTargetContext> GrContextPriv::makeDeferredRenderTargetContextWithFallback(
+ const GrBackendFormat& format,
+ SkBackingFit fit,
+ int width, int height,
+ GrPixelConfig config,
+ sk_sp<SkColorSpace> colorSpace,
+ int sampleCnt,
+ GrMipMapped mipMapped,
+ GrSurfaceOrigin origin,
+ const SkSurfaceProps* surfaceProps,
+ SkBudgeted budgeted) {
+ return fContext->makeDeferredRenderTargetContextWithFallback(format, fit, width, height, config,
+ std::move(colorSpace), sampleCnt,
+ mipMapped, origin, surfaceProps,
+ budgeted);
+}
+
sk_sp<GrSurfaceContext> GrContextPriv::makeWrappedSurfaceContext(sk_sp<GrSurfaceProxy> proxy,
sk_sp<SkColorSpace> colorSpace,
const SkSurfaceProps* props) {
@@ -685,62 +702,6 @@
fContext->fDrawingManager->copyOpListsFromDDL(ddl, newDest);
}
-static inline GrPixelConfig GrPixelConfigFallback(GrPixelConfig config) {
- switch (config) {
- case kAlpha_8_GrPixelConfig:
- case kAlpha_8_as_Alpha_GrPixelConfig:
- case kAlpha_8_as_Red_GrPixelConfig:
- case kRGB_565_GrPixelConfig:
- case kRGBA_4444_GrPixelConfig:
- case kBGRA_8888_GrPixelConfig:
- case kRGBA_1010102_GrPixelConfig:
- case kRGBA_half_GrPixelConfig:
- return kRGBA_8888_GrPixelConfig;
- case kSBGRA_8888_GrPixelConfig:
- return kSRGBA_8888_GrPixelConfig;
- case kAlpha_half_GrPixelConfig:
- case kAlpha_half_as_Red_GrPixelConfig:
- return kRGBA_half_GrPixelConfig;
- case kGray_8_GrPixelConfig:
- case kGray_8_as_Lum_GrPixelConfig:
- case kGray_8_as_Red_GrPixelConfig:
- return kRGB_888_GrPixelConfig;
- default:
- return kUnknown_GrPixelConfig;
- }
-}
-
-sk_sp<GrRenderTargetContext> GrContextPriv::makeDeferredRenderTargetContextWithFallback(
- const GrBackendFormat& format,
- SkBackingFit fit,
- int width, int height,
- GrPixelConfig config,
- sk_sp<SkColorSpace> colorSpace,
- int sampleCnt,
- GrMipMapped mipMapped,
- GrSurfaceOrigin origin,
- const SkSurfaceProps* surfaceProps,
- SkBudgeted budgeted) {
- GrBackendFormat localFormat = format;
- SkASSERT(sampleCnt > 0);
- if (0 == fContext->priv().caps()->getRenderTargetSampleCount(sampleCnt, config)) {
- config = GrPixelConfigFallback(config);
- // TODO: First we should be checking the getRenderTargetSampleCount from the GrBackendFormat
- // and not GrPixelConfig. Besides that, we should implement the fallback in the caps, but
- // for now we just convert the fallback pixel config to an SkColorType and then get the
- // GrBackendFormat from that.
- SkColorType colorType;
- if (!GrPixelConfigToColorType(config, &colorType)) {
- return nullptr;
- }
- localFormat = fContext->caps()->getBackendFormatFromColorType(colorType);
- }
-
- return this->makeDeferredRenderTargetContext(localFormat, fit, width, height, config,
- std::move(colorSpace), sampleCnt, mipMapped,
- origin, surfaceProps, budgeted);
-}
-
//////////////////////////////////////////////////////////////////////////////
#ifdef SK_ENABLE_DUMP_GPU
#include "SkJSONWriter.h"
diff --git a/src/gpu/GrContextPriv.h b/src/gpu/GrContextPriv.h
index 301a2b3..f2c66db 100644
--- a/src/gpu/GrContextPriv.h
+++ b/src/gpu/GrContextPriv.h
@@ -53,6 +53,10 @@
SkDEBUGCODE(GrSingleOwner* singleOwner() const { return fContext->singleOwner(); } )
// from GrRecordingContext
+
+ // CONTEXT TODO: move GrDrawingManager to GrRecordingContext for real
+ GrDrawingManager* drawingManager() { return fContext->drawingManager(); }
+
sk_sp<GrOpMemoryPool> refOpMemoryPool();
GrOpMemoryPool* opMemoryPool() { return fContext->opMemoryPool(); }
@@ -73,6 +77,24 @@
const SkSurfaceProps* surfaceProps = nullptr,
SkBudgeted = SkBudgeted::kYes);
+ /*
+ * This method will attempt to create a renderTargetContext that has, at least, the number of
+ * channels and precision per channel as requested in 'config' (e.g., A8 and 888 can be
+ * converted to 8888). It may also swizzle the channels (e.g., BGRA -> RGBA).
+ * SRGB-ness will be preserved.
+ */
+ sk_sp<GrRenderTargetContext> makeDeferredRenderTargetContextWithFallback(
+ const GrBackendFormat& format,
+ SkBackingFit fit,
+ int width, int height,
+ GrPixelConfig config,
+ sk_sp<SkColorSpace> colorSpace,
+ int sampleCnt = 1,
+ GrMipMapped = GrMipMapped::kNo,
+ GrSurfaceOrigin origin = kBottomLeft_GrSurfaceOrigin,
+ const SkSurfaceProps* surfaceProps = nullptr,
+ SkBudgeted budgeted = SkBudgeted::kYes);
+
GrAuditTrail* auditTrail() { return fContext->auditTrail(); }
/**
@@ -80,8 +102,6 @@
*/
static sk_sp<GrContext> MakeDDL(const sk_sp<GrContextThreadSafeProxy>&);
- GrDrawingManager* drawingManager() { return fContext->fDrawingManager.get(); }
-
sk_sp<GrSurfaceContext> makeWrappedSurfaceContext(sk_sp<GrSurfaceProxy>,
sk_sp<SkColorSpace> = nullptr,
const SkSurfaceProps* = nullptr);
@@ -248,24 +268,6 @@
void moveOpListsToDDL(SkDeferredDisplayList*);
void copyOpListsFromDDL(const SkDeferredDisplayList*, GrRenderTargetProxy* newDest);
- /*
- * This method will attempt to create a renderTargetContext that has, at least, the number of
- * channels and precision per channel as requested in 'config' (e.g., A8 and 888 can be
- * converted to 8888). It may also swizzle the channels (e.g., BGRA -> RGBA).
- * SRGB-ness will be preserved.
- */
- sk_sp<GrRenderTargetContext> makeDeferredRenderTargetContextWithFallback(
- const GrBackendFormat& format,
- SkBackingFit fit,
- int width, int height,
- GrPixelConfig config,
- sk_sp<SkColorSpace> colorSpace,
- int sampleCnt = 1,
- GrMipMapped = GrMipMapped::kNo,
- GrSurfaceOrigin origin = kBottomLeft_GrSurfaceOrigin,
- const SkSurfaceProps* surfaceProps = nullptr,
- SkBudgeted budgeted = SkBudgeted::kYes);
-
GrContextOptions::PersistentCache* getPersistentCache() { return fContext->fPersistentCache; }
#ifdef SK_ENABLE_DUMP_GPU
diff --git a/src/gpu/GrPathRenderer.cpp b/src/gpu/GrPathRenderer.cpp
index d16ff49..83e8b5b 100644
--- a/src/gpu/GrPathRenderer.cpp
+++ b/src/gpu/GrPathRenderer.cpp
@@ -7,8 +7,8 @@
#include "GrPathRenderer.h"
#include "GrCaps.h"
-#include "GrContextPriv.h"
#include "GrPaint.h"
+#include "GrRecordingContextPriv.h"
#include "GrRenderTargetContext.h"
#include "GrShape.h"
#include "GrUserStencilSettings.h"
diff --git a/src/gpu/GrPathRenderer.h b/src/gpu/GrPathRenderer.h
index a6c3ed5..7101878 100644
--- a/src/gpu/GrPathRenderer.h
+++ b/src/gpu/GrPathRenderer.h
@@ -14,10 +14,10 @@
class GrCaps;
class GrClip;
-class GrContext;
class GrFixedClip;
class GrHardClip;
class GrPaint;
+class GrRecordingContext;
class GrRenderTargetContext;
class GrShape;
class GrStyle;
@@ -106,7 +106,7 @@
}
struct DrawPathArgs {
- GrContext* fContext;
+ GrRecordingContext* fContext;
GrPaint&& fPaint;
const GrUserStencilSettings* fUserStencilSettings;
GrRenderTargetContext* fRenderTargetContext;
@@ -140,7 +140,7 @@
struct StencilPathArgs {
SkDEBUGCODE(StencilPathArgs() { memset(this, 0, sizeof(*this)); }) // For validation.
- GrContext* fContext;
+ GrRecordingContext* fContext;
GrRenderTargetContext* fRenderTargetContext;
const GrHardClip* fClip;
const SkIRect* fClipConservativeBounds;
diff --git a/src/gpu/GrRecordingContext.cpp b/src/gpu/GrRecordingContext.cpp
index 12142c3..ebbb68c 100644
--- a/src/gpu/GrRecordingContext.cpp
+++ b/src/gpu/GrRecordingContext.cpp
@@ -14,6 +14,7 @@
#include "GrRecordingContextPriv.h"
#include "GrRenderTargetContext.h"
#include "GrSkSLFPFactoryCache.h"
+#include "SkGr.h"
GrRecordingContext::GrRecordingContext(GrBackendApi backend,
const GrContextOptions& options,
@@ -91,6 +92,62 @@
return renderTargetContext;
}
+static inline GrPixelConfig GrPixelConfigFallback(GrPixelConfig config) {
+ switch (config) {
+ case kAlpha_8_GrPixelConfig:
+ case kAlpha_8_as_Alpha_GrPixelConfig:
+ case kAlpha_8_as_Red_GrPixelConfig:
+ case kRGB_565_GrPixelConfig:
+ case kRGBA_4444_GrPixelConfig:
+ case kBGRA_8888_GrPixelConfig:
+ case kRGBA_1010102_GrPixelConfig:
+ case kRGBA_half_GrPixelConfig:
+ return kRGBA_8888_GrPixelConfig;
+ case kSBGRA_8888_GrPixelConfig:
+ return kSRGBA_8888_GrPixelConfig;
+ case kAlpha_half_GrPixelConfig:
+ case kAlpha_half_as_Red_GrPixelConfig:
+ return kRGBA_half_GrPixelConfig;
+ case kGray_8_GrPixelConfig:
+ case kGray_8_as_Lum_GrPixelConfig:
+ case kGray_8_as_Red_GrPixelConfig:
+ return kRGB_888_GrPixelConfig;
+ default:
+ return kUnknown_GrPixelConfig;
+ }
+}
+
+sk_sp<GrRenderTargetContext> GrRecordingContext::makeDeferredRenderTargetContextWithFallback(
+ const GrBackendFormat& format,
+ SkBackingFit fit,
+ int width, int height,
+ GrPixelConfig config,
+ sk_sp<SkColorSpace> colorSpace,
+ int sampleCnt,
+ GrMipMapped mipMapped,
+ GrSurfaceOrigin origin,
+ const SkSurfaceProps* surfaceProps,
+ SkBudgeted budgeted) {
+ GrBackendFormat localFormat = format;
+ SkASSERT(sampleCnt > 0);
+ if (0 == this->caps()->getRenderTargetSampleCount(sampleCnt, config)) {
+ config = GrPixelConfigFallback(config);
+ // TODO: First we should be checking the getRenderTargetSampleCount from the GrBackendFormat
+ // and not GrPixelConfig. Besides that, we should implement the fallback in the caps, but
+ // for now we just convert the fallback pixel config to an SkColorType and then get the
+ // GrBackendFormat from that.
+ SkColorType colorType;
+ if (!GrPixelConfigToColorType(config, &colorType)) {
+ return nullptr;
+ }
+ localFormat = this->caps()->getBackendFormatFromColorType(colorType);
+ }
+
+ return this->makeDeferredRenderTargetContext(localFormat, fit, width, height, config,
+ std::move(colorSpace), sampleCnt, mipMapped,
+ origin, surfaceProps, budgeted);
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
sk_sp<const GrCaps> GrRecordingContextPriv::refCaps() const {
return fContext->refCaps();
@@ -119,3 +176,20 @@
std::move(colorSpace), sampleCnt, mipMapped,
origin, surfaceProps, budgeted);
}
+
+sk_sp<GrRenderTargetContext> GrRecordingContextPriv::makeDeferredRenderTargetContextWithFallback(
+ const GrBackendFormat& format,
+ SkBackingFit fit,
+ int width, int height,
+ GrPixelConfig config,
+ sk_sp<SkColorSpace> colorSpace,
+ int sampleCnt,
+ GrMipMapped mipMapped,
+ GrSurfaceOrigin origin,
+ const SkSurfaceProps* surfaceProps,
+ SkBudgeted budgeted) {
+ return fContext->makeDeferredRenderTargetContextWithFallback(format, fit, width, height, config,
+ std::move(colorSpace), sampleCnt,
+ mipMapped, origin, surfaceProps,
+ budgeted);
+}
diff --git a/src/gpu/GrRecordingContextPriv.h b/src/gpu/GrRecordingContextPriv.h
index 52953d0..e18035f 100644
--- a/src/gpu/GrRecordingContextPriv.h
+++ b/src/gpu/GrRecordingContextPriv.h
@@ -41,6 +41,10 @@
SkDEBUGCODE(GrSingleOwner* singleOwner() const { return fContext->singleOwner(); } )
// from GrRecordingContext
+
+ // CONTEXT TODO: move GrDrawingManager to GrRecordingContext for real
+ GrDrawingManager* drawingManager() { return fContext->drawingManager(); }
+
sk_sp<GrOpMemoryPool> refOpMemoryPool();
GrOpMemoryPool* opMemoryPool() { return fContext->opMemoryPool(); }
@@ -61,6 +65,24 @@
const SkSurfaceProps* surfaceProps = nullptr,
SkBudgeted = SkBudgeted::kYes);
+ /*
+ * This method will attempt to create a renderTargetContext that has, at least, the number of
+ * channels and precision per channel as requested in 'config' (e.g., A8 and 888 can be
+ * converted to 8888). It may also swizzle the channels (e.g., BGRA -> RGBA).
+ * SRGB-ness will be preserved.
+ */
+ sk_sp<GrRenderTargetContext> makeDeferredRenderTargetContextWithFallback(
+ const GrBackendFormat& format,
+ SkBackingFit fit,
+ int width, int height,
+ GrPixelConfig config,
+ sk_sp<SkColorSpace> colorSpace,
+ int sampleCnt = 1,
+ GrMipMapped = GrMipMapped::kNo,
+ GrSurfaceOrigin origin = kBottomLeft_GrSurfaceOrigin,
+ const SkSurfaceProps* surfaceProps = nullptr,
+ SkBudgeted budgeted = SkBudgeted::kYes);
+
GrAuditTrail* auditTrail() { return fContext->auditTrail(); }
private:
diff --git a/src/gpu/GrReducedClip.cpp b/src/gpu/GrReducedClip.cpp
index 967386f..2624d86 100644
--- a/src/gpu/GrReducedClip.cpp
+++ b/src/gpu/GrReducedClip.cpp
@@ -9,10 +9,10 @@
#include "GrAppliedClip.h"
#include "GrClip.h"
#include "GrColor.h"
-#include "GrContextPriv.h"
#include "GrDrawingManager.h"
#include "GrFixedClip.h"
#include "GrPathRenderer.h"
+#include "GrRecordingContextPriv.h"
#include "GrRenderTargetContext.h"
#include "GrRenderTargetContextPriv.h"
#include "GrShape.h"
@@ -809,7 +809,7 @@
////////////////////////////////////////////////////////////////////////////////
// Create a 1-bit clip mask in the stencil buffer.
-bool GrReducedClip::drawStencilClipMask(GrContext* context,
+bool GrReducedClip::drawStencilClipMask(GrRecordingContext* context,
GrRenderTargetContext* renderTargetContext) const {
// We set the current clip to the bounds so that our recursive draws are scissored to them.
GrStencilClip stencilClip(fScissor, this->maskGenID());
diff --git a/src/gpu/GrReducedClip.h b/src/gpu/GrReducedClip.h
index fcdc66c..bac08a3 100644
--- a/src/gpu/GrReducedClip.h
+++ b/src/gpu/GrReducedClip.h
@@ -13,8 +13,8 @@
#include "SkClipStack.h"
#include "SkTLList.h"
-class GrContext;
class GrCoverageCountingPathRenderer;
+class GrRecordingContext;
class GrRenderTargetContext;
/**
@@ -83,7 +83,7 @@
bool maskRequiresAA() const { SkASSERT(!fMaskElements.isEmpty()); return fMaskRequiresAA; }
bool drawAlphaClipMask(GrRenderTargetContext*) const;
- bool drawStencilClipMask(GrContext*, GrRenderTargetContext*) const;
+ bool drawStencilClipMask(GrRecordingContext*, GrRenderTargetContext*) const;
int numAnalyticFPs() const { return fAnalyticFPs.count() + fCCPRClipPaths.count(); }
diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp
index 2f21a67..7638bf1 100644
--- a/src/gpu/GrSWMaskHelper.cpp
+++ b/src/gpu/GrSWMaskHelper.cpp
@@ -7,9 +7,9 @@
#include "GrSWMaskHelper.h"
-#include "GrContext.h"
-#include "GrContextPriv.h"
#include "GrProxyProvider.h"
+#include "GrRecordingContext.h"
+#include "GrRecordingContextPriv.h"
#include "GrShape.h"
#include "GrSurfaceContext.h"
#include "GrTextureProxy.h"
@@ -91,7 +91,8 @@
return true;
}
-sk_sp<GrTextureProxy> GrSWMaskHelper::toTextureProxy(GrContext* context, SkBackingFit fit) {
+sk_sp<GrTextureProxy> GrSWMaskHelper::toTextureProxy(GrRecordingContext* context,
+ SkBackingFit fit) {
SkImageInfo ii = SkImageInfo::MakeA8(fPixels->width(), fPixels->height());
size_t rowBytes = fPixels->rowBytes();
@@ -108,7 +109,7 @@
// TODO: http://skbug.com/8422: Although this fixes http://skbug.com/8351, it seems like these
// should just participate in the normal allocation process and not need the pending IO flag.
auto surfaceFlags = GrInternalSurfaceFlags::kNone;
- if (!context->priv().resourceProvider()) {
+ if (!context->priv().proxyProvider()->renderingDirectly()) {
// In DDL mode, this texture proxy will be instantiated at flush time, therfore it cannot
// have pending IO.
surfaceFlags |= GrInternalSurfaceFlags::kNoPendingIO;
diff --git a/src/gpu/GrSWMaskHelper.h b/src/gpu/GrSWMaskHelper.h
index 1456d40..c2df5db 100644
--- a/src/gpu/GrSWMaskHelper.h
+++ b/src/gpu/GrSWMaskHelper.h
@@ -17,6 +17,7 @@
#include "SkTypes.h"
class GrShape;
+class GrRecordingContext;
class GrTextureProxy;
/**
@@ -50,7 +51,7 @@
// Draw a single path into the accumuation bitmap using the specified op
void drawShape(const GrShape&, const SkMatrix& matrix, SkRegion::Op op, GrAA, uint8_t alpha);
- sk_sp<GrTextureProxy> toTextureProxy(GrContext*, SkBackingFit fit);
+ sk_sp<GrTextureProxy> toTextureProxy(GrRecordingContext*, SkBackingFit fit);
// Reset the internal bitmap
void clear(uint8_t alpha) {
diff --git a/src/gpu/GrSoftwarePathRenderer.cpp b/src/gpu/GrSoftwarePathRenderer.cpp
index 9fd8ecd..0eb89fe 100644
--- a/src/gpu/GrSoftwarePathRenderer.cpp
+++ b/src/gpu/GrSoftwarePathRenderer.cpp
@@ -8,12 +8,12 @@
#include "GrSoftwarePathRenderer.h"
#include "GrAuditTrail.h"
#include "GrClip.h"
-#include "GrContextPriv.h"
#include "GrDeferredProxyUploader.h"
#include "GrGpuResourcePriv.h"
#include "GrOpFlushState.h"
#include "GrOpList.h"
#include "GrProxyProvider.h"
+#include "GrRecordingContextPriv.h"
#include "GrSWMaskHelper.h"
#include "GrShape.h"
#include "GrSurfaceContextPriv.h"
@@ -172,7 +172,8 @@
dstRect, invert);
}
-static sk_sp<GrTextureProxy> make_deferred_mask_texture_proxy(GrContext* context, SkBackingFit fit,
+static sk_sp<GrTextureProxy> make_deferred_mask_texture_proxy(GrRecordingContext* context,
+ SkBackingFit fit,
int width, int height) {
GrProxyProvider* proxyProvider = context->priv().proxyProvider();
@@ -331,7 +332,11 @@
SkBackingFit fit = useCache ? SkBackingFit::kExact : SkBackingFit::kApprox;
GrAA aa = GrAAType::kCoverage == args.fAAType ? GrAA::kYes : GrAA::kNo;
- SkTaskGroup* taskGroup = args.fContext->priv().getTaskGroup();
+ SkTaskGroup* taskGroup = nullptr;
+ if (auto direct = args.fContext->priv().asDirectContext()) {
+ taskGroup = direct->priv().getTaskGroup();
+ }
+
if (taskGroup) {
proxy = make_deferred_mask_texture_proxy(args.fContext, fit,
boundsForMask->width(),
diff --git a/src/gpu/ccpr/GrCCDrawPathsOp.cpp b/src/gpu/ccpr/GrCCDrawPathsOp.cpp
index 643118a..79e318f 100644
--- a/src/gpu/ccpr/GrCCDrawPathsOp.cpp
+++ b/src/gpu/ccpr/GrCCDrawPathsOp.cpp
@@ -7,10 +7,10 @@
#include "GrCCDrawPathsOp.h"
-#include "GrContext.h"
-#include "GrContextPriv.h"
#include "GrMemoryPool.h"
#include "GrOpFlushState.h"
+#include "GrRecordingContext.h"
+#include "GrRecordingContextPriv.h"
#include "ccpr/GrCCPathCache.h"
#include "ccpr/GrCCPerFlushResources.h"
#include "ccpr/GrCoverageCountingPathRenderer.h"
@@ -26,8 +26,8 @@
}
std::unique_ptr<GrCCDrawPathsOp> GrCCDrawPathsOp::Make(
- GrContext* context, const SkIRect& clipIBounds, const SkMatrix& m, const GrShape& shape,
- GrPaint&& paint) {
+ GrRecordingContext* context, const SkIRect& clipIBounds, const SkMatrix& m,
+ const GrShape& shape, GrPaint&& paint) {
SkRect conservativeDevBounds;
m.mapRect(&conservativeDevBounds, shape.bounds());
@@ -75,8 +75,9 @@
}
std::unique_ptr<GrCCDrawPathsOp> GrCCDrawPathsOp::InternalMake(
- GrContext* context, const SkIRect& clipIBounds, const SkMatrix& m, const GrShape& shape,
- float strokeDevWidth, const SkRect& conservativeDevBounds, GrPaint&& paint) {
+ GrRecordingContext* context, const SkIRect& clipIBounds, const SkMatrix& m,
+ const GrShape& shape, float strokeDevWidth, const SkRect& conservativeDevBounds,
+ GrPaint&& paint) {
// The path itself should have been cropped if larger than kPathCropThreshold. If it had a
// stroke, that would have further inflated its draw bounds.
SkASSERT(SkTMax(conservativeDevBounds.height(), conservativeDevBounds.width()) <
diff --git a/src/gpu/ccpr/GrCCDrawPathsOp.h b/src/gpu/ccpr/GrCCDrawPathsOp.h
index fef4ead..1ab180a 100644
--- a/src/gpu/ccpr/GrCCDrawPathsOp.h
+++ b/src/gpu/ccpr/GrCCDrawPathsOp.h
@@ -14,11 +14,12 @@
#include "ccpr/GrCCPathCache.h"
#include "ops/GrDrawOp.h"
+class GrCCAtlas;
+class GrCCPerFlushResources;
struct GrCCPerFlushResourceSpecs;
struct GrCCPerOpListPaths;
-class GrCCAtlas;
class GrOnFlushResourceProvider;
-class GrCCPerFlushResources;
+class GrRecordingContext;
/**
* This is the Op that draws paths to the actual canvas, using atlases generated by CCPR.
@@ -28,7 +29,7 @@
DEFINE_OP_CLASS_ID
SK_DECLARE_INTERNAL_LLIST_INTERFACE(GrCCDrawPathsOp);
- static std::unique_ptr<GrCCDrawPathsOp> Make(GrContext*, const SkIRect& clipIBounds,
+ static std::unique_ptr<GrCCDrawPathsOp> Make(GrRecordingContext*, const SkIRect& clipIBounds,
const SkMatrix&, const GrShape&, GrPaint&&);
~GrCCDrawPathsOp() override;
@@ -68,7 +69,8 @@
private:
friend class GrOpMemoryPool;
- static std::unique_ptr<GrCCDrawPathsOp> InternalMake(GrContext*, const SkIRect& clipIBounds,
+ static std::unique_ptr<GrCCDrawPathsOp> InternalMake(GrRecordingContext*,
+ const SkIRect& clipIBounds,
const SkMatrix&, const GrShape&,
float strokeDevWidth,
const SkRect& conservativeDevBounds,