Plumb GrColorType through all ops/processors that sample textures.
This change also allows for the remove of GrPixelConfigIsOpaque function.
Bug: skia:6718
Change-Id: I7e7b70f02d911eda67640d648fb6348091e0f55d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/248698
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/ops/GrLatticeOp.cpp b/src/gpu/ops/GrLatticeOp.cpp
index a0b0296..adcfe8c 100644
--- a/src/gpu/ops/GrLatticeOp.cpp
+++ b/src/gpu/ops/GrLatticeOp.cpp
@@ -138,24 +138,27 @@
GrPaint&& paint,
const SkMatrix& viewMatrix,
sk_sp<GrTextureProxy> proxy,
+ GrColorType srcColorType,
sk_sp<GrColorSpaceXform> colorSpaceXForm,
GrSamplerState::Filter filter,
std::unique_ptr<SkLatticeIter> iter,
const SkRect& dst) {
SkASSERT(proxy);
return Helper::FactoryHelper<NonAALatticeOp>(context, std::move(paint), viewMatrix,
- std::move(proxy),
+ std::move(proxy), srcColorType,
std::move(colorSpaceXForm), filter,
std::move(iter), dst);
}
NonAALatticeOp(Helper::MakeArgs& helperArgs, const SkPMColor4f& color,
const SkMatrix& viewMatrix, sk_sp<GrTextureProxy> proxy,
- sk_sp<GrColorSpaceXform> colorSpaceXform, GrSamplerState::Filter filter,
- std::unique_ptr<SkLatticeIter> iter, const SkRect& dst)
+ GrColorType srcColorType, sk_sp<GrColorSpaceXform> colorSpaceXform,
+ GrSamplerState::Filter filter, std::unique_ptr<SkLatticeIter> iter,
+ const SkRect& dst)
: INHERITED(ClassID())
, fHelper(helperArgs, GrAAType::kNone)
, fProxy(std::move(proxy))
+ , fSrcColorType(srcColorType)
, fColorSpaceXform(std::move(colorSpaceXform))
, fFilter(filter) {
Patch& patch = fPatches.push_back();
@@ -197,7 +200,7 @@
GrProcessorSet::Analysis finalize(
const GrCaps& caps, const GrAppliedClip* clip, bool hasMixedSampledCoverage,
GrClampType clampType) override {
- auto opaque = fPatches[0].fColor.isOpaque() && GrPixelConfigIsOpaque(fProxy->config())
+ auto opaque = fPatches[0].fColor.isOpaque() && !GrColorTypeHasAlpha(fSrcColorType)
? GrProcessorAnalysisColor::Opaque::kYes
: GrProcessorAnalysisColor::Opaque::kNo;
auto analysisColor = GrProcessorAnalysisColor(opaque);
@@ -328,6 +331,7 @@
Helper fHelper;
SkSTArray<1, Patch, true> fPatches;
sk_sp<GrTextureProxy> fProxy;
+ GrColorType fSrcColorType;
sk_sp<GrColorSpaceXform> fColorSpaceXform;
GrSamplerState::Filter fFilter;
bool fWideColor;
@@ -342,12 +346,14 @@
GrPaint&& paint,
const SkMatrix& viewMatrix,
sk_sp<GrTextureProxy> proxy,
+ GrColorType srcColorType,
sk_sp<GrColorSpaceXform> colorSpaceXform,
GrSamplerState::Filter filter,
std::unique_ptr<SkLatticeIter> iter,
const SkRect& dst) {
return NonAALatticeOp::Make(context, std::move(paint), viewMatrix, std::move(proxy),
- std::move(colorSpaceXform), filter, std::move(iter), dst);
+ srcColorType, std::move(colorSpaceXform), filter, std::move(iter),
+ dst);
}
};
@@ -466,7 +472,8 @@
GrSamplerState::Filter filter =
random->nextBool() ? GrSamplerState::Filter::kNearest : GrSamplerState::Filter::kBilerp;
return NonAALatticeOp::Make(context, std::move(paint), viewMatrix, std::move(proxy),
- std::move(csxf), filter, std::move(iter), dst);
+ GrColorType::kRGBA_8888, std::move(csxf), filter, std::move(iter),
+ dst);
}
#endif