Revert "Fission GrSurfaceFillContext into skgpu:: and skgpu::v1:: versions"
This reverts commit af844c79d5358fd51a7f2fb439324cfd7f0798c1.
Reason for revert: breaking chrome roller
Original change's description:
> Fission GrSurfaceFillContext into skgpu:: and skgpu::v1:: versions
>
> The only really interesting parts are:
> src/gpu/SurfaceFillContext.*
> src/gpu/v1/SurfaceFillContext.*
>
> Everything else is mostly mechanical.
>
> Bug: skia:11837
> Change-Id: If2945f30dadd6ad0cccf6ff2b53e4a92b1dc6cbc
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/436099
> Commit-Queue: Robert Phillips <robertphillips@google.com>
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
TBR=robertphillips@google.com,michaelludwig@google.com,skcq-be@skia-corp.google.com.iam.gserviceaccount.com
Change-Id: I3b2d1d4a30e253a107f55dc3c5ecaaee5386e6e8
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:11837
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/436557
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Derek Sollenberger <djsollen@google.com>
diff --git a/src/core/SkCanvasPriv.cpp b/src/core/SkCanvasPriv.cpp
index 50bac7c..741709b 100644
--- a/src/core/SkCanvasPriv.cpp
+++ b/src/core/SkCanvasPriv.cpp
@@ -133,7 +133,7 @@
}
#endif // SK_GPU_V1
-skgpu::SurfaceFillContext* SkCanvasPriv::TopDeviceSurfaceFillContext(SkCanvas* canvas) {
+GrSurfaceFillContext* SkCanvasPriv::TopDeviceSurfaceFillContext(SkCanvas* canvas) {
if (auto gpuDevice = canvas->topDevice()->asGpuDevice()) {
return gpuDevice->surfaceFillContext();
}
@@ -149,7 +149,7 @@
}
#endif // SK_GPU_V1
-skgpu::SurfaceFillContext* SkCanvasPriv::TopDeviceSurfaceFillContext(SkCanvas* canvas) {
+GrSurfaceFillContext* SkCanvasPriv::TopDeviceSurfaceFillContext(SkCanvas* canvas) {
return nullptr;
}
diff --git a/src/core/SkCanvasPriv.h b/src/core/SkCanvasPriv.h
index 12d042e..6b12529 100644
--- a/src/core/SkCanvasPriv.h
+++ b/src/core/SkCanvasPriv.h
@@ -15,12 +15,8 @@
class SkWriteBuffer;
#if GR_TEST_UTILS
-namespace skgpu {
- class SurfaceFillContext;
-#if SK_GPU_V1
- namespace v1 { class SurfaceDrawContext; }
-#endif // SK_GPU_V1
-}
+namespace skgpu { namespace v1 { class SurfaceDrawContext; }}
+class GrSurfaceFillContext;
#endif // GR_TEST_UTILS
// This declaration must match the one in SkDeferredDisplayList.h
@@ -67,7 +63,7 @@
#if SK_GPU_V1
static skgpu::v1::SurfaceDrawContext* TopDeviceSurfaceDrawContext(SkCanvas*);
#endif
- static skgpu::SurfaceFillContext* TopDeviceSurfaceFillContext(SkCanvas*);
+ static GrSurfaceFillContext* TopDeviceSurfaceFillContext(SkCanvas*);
#endif // GR_TEST_UTILS
static GrRenderTargetProxy* TopDeviceTargetProxy(SkCanvas*);
diff --git a/src/core/SkGpuBlurUtils.cpp b/src/core/SkGpuBlurUtils.cpp
index 98785c7..1492b08 100644
--- a/src/core/SkGpuBlurUtils.cpp
+++ b/src/core/SkGpuBlurUtils.cpp
@@ -65,7 +65,7 @@
* Draws 'dstRect' into 'surfaceFillContext' evaluating a 1D Gaussian over 'srcView'. The src rect
* is 'dstRect' offset by 'dstToSrcOffset'. 'mode' and 'bounds' are applied to the src coords.
*/
-static void convolve_gaussian_1d(skgpu::SurfaceFillContext* sfc,
+static void convolve_gaussian_1d(GrSurfaceFillContext* sfc,
GrSurfaceProxyView srcView,
const SkIRect srcSubset,
SkIVector dstToSrcOffset,
@@ -112,7 +112,7 @@
SkASSERT(!SkGpuBlurUtils::IsEffectivelyZeroSigma(sigmaX) &&
!SkGpuBlurUtils::IsEffectivelyZeroSigma(sigmaY));
// Create the sdc with default SkSurfaceProps. Gaussian blurs will soon use a
- // SurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
+ // GrSurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
auto sdc = skgpu::v1::SurfaceDrawContext::Make(
rContext, srcColorType, std::move(finalCS), dstFit, dstBounds.size(), SkSurfaceProps(),
1, GrMipmapped::kNo, srcView.proxy()->isProtected(), srcView.origin());
@@ -167,7 +167,7 @@
// at {0, 0} in the new RTC.
//
// Create the sdc with default SkSurfaceProps. Gaussian blurs will soon use a
- // SurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
+ // GrSurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
auto dstSDC = skgpu::v1::SurfaceDrawContext::Make(
rContext, srcColorType, std::move(finalCS), fit, dstBounds.size(), SkSurfaceProps(), 1,
GrMipmapped::kNo, srcView.proxy()->isProtected(), srcView.origin());
@@ -318,7 +318,7 @@
src.reset(); // no longer needed
// Create the sdc with default SkSurfaceProps. Gaussian blurs will soon use a
- // SurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
+ // GrSurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
auto dstSDC = skgpu::v1::SurfaceDrawContext::Make(
rContext, srcColorType, std::move(colorSpace), fit, dstSize, SkSurfaceProps(), 1,
GrMipmapped::kNo, srcView.proxy()->isProtected(), srcView.origin());
@@ -520,7 +520,7 @@
// a draw that applies the tile mode.
if (!radiusX && !radiusY) {
// Create the sdc with default SkSurfaceProps. Gaussian blurs will soon use a
- // SurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
+ // GrSurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
auto result = skgpu::v1::SurfaceDrawContext::Make(rContext,
srcColorType,
std::move(colorSpace),
@@ -606,7 +606,7 @@
int padY = mode == SkTileMode::kClamp ||
(mode == SkTileMode::kDecal && sigmaY > kMaxSigma) ? 1 : 0;
// Create the sdc with default SkSurfaceProps. Gaussian blurs will soon use a
- // SurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
+ // GrSurfaceFillContext, at which point the SkSurfaceProps won't exist anymore.
auto rescaledSDC = skgpu::v1::SurfaceDrawContext::Make(
srcCtx->recordingContext(),
colorInfo.colorType(),
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp
index 856ae95..3b60bde 100644
--- a/src/core/SkImageFilter.cpp
+++ b/src/core/SkImageFilter.cpp
@@ -25,9 +25,9 @@
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrRecordingContextPriv.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#endif
#include <atomic>
diff --git a/src/core/SkRuntimeEffect.cpp b/src/core/SkRuntimeEffect.cpp
index 8d1e6d1..636740e 100644
--- a/src/core/SkRuntimeEffect.cpp
+++ b/src/core/SkRuntimeEffect.cpp
@@ -36,8 +36,7 @@
#include "src/gpu/GrColorInfo.h"
#include "src/gpu/GrFPArgs.h"
#include "src/gpu/GrImageInfo.h"
-#include "src/gpu/GrRecordingContextPriv.h"
-#include "src/gpu/SurfaceFillContext.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/effects/GrMatrixEffect.h"
#include "src/gpu/effects/GrSkSLFP.h"
#include "src/image/SkImage_Gpu.h"
diff --git a/src/effects/imagefilters/SkArithmeticImageFilter.cpp b/src/effects/imagefilters/SkArithmeticImageFilter.cpp
index ba8b4db..a946aef 100644
--- a/src/effects/imagefilters/SkArithmeticImageFilter.cpp
+++ b/src/effects/imagefilters/SkArithmeticImageFilter.cpp
@@ -20,9 +20,9 @@
#include "src/core/SkRuntimeEffectPriv.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrRecordingContextPriv.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrSkSLFP.h"
#include "src/gpu/effects/GrTextureEffect.h"
#endif
diff --git a/src/effects/imagefilters/SkBlendImageFilter.cpp b/src/effects/imagefilters/SkBlendImageFilter.cpp
index 5d1a5c9..2df3231 100644
--- a/src/effects/imagefilters/SkBlendImageFilter.cpp
+++ b/src/effects/imagefilters/SkBlendImageFilter.cpp
@@ -22,9 +22,9 @@
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrRecordingContextPriv.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrTextureEffect.h"
#endif
diff --git a/src/effects/imagefilters/SkDisplacementMapImageFilter.cpp b/src/effects/imagefilters/SkDisplacementMapImageFilter.cpp
index a096425..907d044 100644
--- a/src/effects/imagefilters/SkDisplacementMapImageFilter.cpp
+++ b/src/effects/imagefilters/SkDisplacementMapImageFilter.cpp
@@ -19,10 +19,10 @@
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrRecordingContextPriv.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTexture.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrTextureEffect.h"
#include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
diff --git a/src/effects/imagefilters/SkLightingImageFilter.cpp b/src/effects/imagefilters/SkLightingImageFilter.cpp
index 5283117..e756322 100644
--- a/src/effects/imagefilters/SkLightingImageFilter.cpp
+++ b/src/effects/imagefilters/SkLightingImageFilter.cpp
@@ -22,10 +22,10 @@
#include "src/gpu/GrFragmentProcessor.h"
#include "src/gpu/GrPaint.h"
#include "src/gpu/GrRecordingContextPriv.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTexture.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrTextureEffect.h"
#include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
@@ -438,7 +438,7 @@
private:
#if SK_SUPPORT_GPU
- void drawRect(skgpu::SurfaceFillContext*,
+ void drawRect(GrSurfaceFillContext*,
GrSurfaceProxyView srcView,
const SkMatrix& matrix,
const SkIRect& dstRect,
@@ -454,7 +454,7 @@
};
#if SK_SUPPORT_GPU
-void SkLightingImageFilterInternal::drawRect(skgpu::SurfaceFillContext* sfc,
+void SkLightingImageFilterInternal::drawRect(GrSurfaceFillContext* sfc,
GrSurfaceProxyView srcView,
const SkMatrix& matrix,
const SkIRect& dstRect,
diff --git a/src/effects/imagefilters/SkMorphologyImageFilter.cpp b/src/effects/imagefilters/SkMorphologyImageFilter.cpp
index 4e2d862..326207d 100644
--- a/src/effects/imagefilters/SkMorphologyImageFilter.cpp
+++ b/src/effects/imagefilters/SkMorphologyImageFilter.cpp
@@ -19,10 +19,10 @@
#include "include/gpu/GrRecordingContext.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrRecordingContextPriv.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTexture.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrTextureEffect.h"
#include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
@@ -357,7 +357,7 @@
}
#endif
-static void apply_morphology_rect(skgpu::SurfaceFillContext* sfc,
+static void apply_morphology_rect(GrSurfaceFillContext* sfc,
GrSurfaceProxyView view,
SkAlphaType srcAlphaType,
const SkIRect& srcRect,
@@ -376,7 +376,7 @@
sfc->fillRectToRectWithFP(srcRect, dstRect, std::move(fp));
}
-static void apply_morphology_rect_no_bounds(skgpu::SurfaceFillContext* sfc,
+static void apply_morphology_rect_no_bounds(GrSurfaceFillContext* sfc,
GrSurfaceProxyView view,
SkAlphaType srcAlphaType,
const SkIRect& srcRect,
@@ -389,7 +389,7 @@
sfc->fillRectToRectWithFP(srcRect, dstRect, std::move(fp));
}
-static void apply_morphology_pass(skgpu::SurfaceFillContext* sfc,
+static void apply_morphology_pass(GrSurfaceFillContext* sfc,
GrSurfaceProxyView view,
SkAlphaType srcAlphaType,
const SkIRect& srcRect,
diff --git a/src/gpu/BaseDevice.h b/src/gpu/BaseDevice.h
index 8c6a60c..4ed6406 100644
--- a/src/gpu/BaseDevice.h
+++ b/src/gpu/BaseDevice.h
@@ -12,12 +12,8 @@
#include "include/private/GrTypesPriv.h"
class GrRenderTargetProxy;
-namespace skgpu {
- class SurfaceFillContext;
-#if SK_GPU_V1
- namespace v1 { class SurfaceDrawContext; }
-#endif // SK_GPU_V1
-}
+namespace skgpu { namespace v1 { class SurfaceDrawContext; }}
+class GrSurfaceFillContext;
class GrSurfaceProxyView;
// NOTE: when not defined, SkGpuDevice extends SkBaseDevice directly and manages its clip stack
@@ -57,7 +53,7 @@
virtual skgpu::v1::SurfaceDrawContext* surfaceDrawContext() { return nullptr; }
#endif
- virtual skgpu::SurfaceFillContext* surfaceFillContext() = 0;
+ virtual GrSurfaceFillContext* surfaceFillContext() = 0;
GrRenderTargetProxy* targetProxy();
GrRecordingContext* recordingContext() const { return fContext.get(); }
diff --git a/src/gpu/GrDirectContextPriv.cpp b/src/gpu/GrDirectContextPriv.cpp
index 2bfef8a..1ffd631 100644
--- a/src/gpu/GrDirectContextPriv.cpp
+++ b/src/gpu/GrDirectContextPriv.cpp
@@ -16,10 +16,10 @@
#include "src/gpu/GrMemoryPool.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrSurfaceContext.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTexture.h"
#include "src/gpu/GrThreadSafePipelineBuilder.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrSkSLFP.h"
#include "src/gpu/effects/GrTextureEffect.h"
#include "src/gpu/text/GrAtlasManager.h"
diff --git a/src/gpu/GrRecordingContextPriv.cpp b/src/gpu/GrRecordingContextPriv.cpp
index 4c61390..b0bdd4a 100644
--- a/src/gpu/GrRecordingContextPriv.cpp
+++ b/src/gpu/GrRecordingContextPriv.cpp
@@ -18,7 +18,7 @@
#include "src/gpu/v1/SurfaceDrawContext_v1.h"
#endif
#if SK_GPU_V2
-#include "src/gpu/SurfaceFillContext.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/v2/Device_v2.h"
#endif
@@ -133,10 +133,10 @@
info.refColorSpace(),
SkSurfaceProps());
} else {
- sc = std::make_unique<skgpu::v1::SurfaceFillContext>(this->context(),
- std::move(readView),
- std::move(writeView),
- info);
+ sc = std::make_unique<GrSurfaceFillContext>(this->context(),
+ std::move(readView),
+ std::move(writeView),
+ info);
}
} else {
sc = std::make_unique<GrSurfaceContext>(this->context(), std::move(readView), info);
@@ -149,13 +149,13 @@
return nullptr;
}
-std::unique_ptr<skgpu::SurfaceFillContext> GrRecordingContextPriv::makeSFC(GrImageInfo info,
- SkBackingFit fit,
- int sampleCount,
- GrMipmapped mipmapped,
- GrProtected isProtected,
- GrSurfaceOrigin origin,
- SkBudgeted budgeted) {
+std::unique_ptr<GrSurfaceFillContext> GrRecordingContextPriv::makeSFC(GrImageInfo info,
+ SkBackingFit fit,
+ int sampleCount,
+ GrMipmapped mipmapped,
+ GrProtected isProtected,
+ GrSurfaceOrigin origin,
+ SkBudgeted budgeted) {
#if GR_TEST_UTILS
if (this->options().fUseSkGpuV2 == GrContextOptions::Enable::kYes) {
@@ -197,32 +197,30 @@
GrSurfaceProxyView readView( proxy, origin, readSwizzle);
GrSurfaceProxyView writeView(std::move(proxy), origin, writeSwizzle);
- std::unique_ptr<skgpu::SurfaceFillContext> sfc;
- sfc = std::make_unique<skgpu::v1::SurfaceFillContext>(this->context(),
- std::move(readView),
- std::move(writeView),
- info.colorInfo());
- sfc->discard();
- return sfc;
+ auto fillContext = std::make_unique<GrSurfaceFillContext>(this->context(),
+ std::move(readView),
+ std::move(writeView),
+ info.colorInfo());
+ fillContext->discard();
+ return fillContext;
#endif
}
return nullptr;
}
-std::unique_ptr<skgpu::SurfaceFillContext> GrRecordingContextPriv::makeSFC(
- SkAlphaType alphaType,
- sk_sp<SkColorSpace> colorSpace,
- SkISize dimensions,
- SkBackingFit fit,
- const GrBackendFormat& format,
- int sampleCount,
- GrMipmapped mipmapped,
- GrProtected isProtected,
- GrSwizzle readSwizzle,
- GrSwizzle writeSwizzle,
- GrSurfaceOrigin origin,
- SkBudgeted budgeted) {
+std::unique_ptr<GrSurfaceFillContext> GrRecordingContextPriv::makeSFC(SkAlphaType alphaType,
+ sk_sp<SkColorSpace> cs,
+ SkISize dimensions,
+ SkBackingFit fit,
+ const GrBackendFormat& format,
+ int sampleCount,
+ GrMipmapped mipmapped,
+ GrProtected isProtected,
+ GrSwizzle readSwizzle,
+ GrSwizzle writeSwizzle,
+ GrSurfaceOrigin origin,
+ SkBudgeted budgeted) {
#if GR_TEST_UTILS
if (this->context()->options().fUseSkGpuV2 == GrContextOptions::Enable::kYes) {
@@ -238,7 +236,7 @@
SkASSERT(format.isValid() && format.backend() == fContext->backend());
if (alphaType == kPremul_SkAlphaType || alphaType == kOpaque_SkAlphaType) {
return skgpu::v1::SurfaceDrawContext::Make(this->context(),
- std::move(colorSpace),
+ std::move(cs),
fit,
dimensions,
format,
@@ -263,23 +261,22 @@
if (!proxy) {
return nullptr;
}
- GrImageInfo info(GrColorType::kUnknown, alphaType, std::move(colorSpace), dimensions);
+ GrImageInfo info(GrColorType::kUnknown, alphaType, std::move(cs), dimensions);
GrSurfaceProxyView readView( proxy, origin, readSwizzle);
GrSurfaceProxyView writeView(std::move(proxy), origin, writeSwizzle);
- std::unique_ptr<skgpu::SurfaceFillContext> sfc;
- sfc = std::make_unique<skgpu::v1::SurfaceFillContext>(this->context(),
- std::move(readView),
- std::move(writeView),
- info.colorInfo());
- sfc->discard();
- return sfc;
+ auto fillContext = std::make_unique<GrSurfaceFillContext>(this->context(),
+ std::move(readView),
+ std::move(writeView),
+ info.colorInfo());
+ fillContext->discard();
+ return fillContext;
#endif
}
return nullptr;
}
-std::unique_ptr<skgpu::SurfaceFillContext> GrRecordingContextPriv::makeSFCWithFallback(
+std::unique_ptr<GrSurfaceFillContext> GrRecordingContextPriv::makeSFCWithFallback(
GrImageInfo info,
SkBackingFit fit,
int sampleCount,
@@ -330,7 +327,7 @@
return nullptr;
}
-std::unique_ptr<skgpu::SurfaceFillContext> GrRecordingContextPriv::makeSFCFromBackendTexture(
+std::unique_ptr<GrSurfaceFillContext> GrRecordingContextPriv::makeSFCFromBackendTexture(
GrColorInfo info,
const GrBackendTexture& tex,
int sampleCount,
@@ -378,10 +375,10 @@
GrSurfaceProxyView readView( proxy, origin, readSwizzle);
GrSurfaceProxyView writeView(std::move(proxy), origin, writeSwizzle);
- return std::make_unique<skgpu::v1::SurfaceFillContext>(this->context(),
- std::move(readView),
- std::move(writeView),
- std::move(info));
+ return std::make_unique<GrSurfaceFillContext>(this->context(),
+ std::move(readView),
+ std::move(writeView),
+ std::move(info));
#endif
}
diff --git a/src/gpu/GrRecordingContextPriv.h b/src/gpu/GrRecordingContextPriv.h
index 82add47..56b15c6 100644
--- a/src/gpu/GrRecordingContextPriv.h
+++ b/src/gpu/GrRecordingContextPriv.h
@@ -17,7 +17,6 @@
class GrImageInfo;
class GrSwizzle;
class SkDeferredDisplayList;
-namespace skgpu { class SurfaceFillContext; }
/** Class that exposes methods on GrRecordingContext that are only intended for use internal to
Skia. This class is purely a privileged window into GrRecordingContext. It should never have
@@ -134,38 +133,37 @@
* Uses GrImageInfo's color type to pick the default texture format. Will return a
* SurfaceDrawContext if possible.
*/
- std::unique_ptr<skgpu::SurfaceFillContext> makeSFC(
- GrImageInfo,
- SkBackingFit = SkBackingFit::kExact,
- int sampleCount = 1,
- GrMipmapped = GrMipmapped::kNo,
- GrProtected = GrProtected::kNo,
- GrSurfaceOrigin = kTopLeft_GrSurfaceOrigin,
- SkBudgeted = SkBudgeted::kYes);
+ std::unique_ptr<GrSurfaceFillContext> makeSFC(GrImageInfo,
+ SkBackingFit = SkBackingFit::kExact,
+ int sampleCount = 1,
+ GrMipmapped = GrMipmapped::kNo,
+ GrProtected = GrProtected::kNo,
+ GrSurfaceOrigin = kTopLeft_GrSurfaceOrigin,
+ SkBudgeted = SkBudgeted::kYes);
/**
- * Makes a custom configured SurfaceFillContext where the caller specifies the specific
+ * Makes a custom configured GrSurfaceFillContext where the caller specifies the specific
* texture format and swizzles. The color type will be kUnknown. Returns a SurfaceDrawContext
* if possible.
*/
- std::unique_ptr<skgpu::SurfaceFillContext> makeSFC(SkAlphaType,
- sk_sp<SkColorSpace>,
- SkISize dimensions,
- SkBackingFit,
- const GrBackendFormat&,
- int sampleCount,
- GrMipmapped,
- GrProtected,
- GrSwizzle readSwizzle,
- GrSwizzle writeSwizzle,
- GrSurfaceOrigin,
- SkBudgeted);
+ std::unique_ptr<GrSurfaceFillContext> makeSFC(SkAlphaType,
+ sk_sp<SkColorSpace>,
+ SkISize dimensions,
+ SkBackingFit,
+ const GrBackendFormat&,
+ int sampleCount,
+ GrMipmapped,
+ GrProtected,
+ GrSwizzle readSwizzle,
+ GrSwizzle writeSwizzle,
+ GrSurfaceOrigin,
+ SkBudgeted);
/**
* Like the above but uses GetFallbackColorTypeAndFormat to find a fallback color type (and
* compatible format) if the passed GrImageInfo's color type is not renderable.
*/
- std::unique_ptr<skgpu::SurfaceFillContext> makeSFCWithFallback(
+ std::unique_ptr<GrSurfaceFillContext> makeSFCWithFallback(
GrImageInfo,
SkBackingFit = SkBackingFit::kExact,
int sampleCount = 1,
@@ -175,11 +173,11 @@
SkBudgeted = SkBudgeted::kYes);
/**
- * Creates a SurfaceFillContext from an existing GrBackendTexture. The GrColorInfo's color
+ * Creates a GrSurfaceFillContext from an existing GrBackendTexture. The GrColorInfo's color
* type must be compatible with backend texture's format or this will fail. All formats are
* considered compatible with kUnknown. Returns a SurfaceDrawContext if possible.
*/
- std::unique_ptr<skgpu::SurfaceFillContext> makeSFCFromBackendTexture(
+ std::unique_ptr<GrSurfaceFillContext> makeSFCFromBackendTexture(
GrColorInfo,
const GrBackendTexture&,
int sampleCount,
diff --git a/src/gpu/GrRenderTargetProxy.h b/src/gpu/GrRenderTargetProxy.h
index c351981..73989a1 100644
--- a/src/gpu/GrRenderTargetProxy.h
+++ b/src/gpu/GrRenderTargetProxy.h
@@ -19,9 +19,9 @@
class GrResourceProvider;
// GrArenas matches the lifetime of a single frame. It is created and held on the
-// SurfaceFillContext's RenderTargetProxy with the first call to get an arena. Each GrOpsTask
+// GrSurfaceFillContext's RenderTargetProxy with the first call to get an arena. Each GrOpsTask
// takes a ref on it to keep the arenas alive. When the first GrOpsTask's onExecute() is
-// completed, the arena ref on the SurfaceFillContext's RenderTargetProxy is nulled out so that
+// completed, the arena ref on the GrSurfaceFillContext's RenderTargetProxy is nulled out so that
// any new GrOpsTasks will create and ref a new set of arenas.
class GrArenas : public SkNVRefCnt<GrArenas> {
public:
diff --git a/src/gpu/GrSurfaceContext.cpp b/src/gpu/GrSurfaceContext.cpp
index b884b9e..72c95f5 100644
--- a/src/gpu/GrSurfaceContext.cpp
+++ b/src/gpu/GrSurfaceContext.cpp
@@ -24,8 +24,8 @@
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrResourceProvider.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrBicubicEffect.h"
#include "src/gpu/effects/GrTextureEffect.h"
@@ -640,7 +640,7 @@
return;
}
- std::unique_ptr<skgpu::SurfaceFillContext> tempFC;
+ std::unique_ptr<GrSurfaceFillContext> tempFC;
int x = srcRect.fLeft;
int y = srcRect.fTop;
if (needsRescale) {
@@ -1106,11 +1106,11 @@
this->origin());
}
-std::unique_ptr<skgpu::SurfaceFillContext> GrSurfaceContext::rescale(const GrImageInfo& info,
- GrSurfaceOrigin origin,
- SkIRect srcRect,
- RescaleGamma rescaleGamma,
- RescaleMode rescaleMode) {
+std::unique_ptr<GrSurfaceFillContext> GrSurfaceContext::rescale(const GrImageInfo& info,
+ GrSurfaceOrigin origin,
+ SkIRect srcRect,
+ RescaleGamma rescaleGamma,
+ RescaleMode rescaleMode) {
auto sfc = fContext->priv().makeSFCWithFallback(info,
SkBackingFit::kExact,
1,
@@ -1127,7 +1127,7 @@
return sfc;
}
-bool GrSurfaceContext::rescaleInto(skgpu::SurfaceFillContext* dst,
+bool GrSurfaceContext::rescaleInto(GrSurfaceFillContext* dst,
SkIRect dstRect,
SkIRect srcRect,
RescaleGamma rescaleGamma,
@@ -1167,8 +1167,8 @@
// Within a rescaling pass A is the input (if not null) and B is the output. At the end of the
// pass B is moved to A. If 'this' is the input on the first pass then tempA is null.
- std::unique_ptr<skgpu::SurfaceFillContext> tempA;
- std::unique_ptr<skgpu::SurfaceFillContext> tempB;
+ std::unique_ptr<GrSurfaceFillContext> tempA;
+ std::unique_ptr<GrSurfaceFillContext> tempB;
// Assume we should ignore the rescale linear request if the surface has no color space since
// it's unclear how we'd linearize from an unknown color space.
@@ -1220,7 +1220,7 @@
}
auto input = tempA ? tempA.get() : this;
sk_sp<GrColorSpaceXform> xform;
- skgpu::SurfaceFillContext* stepDst;
+ GrSurfaceFillContext* stepDst;
SkIRect stepDstRect;
if (nextDims == finalSize) {
stepDst = dst;
diff --git a/src/gpu/GrSurfaceContext.h b/src/gpu/GrSurfaceContext.h
index 0a8c7c3..069c562 100644
--- a/src/gpu/GrSurfaceContext.h
+++ b/src/gpu/GrSurfaceContext.h
@@ -26,7 +26,8 @@
class GrRenderTargetProxy;
class GrSingleOwner;
class GrSurface;
-namespace skgpu { class SurfaceFillContext; }
+namespace skgpu { namespace v1 { class SurfaceDrawContext; }}
+class GrSurfaceFillContext;
class GrSurfaceProxy;
class GrTextureProxy;
struct SkIPoint;
@@ -157,7 +158,7 @@
return fReadView.asRenderTargetProxyRef();
}
- virtual skgpu::SurfaceFillContext* asFillContext() { return nullptr; }
+ virtual GrSurfaceFillContext* asFillContext() { return nullptr; }
/**
* Rescales the contents of srcRect. The gamma in which the rescaling occurs is controlled by
@@ -166,17 +167,17 @@
* different size than srcRect. Though, it could be relaxed to allow non-scaling color
* conversions.
*/
- std::unique_ptr<skgpu::SurfaceFillContext> rescale(const GrImageInfo& info,
- GrSurfaceOrigin,
- SkIRect srcRect,
- SkImage::RescaleGamma,
- SkImage::RescaleMode);
+ std::unique_ptr<GrSurfaceFillContext> rescale(const GrImageInfo& info,
+ GrSurfaceOrigin,
+ SkIRect srcRect,
+ SkImage::RescaleGamma,
+ SkImage::RescaleMode);
/**
* Like the above but allows the caller ot specify a destination fill context and
* rect within that context. The dst rect must be contained by the dst or this will fail.
*/
- bool rescaleInto(skgpu::SurfaceFillContext* dst,
+ bool rescaleInto(GrSurfaceFillContext* dst,
SkIRect dstRect,
SkIRect srcRect,
SkImage::RescaleGamma,
diff --git a/src/gpu/v1/SurfaceFillContext.cpp b/src/gpu/GrSurfaceFillContext.cpp
similarity index 78%
rename from src/gpu/v1/SurfaceFillContext.cpp
rename to src/gpu/GrSurfaceFillContext.cpp
index 839feaa..8d9a439 100644
--- a/src/gpu/v1/SurfaceFillContext.cpp
+++ b/src/gpu/GrSurfaceFillContext.cpp
@@ -5,7 +5,7 @@
* found in the LICENSE file.
*/
-#include "src/gpu/v1/SurfaceFillContext_v1.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "include/private/GrImageContext.h"
#include "src/gpu/GrDstProxyView.h"
@@ -15,7 +15,6 @@
#include "src/gpu/geometry/GrRect.h"
#include "src/gpu/ops/GrClearOp.h"
#include "src/gpu/ops/GrFillRectOp.h"
-#include "src/gpu/v1/SurfaceDrawContext_v1.h"
#define ASSERT_SINGLE_OWNER GR_ASSERT_SINGLE_OWNER(this->singleOwner())
#define RETURN_IF_ABANDONED if (fContext->abandoned()) { return; }
@@ -31,33 +30,31 @@
GrDrawingManager* fDrawingManager;
};
-namespace skgpu::v1 {
-
// In MDB mode the reffing of the 'getLastOpsTask' call's result allows in-progress
-// GrOpsTask to be picked up and added to by SurfaceFillContext lower in the call
+// GrOpsTask to be picked up and added to by GrSurfaceFillContext lower in the call
// stack. When this occurs with a closed GrOpsTask, a new one will be allocated
-// when the SurfaceFillContext attempts to use it (via getOpsTask).
-SurfaceFillContext::SurfaceFillContext(GrRecordingContext* rContext,
- GrSurfaceProxyView readView,
- GrSurfaceProxyView writeView,
- const GrColorInfo& colorInfo,
- bool flushTimeOpsTask)
- : skgpu::SurfaceFillContext(rContext,
- std::move(readView),
- std::move(writeView),
- std::move(colorInfo))
+// when the GrSurfaceFillContext attempts to use it (via getOpsTask).
+GrSurfaceFillContext::GrSurfaceFillContext(GrRecordingContext* context,
+ GrSurfaceProxyView readView,
+ GrSurfaceProxyView writeView,
+ const GrColorInfo& colorInfo,
+ bool flushTimeOpsTask)
+ : GrSurfaceContext(context, std::move(readView), std::move(colorInfo))
+ , fWriteView(std::move(writeView))
, fFlushTimeOpsTask(flushTimeOpsTask) {
- fOpsTask = sk_ref_sp(rContext->priv().drawingManager()->getLastOpsTask(this->asSurfaceProxy()));
+ fOpsTask = sk_ref_sp(context->priv().drawingManager()->getLastOpsTask(this->asSurfaceProxy()));
+ SkASSERT(this->asSurfaceProxy() == fWriteView.proxy());
+ SkASSERT(this->origin() == fWriteView.origin());
SkDEBUGCODE(this->validate();)
}
-void SurfaceFillContext::fillRectWithFP(const SkIRect& dstRect,
- std::unique_ptr<GrFragmentProcessor> fp) {
+void GrSurfaceFillContext::fillRectWithFP(const SkIRect& dstRect,
+ std::unique_ptr<GrFragmentProcessor> fp) {
ASSERT_SINGLE_OWNER
RETURN_IF_ABANDONED
SkDEBUGCODE(this->validate();)
- GR_CREATE_TRACE_MARKER_CONTEXT("v1::SurfaceFillContext", "fillRectWithFP", fContext);
+ GR_CREATE_TRACE_MARKER_CONTEXT("GrSurfaceFillContext", "fillRectWithFP", fContext);
AutoCheckFlush acf(this->drawingManager());
@@ -69,7 +66,7 @@
this->addDrawOp(std::move(op));
}
-void SurfaceFillContext::addDrawOp(GrOp::Owner owner) {
+void GrSurfaceFillContext::addDrawOp(GrOp::Owner owner) {
GrDrawOp* op = static_cast<GrDrawOp*>(owner.get());
GrClampType clampType = GrColorTypeClampType(this->colorInfo().colorType());
auto clip = GrAppliedClip::Disabled();
@@ -97,7 +94,7 @@
caps);
}
-void SurfaceFillContext::ClearToGrPaint(std::array<float, 4> color, GrPaint* paint) {
+void GrSurfaceFillContext::ClearToGrPaint(std::array<float, 4> color, GrPaint* paint) {
paint->setColor4f({color[0], color[1], color[2], color[3]});
if (color[3] == 1.f) {
// Can just rely on the src-over blend mode to do the right thing.
@@ -110,7 +107,7 @@
}
}
-void SurfaceFillContext::addOp(GrOp::Owner op) {
+void GrSurfaceFillContext::addOp(GrOp::Owner op) {
GrDrawingManager* drawingMgr = this->drawingManager();
this->getOpsTask()->addOp(drawingMgr,
std::move(op),
@@ -118,7 +115,7 @@
*this->caps());
}
-GrOpsTask* SurfaceFillContext::getOpsTask() {
+GrOpsTask* GrSurfaceFillContext::getOpsTask() {
ASSERT_SINGLE_OWNER
SkDEBUGCODE(this->validate();)
@@ -129,11 +126,7 @@
return fOpsTask.get();
}
-sk_sp<GrRenderTask> SurfaceFillContext::refRenderTask() {
- return sk_ref_sp(this->getOpsTask());
-}
-
-GrOpsTask* SurfaceFillContext::replaceOpsTask() {
+GrOpsTask* GrSurfaceFillContext::replaceOpsTask() {
sk_sp<GrOpsTask> newOpsTask = this->drawingManager()->newOpsTask(
this->writeSurfaceView(), this->arenas(), fFlushTimeOpsTask);
this->willReplaceOpsTask(fOpsTask.get(), newOpsTask.get());
@@ -142,31 +135,31 @@
}
#ifdef SK_DEBUG
-void SurfaceFillContext::onValidate() const {
+void GrSurfaceFillContext::onValidate() const {
if (fOpsTask && !fOpsTask->isClosed()) {
SkASSERT(this->drawingManager()->getLastRenderTask(fWriteView.proxy()) == fOpsTask.get());
}
}
#endif
-void SurfaceFillContext::discard() {
+void GrSurfaceFillContext::discard() {
ASSERT_SINGLE_OWNER
RETURN_IF_ABANDONED
SkDEBUGCODE(this->validate();)
- GR_CREATE_TRACE_MARKER_CONTEXT("v1::SurfaceFillContext", "discard", fContext);
+ GR_CREATE_TRACE_MARKER_CONTEXT("GrSurfaceFillContext", "discard", fContext);
AutoCheckFlush acf(this->drawingManager());
this->getOpsTask()->discard();
}
-void SurfaceFillContext::internalClear(const SkIRect* scissor,
- std::array<float, 4> color,
- bool upgradePartialToFull) {
+void GrSurfaceFillContext::internalClear(const SkIRect* scissor,
+ std::array<float, 4> color,
+ bool upgradePartialToFull) {
ASSERT_SINGLE_OWNER
RETURN_IF_ABANDONED
SkDEBUGCODE(this->validate();)
- GR_CREATE_TRACE_MARKER_CONTEXT("v1::SurfaceFillContext", "clear", fContext);
+ GR_CREATE_TRACE_MARKER_CONTEXT("GrSurfaceFillContext", "clear", fContext);
// There are three ways clears are handled: load ops, native clears, and draws. Load ops are
// only for fullscreen clears; native clears can be fullscreen or with scissors if the backend
@@ -227,9 +220,9 @@
}
}
-bool SurfaceFillContext::blitTexture(GrSurfaceProxyView view,
- const SkIRect& srcRect,
- const SkIPoint& dstPoint) {
+bool GrSurfaceFillContext::blitTexture(GrSurfaceProxyView view,
+ const SkIRect& srcRect,
+ const SkIPoint& dstPoint) {
SkASSERT(view.asTextureProxy());
SkIRect clippedSrcRect;
SkIPoint clippedDstPoint;
@@ -248,5 +241,3 @@
this->fillRectToRectWithFP(srcRectF, dstRect, std::move(fp));
return true;
}
-
-} // namespace skgpu::v1
diff --git a/src/gpu/GrSurfaceFillContext.h b/src/gpu/GrSurfaceFillContext.h
new file mode 100644
index 0000000..cbd268a
--- /dev/null
+++ b/src/gpu/GrSurfaceFillContext.h
@@ -0,0 +1,206 @@
+/*
+ * Copyright 2020 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrSurfaceFillContext_DEFINED
+#define GrSurfaceFillContext_DEFINED
+
+#include "include/core/SkSize.h"
+#include "include/private/GrTypesPriv.h"
+#include "src/gpu/GrImageInfo.h"
+#include "src/gpu/GrOpsTask.h"
+#include "src/gpu/GrSurfaceContext.h"
+#include "src/gpu/GrSwizzle.h"
+#include "src/gpu/effects/GrMatrixEffect.h"
+
+#include <array>
+#include <tuple>
+
+class GrFragmentProcessor;
+class GrImageContext;
+class GrOp;
+class GrBackendFormat;
+class GrRecordingContext;
+class GrSurfaceProxyView;
+class SkColorSpace;
+
+class GrSurfaceFillContext : public GrSurfaceContext {
+public:
+ GrSurfaceFillContext(GrRecordingContext*,
+ GrSurfaceProxyView readView,
+ GrSurfaceProxyView writeView,
+ const GrColorInfo&,
+ bool flushTimeOpsTask = false);
+
+ GrSurfaceFillContext* asFillContext() override { return this; }
+
+ /**
+ * Provides a performance hint that the render target's contents are allowed
+ * to become undefined.
+ */
+ void discard();
+
+ /**
+ * Clear the rect of the render target to the given color.
+ * @param rect the rect to clear to
+ * @param color the color to clear to.
+ */
+ template <SkAlphaType AlphaType>
+ void clear(const SkIRect& rect, const SkRGBA4f<AlphaType>& color) {
+ this->internalClear(&rect, this->adjustColorAlphaType(color));
+ }
+
+ /** Clears the entire render target to the color. */
+ template <SkAlphaType AlphaType> void clear(const SkRGBA4f<AlphaType>& color) {
+ this->internalClear(nullptr, this->adjustColorAlphaType(color));
+ }
+
+ /**
+ * Clear at minimum the pixels within 'scissor', but is allowed to clear the full render target
+ * if that is the more performant option.
+ */
+ template <SkAlphaType AlphaType>
+ void clearAtLeast(const SkIRect& scissor, const SkRGBA4f<AlphaType>& color) {
+ this->internalClear(&scissor,
+ this->adjustColorAlphaType(color),
+ /* upgrade to full */ true);
+ }
+
+ /** Fills 'dstRect' with 'fp' */
+ void fillRectWithFP(const SkIRect& dstRect, std::unique_ptr<GrFragmentProcessor> fp);
+
+ /**
+ * A convenience version of fillRectWithFP that applies a coordinate transformation via
+ * GrMatrixEffect.
+ */
+ void fillRectWithFP(const SkIRect& dstRect,
+ const SkMatrix& localMatrix,
+ std::unique_ptr<GrFragmentProcessor> fp) {
+ fp = GrMatrixEffect::Make(localMatrix, std::move(fp));
+ this->fillRectWithFP(dstRect, std::move(fp));
+ }
+
+ /** Fills 'dstRect' with 'fp' using a local matrix that maps 'srcRect' to 'dstRect' */
+ void fillRectToRectWithFP(const SkRect& srcRect,
+ const SkIRect& dstRect,
+ std::unique_ptr<GrFragmentProcessor> fp) {
+ SkMatrix lm = SkMatrix::RectToRect(SkRect::Make(dstRect), srcRect);
+ this->fillRectWithFP(dstRect, lm, std::move(fp));
+ }
+
+ /** Fills 'dstRect' with 'fp' using a local matrix that maps 'srcRect' to 'dstRect' */
+ void fillRectToRectWithFP(const SkIRect& srcRect,
+ const SkIRect& dstRect,
+ std::unique_ptr<GrFragmentProcessor> fp) {
+ this->fillRectToRectWithFP(SkRect::Make(srcRect), dstRect, std::move(fp));
+ }
+
+ /** Fills the entire render target with the passed FP. */
+ void fillWithFP(std::unique_ptr<GrFragmentProcessor> fp) {
+ this->fillRectWithFP(SkIRect::MakeSize(fWriteView.proxy()->dimensions()), std::move(fp));
+ }
+
+ /**
+ * A convenience version of fillWithFP that applies a coordinate transformation via
+ * GrMatrixEffect and fills the entire render target.
+ */
+ void fillWithFP(const SkMatrix& localMatrix, std::unique_ptr<GrFragmentProcessor> fp) {
+ this->fillRectWithFP(
+ SkIRect::MakeSize(fWriteView.proxy()->dimensions()), localMatrix, std::move(fp));
+ }
+
+ /**
+ * Draws the src texture with no matrix. The dstRect is the dstPoint with the width and height
+ * of the srcRect. The srcRect and dstRect are clipped to the bounds of the src and dst surfaces
+ * respectively.
+ */
+ bool blitTexture(GrSurfaceProxyView view, const SkIRect& srcRect, const SkIPoint& dstPoint);
+
+ GrOpsTask* getOpsTask();
+
+ int numSamples() const { return this->asRenderTargetProxy()->numSamples(); }
+ bool wrapsVkSecondaryCB() const { return this->asRenderTargetProxy()->wrapsVkSecondaryCB(); }
+
+ SkArenaAlloc* arenaAlloc() { return this->arenas()->arenaAlloc(); }
+ GrSubRunAllocator* subRunAlloc() { return this->arenas()->subRunAlloc(); }
+
+#if GR_TEST_UTILS
+ GrOpsTask* testingOnly_PeekLastOpsTask() { return fOpsTask.get(); }
+#endif
+
+ const GrSurfaceProxyView& writeSurfaceView() const { return fWriteView; }
+
+protected:
+ /**
+ * Creates a constant color paint for a clear, using src-over if possible to improve batching.
+ */
+ static void ClearToGrPaint(std::array<float, 4> color, GrPaint* paint);
+
+ void addOp(GrOp::Owner);
+
+ GrOpsTask* replaceOpsTask();
+
+private:
+ sk_sp<GrArenas> arenas() { return fWriteView.proxy()->asRenderTargetProxy()->arenas(); }
+
+ template <SkAlphaType AlphaType>
+ static std::array<float, 4> ConvertColor(SkRGBA4f<AlphaType> color);
+
+ template <SkAlphaType AlphaType>
+ std::array<float, 4> adjustColorAlphaType(SkRGBA4f<AlphaType> color) const;
+
+ /** Override to be notified in subclass before the current ops task is replaced. */
+ virtual void willReplaceOpsTask(GrOpsTask* prevTask, GrOpsTask* nextTask) {}
+
+ /**
+ * Override to be called to participate in the decision to discard all previous ops if a
+ * fullscreen clear occurs.
+ */
+ virtual GrOpsTask::CanDiscardPreviousOps canDiscardPreviousOpsOnFullClear() const {
+ return GrOpsTask::CanDiscardPreviousOps::kYes;
+ }
+
+ void internalClear(const SkIRect* scissor,
+ std::array<float, 4> color,
+ bool upgradePartialToFull = false);
+
+ void addDrawOp(GrOp::Owner);
+
+ SkDEBUGCODE(void onValidate() const override;)
+
+ GrSurfaceProxyView fWriteView;
+
+ // The GrOpsTask can be closed by some other surface context that has picked it up. For this
+ // reason, the GrOpsTask should only ever be accessed via 'getOpsTask'.
+ sk_sp<GrOpsTask> fOpsTask;
+
+ bool fFlushTimeOpsTask;
+
+ using INHERITED = GrSurfaceContext;
+};
+
+template<>
+inline std::array<float, 4> GrSurfaceFillContext::ConvertColor<kPremul_SkAlphaType>(
+ SkPMColor4f color) {
+ return color.unpremul().array();
+}
+
+template<>
+inline std::array<float, 4> GrSurfaceFillContext::ConvertColor<kUnpremul_SkAlphaType>(
+ SkColor4f color) {
+ return color.premul().array();
+}
+
+template <SkAlphaType AlphaType>
+std::array<float, 4> GrSurfaceFillContext::adjustColorAlphaType(SkRGBA4f<AlphaType> color) const {
+ if (AlphaType == kUnknown_SkAlphaType ||
+ this->colorInfo().alphaType() == kUnknown_SkAlphaType) {
+ return color.array();
+ }
+ return (AlphaType == this->colorInfo().alphaType()) ? color.array() : ConvertColor(color);
+}
+
+#endif
diff --git a/src/gpu/GrSurfaceProxy.cpp b/src/gpu/GrSurfaceProxy.cpp
index b19f527..082b561 100644
--- a/src/gpu/GrSurfaceProxy.cpp
+++ b/src/gpu/GrSurfaceProxy.cpp
@@ -17,9 +17,9 @@
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrResourceProvider.h"
#include "src/gpu/GrSurface.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTexture.h"
#include "src/gpu/GrTextureRenderTargetProxy.h"
-#include "src/gpu/SurfaceFillContext.h"
#ifdef SK_DEBUG
#include "include/gpu/GrDirectContext.h"
@@ -310,7 +310,7 @@
GrSurfaceProxyView view(std::move(src), origin, GrSwizzle::RGBA());
if (dstContext && dstContext->blitTexture(std::move(view), srcRect, dstPoint)) {
if (outTask) {
- *outTask = dstContext->refRenderTask();
+ *outTask = sk_ref_sp(dstContext->getOpsTask());
}
return dstContext->asSurfaceProxyRef();
}
diff --git a/src/gpu/SurfaceFillContext.cpp b/src/gpu/SurfaceFillContext.cpp
deleted file mode 100644
index eab314d..0000000
--- a/src/gpu/SurfaceFillContext.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2021 Google LLC
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "src/gpu/SurfaceFillContext.h"
-
-#include "src/gpu/effects/GrMatrixEffect.h"
-
-namespace skgpu {
-
-void SurfaceFillContext::fillRectWithFP(const SkIRect& dstRect,
- const SkMatrix& localMatrix,
- std::unique_ptr<GrFragmentProcessor> fp) {
- fp = GrMatrixEffect::Make(localMatrix, std::move(fp));
- this->fillRectWithFP(dstRect, std::move(fp));
-}
-
-} // namespace skgpu
diff --git a/src/gpu/SurfaceFillContext.h b/src/gpu/SurfaceFillContext.h
deleted file mode 100644
index a24c8de..0000000
--- a/src/gpu/SurfaceFillContext.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2021 Google LLC
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SurfaceFillContext_DEFINED
-#define SurfaceFillContext_DEFINED
-
-#include "src/gpu/GrSurfaceContext.h"
-
-namespace skgpu {
-
-class SurfaceFillContext : public GrSurfaceContext {
-public:
-
- SurfaceFillContext* asFillContext() override { return this; }
-
- /**
- * Provides a performance hint that the render target's contents are allowed
- * to become undefined.
- */
- virtual void discard() = 0;
-
- /**
- * Clear the rect of the render target to the given color.
- * @param rect the rect to clear to
- * @param color the color to clear to.
- */
- template <SkAlphaType AlphaType>
- void clear(const SkIRect& rect, const SkRGBA4f<AlphaType>& color) {
- this->internalClear(&rect, this->adjustColorAlphaType(color));
- }
-
- /** Clears the entire render target to the color. */
- template <SkAlphaType AlphaType> void clear(const SkRGBA4f<AlphaType>& color) {
- this->internalClear(nullptr, this->adjustColorAlphaType(color));
- }
-
- /**
- * Clear at minimum the pixels within 'scissor', but is allowed to clear the full render target
- * if that is the more performant option.
- */
- template <SkAlphaType AlphaType>
- void clearAtLeast(const SkIRect& scissor, const SkRGBA4f<AlphaType>& color) {
- this->internalClear(&scissor,
- this->adjustColorAlphaType(color),
- /* upgrade to full */ true);
- }
-
- /** Fills 'dstRect' with 'fp' */
- virtual void fillRectWithFP(const SkIRect& dstRect, std::unique_ptr<GrFragmentProcessor>) = 0;
-
- /**
- * A convenience version of fillRectWithFP that applies a coordinate transformation via
- * GrMatrixEffect.
- */
- void fillRectWithFP(const SkIRect& dstRect,
- const SkMatrix& localMatrix,
- std::unique_ptr<GrFragmentProcessor>);
-
- /** Fills 'dstRect' with 'fp' using a local matrix that maps 'srcRect' to 'dstRect' */
- void fillRectToRectWithFP(const SkRect& srcRect,
- const SkIRect& dstRect,
- std::unique_ptr<GrFragmentProcessor> fp) {
- SkMatrix lm = SkMatrix::RectToRect(SkRect::Make(dstRect), srcRect);
- this->fillRectWithFP(dstRect, lm, std::move(fp));
- }
-
- /** Fills 'dstRect' with 'fp' using a local matrix that maps 'srcRect' to 'dstRect' */
- void fillRectToRectWithFP(const SkIRect& srcRect,
- const SkIRect& dstRect,
- std::unique_ptr<GrFragmentProcessor> fp) {
- this->fillRectToRectWithFP(SkRect::Make(srcRect), dstRect, std::move(fp));
- }
-
- /** Fills the entire render target with the passed FP. */
- void fillWithFP(std::unique_ptr<GrFragmentProcessor> fp) {
- this->fillRectWithFP(SkIRect::MakeSize(fWriteView.proxy()->dimensions()), std::move(fp));
- }
-
- /**
- * A convenience version of fillWithFP that applies a coordinate transformation via
- * GrMatrixEffect and fills the entire render target.
- */
- void fillWithFP(const SkMatrix& localMatrix, std::unique_ptr<GrFragmentProcessor> fp) {
- this->fillRectWithFP(SkIRect::MakeSize(fWriteView.proxy()->dimensions()),
- localMatrix,
- std::move(fp));
- }
-
- /**
- * Draws the src texture with no matrix. The dstRect is the dstPoint with the width and height
- * of the srcRect. The srcRect and dstRect are clipped to the bounds of the src and dst surfaces
- * respectively.
- */
- virtual bool blitTexture(GrSurfaceProxyView,
- const SkIRect& srcRect,
- const SkIPoint& dstPoint) = 0;
-
- virtual sk_sp<GrRenderTask> refRenderTask() = 0;
-
-protected:
- SurfaceFillContext(GrRecordingContext* rContext,
- GrSurfaceProxyView readView,
- GrSurfaceProxyView writeView,
- const GrColorInfo& colorInfo)
- : GrSurfaceContext(rContext, std::move(readView), colorInfo)
- , fWriteView(std::move(writeView)) {
- SkASSERT(this->asSurfaceProxy() == fWriteView.proxy());
- SkASSERT(this->origin() == fWriteView.origin());
- }
-
- template <SkAlphaType AlphaType>
- static std::array<float, 4> ConvertColor(SkRGBA4f<AlphaType> color);
-
- template <SkAlphaType AlphaType>
- std::array<float, 4> adjustColorAlphaType(SkRGBA4f<AlphaType> color) const;
-
- GrSurfaceProxyView fWriteView;
-
-private:
- virtual void internalClear(const SkIRect* scissor,
- std::array<float, 4> color,
- bool upgradePartialToFull = false) = 0;
-
- using INHERITED = GrSurfaceContext;
-};
-
-template<>
-inline std::array<float, 4> SurfaceFillContext::ConvertColor<kPremul_SkAlphaType>(
- SkPMColor4f color) {
- return color.unpremul().array();
-}
-
-template<>
-inline std::array<float, 4> SurfaceFillContext::ConvertColor<kUnpremul_SkAlphaType>(
- SkColor4f color) {
- return color.premul().array();
-}
-
-template <SkAlphaType AlphaType>
-std::array<float, 4> SurfaceFillContext::adjustColorAlphaType(SkRGBA4f<AlphaType> color) const {
- if (AlphaType == kUnknown_SkAlphaType ||
- this->colorInfo().alphaType() == kUnknown_SkAlphaType) {
- return color.array();
- }
- return (AlphaType == this->colorInfo().alphaType()) ? color.array() : ConvertColor(color);
-}
-
-} // namespace skgpu
-
-#endif // SurfaceFillContext_DEFINED
diff --git a/src/gpu/v1/Device.cpp b/src/gpu/v1/Device.cpp
index b7230b0..ff80195 100644
--- a/src/gpu/v1/Device.cpp
+++ b/src/gpu/v1/Device.cpp
@@ -291,7 +291,7 @@
return fSurfaceDrawContext.get();
}
-skgpu::SurfaceFillContext* Device::surfaceFillContext() {
+GrSurfaceFillContext* Device::surfaceFillContext() {
ASSERT_SINGLE_OWNER
return fSurfaceDrawContext.get();
}
diff --git a/src/gpu/v1/Device_v1.h b/src/gpu/v1/Device_v1.h
index f21d889..11e6191 100644
--- a/src/gpu/v1/Device_v1.h
+++ b/src/gpu/v1/Device_v1.h
@@ -106,7 +106,7 @@
SurfaceDrawContext* surfaceDrawContext() override;
const SurfaceDrawContext* surfaceDrawContext() const;
- skgpu::SurfaceFillContext* surfaceFillContext() override;
+ GrSurfaceFillContext* surfaceFillContext() override;
// set all pixels to 0
void clearAll();
diff --git a/src/gpu/v1/SurfaceDrawContext.cpp b/src/gpu/v1/SurfaceDrawContext.cpp
index d4b4c7f..8c8bdd8 100644
--- a/src/gpu/v1/SurfaceDrawContext.cpp
+++ b/src/gpu/v1/SurfaceDrawContext.cpp
@@ -294,11 +294,11 @@
sk_sp<SkColorSpace> colorSpace,
const SkSurfaceProps& surfaceProps,
bool flushTimeOpsTask)
- : SurfaceFillContext(rContext,
- std::move(readView),
- std::move(writeView),
- {colorType, kPremul_SkAlphaType, std::move(colorSpace)},
- flushTimeOpsTask)
+ : GrSurfaceFillContext(rContext,
+ std::move(readView),
+ std::move(writeView),
+ {colorType, kPremul_SkAlphaType, std::move(colorSpace)},
+ flushTimeOpsTask)
, fSurfaceProps(surfaceProps)
, fCanUseDynamicMSAA(
(fSurfaceProps.flags() & SkSurfaceProps::kDynamicMSAA_Flag) &&
diff --git a/src/gpu/v1/SurfaceDrawContext_v1.h b/src/gpu/v1/SurfaceDrawContext_v1.h
index 9cb51f0..17b6a47 100644
--- a/src/gpu/v1/SurfaceDrawContext_v1.h
+++ b/src/gpu/v1/SurfaceDrawContext_v1.h
@@ -18,10 +18,10 @@
#include "src/gpu/GrOpsTask.h"
#include "src/gpu/GrPaint.h"
#include "src/gpu/GrRenderTargetProxy.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrSurfaceProxyView.h"
#include "src/gpu/GrXferProcessor.h"
#include "src/gpu/geometry/GrQuad.h"
-#include "src/gpu/v1/SurfaceFillContext_v1.h"
class GrBackendSemaphore;
class GrClip;
@@ -60,7 +60,7 @@
/**
* A helper object to orchestrate commands (draws, etc...) for GrSurfaces that are GrRenderTargets.
*/
-class SurfaceDrawContext : public SurfaceFillContext {
+class SurfaceDrawContext : public GrSurfaceFillContext {
public:
static std::unique_ptr<SurfaceDrawContext> Make(GrRecordingContext*,
GrColorType,
@@ -707,7 +707,7 @@
bool fPreserveOpsOnFullClear_TestingOnly = false;
#endif
SkGlyphRunListPainter fGlyphPainter;
- using INHERITED = SurfaceFillContext;
+ using INHERITED = GrSurfaceFillContext;
};
} // namespace skgpu::v1
diff --git a/src/gpu/v1/SurfaceFillContext_v1.h b/src/gpu/v1/SurfaceFillContext_v1.h
deleted file mode 100644
index 8961584..0000000
--- a/src/gpu/v1/SurfaceFillContext_v1.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2020 Google LLC
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SurfaceFillContext_v1_DEFINED
-#define SurfaceFillContext_v1_DEFINED
-
-#include "include/core/SkSize.h"
-#include "include/private/GrTypesPriv.h"
-#include "src/gpu/GrImageInfo.h"
-#include "src/gpu/GrOpsTask.h"
-#include "src/gpu/GrSwizzle.h"
-#include "src/gpu/SurfaceFillContext.h"
-#include "src/gpu/effects/GrMatrixEffect.h"
-
-#include <array>
-#include <tuple>
-
-class GrFragmentProcessor;
-class GrImageContext;
-class GrOp;
-class GrBackendFormat;
-class GrRecordingContext;
-class GrSurfaceProxyView;
-class SkColorSpace;
-
-namespace skgpu::v1 {
-
-class SurfaceFillContext : public skgpu::SurfaceFillContext {
-public:
- SurfaceFillContext(GrRecordingContext*,
- GrSurfaceProxyView readView,
- GrSurfaceProxyView writeView,
- const GrColorInfo&,
- bool flushTimeOpsTask = false);
-
- void discard() override;
-
- void fillRectWithFP(const SkIRect& dstRect, std::unique_ptr<GrFragmentProcessor> fp) override;
-
- bool blitTexture(GrSurfaceProxyView view,
- const SkIRect& srcRect,
- const SkIPoint& dstPoint) override;
-
- GrOpsTask* getOpsTask();
- sk_sp<GrRenderTask> refRenderTask() override;
-
- int numSamples() const { return this->asRenderTargetProxy()->numSamples(); }
- bool wrapsVkSecondaryCB() const { return this->asRenderTargetProxy()->wrapsVkSecondaryCB(); }
-
- SkArenaAlloc* arenaAlloc() { return this->arenas()->arenaAlloc(); }
- GrSubRunAllocator* subRunAlloc() { return this->arenas()->subRunAlloc(); }
-
-#if GR_TEST_UTILS
- GrOpsTask* testingOnly_PeekLastOpsTask() { return fOpsTask.get(); }
-#endif
-
- const GrSurfaceProxyView& writeSurfaceView() const { return fWriteView; }
-
-protected:
- /**
- * Creates a constant color paint for a clear, using src-over if possible to improve batching.
- */
- static void ClearToGrPaint(std::array<float, 4> color, GrPaint* paint);
-
- void addOp(GrOp::Owner);
-
- GrOpsTask* replaceOpsTask();
-
-private:
- sk_sp<GrArenas> arenas() { return fWriteView.proxy()->asRenderTargetProxy()->arenas(); }
-
- /** Override to be notified in subclass before the current ops task is replaced. */
- virtual void willReplaceOpsTask(GrOpsTask* prevTask, GrOpsTask* nextTask) {}
-
- /**
- * Override to be called to participate in the decision to discard all previous ops if a
- * fullscreen clear occurs.
- */
- virtual GrOpsTask::CanDiscardPreviousOps canDiscardPreviousOpsOnFullClear() const {
- return GrOpsTask::CanDiscardPreviousOps::kYes;
- }
-
- void internalClear(const SkIRect* scissor,
- std::array<float, 4> color,
- bool upgradePartialToFull = false) override;
-
- void addDrawOp(GrOp::Owner);
-
- SkDEBUGCODE(void onValidate() const override;)
-
- // The GrOpsTask can be closed by some other surface context that has picked it up. For this
- // reason, the GrOpsTask should only ever be accessed via 'getOpsTask'.
- sk_sp<GrOpsTask> fOpsTask;
-
- bool fFlushTimeOpsTask;
-
- using INHERITED = skgpu::SurfaceFillContext;
-};
-
-} // namespace skgpu::v1
-
-#endif // SurfaceFillContext_v1_DEFINED
diff --git a/src/gpu/v2/Device.cpp b/src/gpu/v2/Device.cpp
index a6be7b8..bb1f365 100644
--- a/src/gpu/v2/Device.cpp
+++ b/src/gpu/v2/Device.cpp
@@ -26,7 +26,7 @@
GrSurfaceProxyView Device::readSurfaceView() { return {}; }
-skgpu::SurfaceFillContext* Device::surfaceFillContext() {
+GrSurfaceFillContext* Device::surfaceFillContext() {
return nullptr;
}
diff --git a/src/gpu/v2/Device_v2.h b/src/gpu/v2/Device_v2.h
index 6270c2c..f3f1a6e 100644
--- a/src/gpu/v2/Device_v2.h
+++ b/src/gpu/v2/Device_v2.h
@@ -44,7 +44,7 @@
GrSurfaceProxyView readSurfaceView() override;
- skgpu::SurfaceFillContext* surfaceFillContext() override;
+ GrSurfaceFillContext* surfaceFillContext() override;
bool wait(int numSemaphores,
const GrBackendSemaphore* waitSemaphores,
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index d4f6073..14689ab 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -33,11 +33,11 @@
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrSemaphore.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTexture.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/GrTextureProxyPriv.h"
#include "src/gpu/GrYUVATextureProxies.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrTextureEffect.h"
#include "src/gpu/gl/GrGLTexture.h"
diff --git a/src/image/SkImage_GpuBase.h b/src/image/SkImage_GpuBase.h
index d5331af..1392dde 100644
--- a/src/image/SkImage_GpuBase.h
+++ b/src/image/SkImage_GpuBase.h
@@ -17,6 +17,7 @@
class GrColorSpaceXform;
class GrDirectContext;
class GrImageContext;
+class GrSurfaceFillContext;
class SkColorSpace;
class SkImage_GpuBase : public SkImage_Base {
diff --git a/src/image/SkImage_GpuYUVA.cpp b/src/image/SkImage_GpuYUVA.cpp
index b3924cd..6fe926c 100644
--- a/src/image/SkImage_GpuYUVA.cpp
+++ b/src/image/SkImage_GpuYUVA.cpp
@@ -22,8 +22,8 @@
#include "src/gpu/GrImageContextPriv.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrBicubicEffect.h"
#include "src/gpu/effects/GrYUVtoRGBEffect.h"
#include "src/image/SkImage_Gpu.h"
diff --git a/src/image/SkImage_Lazy.cpp b/src/image/SkImage_Lazy.cpp
index bed740a..6763df9 100644
--- a/src/image/SkImage_Lazy.cpp
+++ b/src/image/SkImage_Lazy.cpp
@@ -28,9 +28,9 @@
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrSamplerState.h"
+#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrYUVATextureProxies.h"
#include "src/gpu/SkGr.h"
-#include "src/gpu/SurfaceFillContext.h"
#include "src/gpu/effects/GrYUVtoRGBEffect.h"
#endif