Remove all remaining GrColor4f (other than gradients)
This adds SkPMColor4f conversions to/from RGBA bytes (ie GrColor).
I had previously made some free functions that did the same thing.
I'm ambivalent about which option is nicer, but wanted to have one
method, so I converted everything to use the new versions.
Bug: skia:
Change-Id: I4194c44b5bd12228075fd1932a14cf31c8d6a3c1
Reviewed-on: https://skia-review.googlesource.com/c/162560
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/bench/VertexColorSpaceBench.cpp b/bench/VertexColorSpaceBench.cpp
index 02f0920..0d14cc8 100644
--- a/bench/VertexColorSpaceBench.cpp
+++ b/bench/VertexColorSpaceBench.cpp
@@ -141,7 +141,7 @@
this->setBounds(SkRect::MakeWH(100.f, 100.f), HasAABloat::kNo, IsZeroArea::kNo);
}
- Op(GrColor4f color4f, Mode mode)
+ Op(const SkColor4f& color4f, Mode mode)
: INHERITED(ClassID())
, fMode(mode)
, fColor4f(color4f) {
@@ -174,7 +174,7 @@
size_t vertexStride = sizeof(SkPoint);
switch (fMode) {
case kFloat_Mode:
- vertexStride += sizeof(GrColor4f);
+ vertexStride += sizeof(SkColor4f);
break;
case kHalf_Mode:
case kShort_Mode:
@@ -198,7 +198,7 @@
if (kFloat_Mode == fMode) {
struct V {
SkPoint fPos;
- GrColor4f fColor;
+ SkColor4f fColor;
};
SkASSERT(sizeof(V) == vertexStride);
V* v = (V*)verts;
@@ -272,7 +272,7 @@
Mode fMode;
GrColor fColor;
- GrColor4f fColor4f;
+ SkColor4f fColor4f;
sk_sp<GrColorSpaceXform> fColorSpaceXform;
typedef GrMeshDrawOp INHERITED;
@@ -328,7 +328,7 @@
case kHalf_Mode:
case kShort_Mode:
case kFloat_Mode: {
- GrColor4f c4f = GrColor4f::FromGrColor(SkColorToUnpremulGrColor(c));
+ SkColor4f c4f = SkColor4f::FromColor(c);
c4f = xform->apply(c4f);
op = pool->allocate<Op>(c4f, fMode);
}
diff --git a/gm/bigrrectaaeffect.cpp b/gm/bigrrectaaeffect.cpp
index f3f10ae..a45337c 100644
--- a/gm/bigrrectaaeffect.cpp
+++ b/gm/bigrrectaaeffect.cpp
@@ -87,7 +87,7 @@
SkASSERT(fp);
if (fp) {
GrPaint grPaint;
- grPaint.setColor4f(GrColor4f(0, 0, 0, 1.f));
+ grPaint.setColor4f({ 0, 0, 0, 1.f });
grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc));
grPaint.addCoverageFragmentProcessor(std::move(fp));
diff --git a/gm/constcolorprocessor.cpp b/gm/constcolorprocessor.cpp
index aefba19..4dd40cf 100644
--- a/gm/constcolorprocessor.cpp
+++ b/gm/constcolorprocessor.cpp
@@ -103,7 +103,7 @@
skPaint, viewMatrix, &grPaint));
GrConstColorProcessor::InputMode mode = (GrConstColorProcessor::InputMode) m;
- SkPMColor4f color = GrColorToPMColor4f(kColors[procColor]);
+ SkPMColor4f color = SkPMColor4f::FromBytes_RGBA(kColors[procColor]);
auto fp = GrConstColorProcessor::Make(color, mode);
grPaint.addColorFragmentProcessor(std::move(fp));
diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp
index 7854bff..4b8c97f 100644
--- a/gm/convexpolyeffect.cpp
+++ b/gm/convexpolyeffect.cpp
@@ -211,7 +211,7 @@
}
GrPaint grPaint;
- grPaint.setColor4f(GrColor4f(0, 0, 0, 1.f));
+ grPaint.setColor4f({ 0, 0, 0, 1.f });
grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc));
grPaint.addCoverageFragmentProcessor(std::move(fp));
@@ -251,7 +251,7 @@
}
GrPaint grPaint;
- grPaint.setColor4f(GrColor4f(0, 0, 0, 1.f));
+ grPaint.setColor4f({ 0, 0, 0, 1.f });
grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc));
grPaint.addCoverageFragmentProcessor(std::move(fp));
diff --git a/gm/rrects.cpp b/gm/rrects.cpp
index 2fbd3b9..1f9ddeb 100644
--- a/gm/rrects.cpp
+++ b/gm/rrects.cpp
@@ -111,7 +111,7 @@
GrPaint grPaint;
grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc));
grPaint.addCoverageFragmentProcessor(std::move(fp));
- grPaint.setColor4f(GrColor4f(0, 0, 0, 1.f));
+ grPaint.setColor4f({ 0, 0, 0, 1.f });
SkRect bounds = rrect.getBounds();
bounds.outset(2.f, 2.f);
diff --git a/gm/windowrectangles.cpp b/gm/windowrectangles.cpp
index 14d10e2..e52a7bf 100644
--- a/gm/windowrectangles.cpp
+++ b/gm/windowrectangles.cpp
@@ -183,10 +183,10 @@
GrPaint paint;
if (GrFSAAType::kNone == rtc->fsaaType()) {
- paint.setColor4f(GrColor4f(0, 0.25f, 1, 1));
+ paint.setColor4f({ 0, 0.25f, 1, 1 });
this->visualizeAlphaMask(ctx, rtc, reducedClip, std::move(paint));
} else {
- paint.setColor4f(GrColor4f(1, 0.25f, 0.25f, 1));
+ paint.setColor4f({ 1, 0.25f, 0.25f, 1 });
this->visualizeStencilMask(ctx, rtc, reducedClip, std::move(paint));
}
}
diff --git a/include/core/SkColor.h b/include/core/SkColor.h
index 68ff6f7..98a186b 100644
--- a/include/core/SkColor.h
+++ b/include/core/SkColor.h
@@ -381,6 +381,14 @@
return { fR * invAlpha, fG * invAlpha, fB * invAlpha, fA };
}
}
+
+ // This produces bytes in RGBA order (eg GrColor). Impl. is the same, regardless of kAT
+ uint32_t toBytes_RGBA() const;
+ static SkRGBA4f FromBytes_RGBA(uint32_t color);
+
+ SkRGBA4f makeOpaque() const {
+ return { fR, fG, fB, 1.0f };
+ }
};
/** \struct SkColor4f
diff --git a/include/private/GrColor.h b/include/private/GrColor.h
index 88f0dbd..c28ace1 100644
--- a/include/private/GrColor.h
+++ b/include/private/GrColor.h
@@ -112,14 +112,6 @@
rgba[3] = GrColorUnpackA(color) * ONE_OVER_255;
}
-/** Converts a GrColor to an SkPMColor4f */
-static inline SkRGBA4f<kPremul_SkAlphaType> GrColorToPMColor4f(GrColor color) {
- GrColorIsPMAssert(color);
- SkRGBA4f<kPremul_SkAlphaType> result;
- GrColorToRGBAFloat(color, result.vec());
- return result;
-}
-
/** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */
static inline float GrNormalizeByteToFloat(uint8_t value) {
static const float ONE_OVER_255 = 1.f / 255.f;
diff --git a/src/atlastext/SkAtlasTextTarget.cpp b/src/atlastext/SkAtlasTextTarget.cpp
index 2a59790..fcb489e 100644
--- a/src/atlastext/SkAtlasTextTarget.cpp
+++ b/src/atlastext/SkAtlasTextTarget.cpp
@@ -105,7 +105,7 @@
void makeGrPaint(GrMaskFormat, const SkPaint& skPaint, const SkMatrix&,
GrPaint* grPaint) override {
- grPaint->setColor4f(GrColor4f::FromRGBA4f(skPaint.getColor4f().premul()));
+ grPaint->setColor4f(skPaint.getColor4f().premul());
}
GrContext* getContext() override {
diff --git a/src/core/SkColor.cpp b/src/core/SkColor.cpp
index 8dc3fdd..337dfed 100644
--- a/src/core/SkColor.cpp
+++ b/src/core/SkColor.cpp
@@ -127,6 +127,18 @@
}
template <>
+uint32_t SkPMColor4f::toBytes_RGBA() const {
+ return Sk4f_toL32(Sk4f::Load(this->vec()));
+}
+
+template <>
+SkPMColor4f SkPMColor4f::FromBytes_RGBA(uint32_t c) {
+ SkPMColor4f color;
+ Sk4f_fromL32(c).store(&color);
+ return color;
+}
+
+template <>
SkColor4f SkColor4f::Pin(float r, float g, float b, float a) {
SkColor4f c4;
Sk4f::Min(Sk4f::Max(Sk4f(r, g, b, a), Sk4f(0)), Sk4f(1)).store(c4.vec());
diff --git a/src/core/SkGlyphRunPainter.cpp b/src/core/SkGlyphRunPainter.cpp
index 90a8c3d..1d4d7da 100644
--- a/src/core/SkGlyphRunPainter.cpp
+++ b/src/core/SkGlyphRunPainter.cpp
@@ -326,12 +326,15 @@
#if SK_SUPPORT_GPU
// -- GrTextContext --------------------------------------------------------------------------------
GrColor generate_filtered_color(const SkPaint& paint, const GrColorSpaceInfo& colorSpaceInfo) {
- GrColor4f filteredColor = SkColor4fToUnpremulGrColor4f(paint.getColor4f(), colorSpaceInfo);
- if (paint.getColorFilter() != nullptr) {
- filteredColor = GrColor4f::FromRGBA4f(paint.getColorFilter()->filterColor4f(
- filteredColor.asRGBA4f<kUnpremul_SkAlphaType>(),colorSpaceInfo.colorSpace()));
+ SkColor4f filteredColor = paint.getColor4f();
+ if (auto* xform = colorSpaceInfo.colorSpaceXformFromSRGB()) {
+ filteredColor = xform->apply(filteredColor);
}
- return filteredColor.premul().toGrColor();
+ if (paint.getColorFilter() != nullptr) {
+ filteredColor = paint.getColorFilter()->filterColor4f(filteredColor,
+ colorSpaceInfo.colorSpace());
+ }
+ return filteredColor.premul().toBytes_RGBA();
}
void GrTextContext::drawGlyphRunList(
diff --git a/src/gpu/GrPaint.cpp b/src/gpu/GrPaint.cpp
index deed0d4..32b7016 100644
--- a/src/gpu/GrPaint.cpp
+++ b/src/gpu/GrPaint.cpp
@@ -70,7 +70,7 @@
return false;
}
if (kSrc == fXPFactory || (!fXPFactory && fColor.isOpaque())) {
- *constantColor = fColor.toGrColor();
+ *constantColor = fColor.toBytes_RGBA();
return true;
}
return false;
diff --git a/src/gpu/GrPaint.h b/src/gpu/GrPaint.h
index 5d87eb0..7f5b035 100644
--- a/src/gpu/GrPaint.h
+++ b/src/gpu/GrPaint.h
@@ -47,13 +47,13 @@
/**
* The initial color of the drawn primitive. Defaults to solid white.
*/
- void setColor4f(const GrColor4f& color) { fColor = color; }
- const GrColor4f& getColor4f() const { return fColor; }
+ void setColor4f(const SkPMColor4f& color) { fColor = color; }
+ const SkPMColor4f& getColor4f() const { return fColor; }
/**
* Legacy getter, until all code handles 4f directly.
*/
- GrColor getColor() const { return fColor.toGrColor(); }
+ GrColor getColor() const { return fColor.toBytes_RGBA(); }
void setXPFactory(const GrXPFactory* xpFactory) {
fXPFactory = xpFactory;
@@ -132,7 +132,7 @@
SkSTArray<4, std::unique_ptr<GrFragmentProcessor>> fColorFragmentProcessors;
SkSTArray<2, std::unique_ptr<GrFragmentProcessor>> fCoverageFragmentProcessors;
bool fTrivial = true;
- GrColor4f fColor = GrColor4f::OpaqueWhite();
+ SkPMColor4f fColor = SK_PMColor4fWHITE;
};
#endif
diff --git a/src/gpu/GrProcessorAnalysis.cpp b/src/gpu/GrProcessorAnalysis.cpp
index 1d58870..6c4ffbd 100644
--- a/src/gpu/GrProcessorAnalysis.cpp
+++ b/src/gpu/GrProcessorAnalysis.cpp
@@ -19,7 +19,7 @@
fProcessorsToEliminate = 0;
GrColor color;
if ((fKnowOutputColor = input.isConstant(&color))) {
- fLastKnownOutputColor = GrColor4f::FromGrColor(color).asRGBA4f<kPremul_SkAlphaType>();
+ fLastKnownOutputColor = SkPMColor4f::FromBytes_RGBA(color);
}
for (int i = 0; i < cnt; ++i) {
if (fUsesLocalCoords && !fKnowOutputColor && !fCompatibleWithCoverageAsAlpha &&
diff --git a/src/gpu/GrProcessorAnalysis.h b/src/gpu/GrProcessorAnalysis.h
index b7475db..6767941 100644
--- a/src/gpu/GrProcessorAnalysis.h
+++ b/src/gpu/GrProcessorAnalysis.h
@@ -124,7 +124,7 @@
*/
int initialProcessorsToEliminate(GrColor* newPipelineInputColor) const {
if (fProcessorsToEliminate > 0) {
- *newPipelineInputColor = GrColor4f::FromRGBA4f(fLastKnownOutputColor).toGrColor();
+ *newPipelineInputColor = fLastKnownOutputColor.toBytes_RGBA();
}
return fProcessorsToEliminate;
}
@@ -141,7 +141,7 @@
*/
GrProcessorAnalysisColor outputColor() const {
if (fKnowOutputColor) {
- return GrColor4f::FromRGBA4f(fLastKnownOutputColor).toGrColor();
+ return fLastKnownOutputColor.toBytes_RGBA();
}
return fIsOpaque ? GrProcessorAnalysisColor::Opaque::kYes
: GrProcessorAnalysisColor::Opaque::kNo;
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
index 6b9e3d1..44ef3cf 100644
--- a/src/gpu/GrRenderTargetContext.cpp
+++ b/src/gpu/GrRenderTargetContext.cpp
@@ -296,7 +296,7 @@
// It could be done but will take more finagling.
if (clearRect && fRenderTargetContext->caps()->performPartialClearsAsDraws()) {
GrPaint paint;
- paint.setColor4f(GrColor4f::FromGrColor(color));
+ paint.setColor4f(SkPMColor4f::FromBytes_RGBA(color));
SkRect scissor = SkRect::Make(rtRect);
std::unique_ptr<GrDrawOp> op(GrRectOpFactory::MakeNonAAFill(fRenderTargetContext->fContext,
std::move(paint), SkMatrix::I(),
@@ -345,7 +345,7 @@
} else {
if (this->caps()->performPartialClearsAsDraws()) {
GrPaint paint;
- paint.setColor4f(GrColor4f::FromGrColor(color));
+ paint.setColor4f(SkPMColor4f::FromBytes_RGBA(color));
SkRect scissor = SkRect::Make(clip.scissorRect());
std::unique_ptr<GrDrawOp> op(GrRectOpFactory::MakeNonAAFill(fContext, std::move(paint),
SkMatrix::I(), scissor,
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index f78ef18..0406aa3 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -254,14 +254,6 @@
///////////////////////////////////////////////////////////////////////////////
-GrColor4f SkColor4fToUnpremulGrColor4f(SkColor4f c, const GrColorSpaceInfo& colorSpaceInfo) {
- GrColor4f color = GrColor4f::FromRGBA4f(c);
- if (auto* xform = colorSpaceInfo.colorSpaceXformFromSRGB()) {
- color = xform->apply(color);
- }
- return color;
-}
-
SkPMColor4f SkColorToPMColor4f(SkColor c, const GrColorSpaceInfo& colorSpaceInfo) {
SkColor4f color = SkColor4f::FromColor(c);
if (auto* xform = colorSpaceInfo.colorSpaceXformFromSRGB()) {
@@ -365,7 +357,10 @@
SkBlendMode* primColorMode,
GrPaint* grPaint) {
// Convert SkPaint color to 4f format in the destination color space
- GrColor4f origColor = SkColor4fToUnpremulGrColor4f(skPaint.getColor4f(), colorSpaceInfo);
+ SkColor4f origColor = skPaint.getColor4f();
+ if (auto* xform = colorSpaceInfo.colorSpaceXformFromSRGB()) {
+ origColor = xform->apply(origColor);
+ }
const GrFPArgs fpArgs(context, &viewM, skPaint.getFilterQuality(), &colorSpaceInfo);
@@ -396,7 +391,7 @@
// The geometry processor will insert the primitive color to start the color chain, so
// the GrPaint color will be ignored.
- SkPMColor4f shaderInput = origColor.opaque().asRGBA4f<kPremul_SkAlphaType>();
+ SkPMColor4f shaderInput = origColor.makeOpaque().premul();
shaderFP = GrFragmentProcessor::OverrideInput(std::move(shaderFP), shaderInput);
shaderFP = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(shaderFP),
*primColorMode);
@@ -412,28 +407,29 @@
// No gamut conversion - paintAlpha is a (linear) alpha value, splatted to all
// color channels. It's value should be treated as the same in ANY color space.
grPaint->addColorFragmentProcessor(GrConstColorProcessor::Make(
- GrColorToPMColor4f(paintAlpha),
+ SkPMColor4f::FromBytes_RGBA(paintAlpha),
GrConstColorProcessor::InputMode::kModulateRGBA));
}
} else {
- // The shader's FP sees the paint unpremul color
- grPaint->setColor4f(origColor);
+ // The shader's FP sees the paint *unpremul* color
+ SkPMColor4f origColorAsPM = { origColor.fR, origColor.fG, origColor.fB, origColor.fA };
+ grPaint->setColor4f(origColorAsPM);
grPaint->addColorFragmentProcessor(std::move(shaderFP));
}
} else {
if (primColorMode) {
// There is a blend between the primitive color and the paint color. The blend considers
// the opaque paint color. The paint's alpha is applied to the post-blended color.
- auto processor = GrConstColorProcessor::Make(
- origColor.opaque().asRGBA4f<kPremul_SkAlphaType>(),
- GrConstColorProcessor::InputMode::kIgnore);
+ SkPMColor4f opaqueColor = origColor.makeOpaque().premul();
+ auto processor = GrConstColorProcessor::Make(opaqueColor,
+ GrConstColorProcessor::InputMode::kIgnore);
processor = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(processor),
*primColorMode);
if (processor) {
grPaint->addColorFragmentProcessor(std::move(processor));
}
- grPaint->setColor4f(origColor.opaque());
+ grPaint->setColor4f(opaqueColor);
// We can ignore origColor here - alpha is unchanged by gamma
GrColor paintAlpha = GrColorPackA4(skPaint.getAlpha());
@@ -441,7 +437,7 @@
// No gamut conversion - paintAlpha is a (linear) alpha value, splatted to all
// color channels. It's value should be treated as the same in ANY color space.
grPaint->addColorFragmentProcessor(GrConstColorProcessor::Make(
- GrColorToPMColor4f(paintAlpha),
+ SkPMColor4f::FromBytes_RGBA(paintAlpha),
GrConstColorProcessor::InputMode::kModulateRGBA));
}
} else {
@@ -454,9 +450,8 @@
SkColorFilter* colorFilter = skPaint.getColorFilter();
if (colorFilter) {
if (applyColorFilterToPaintColor) {
- grPaint->setColor4f(GrColor4f::FromRGBA4f(
- colorFilter->filterColor4f(origColor.asRGBA4f<kUnpremul_SkAlphaType>(),
- colorSpaceInfo.colorSpace())).premul());
+ grPaint->setColor4f(
+ colorFilter->filterColor4f(origColor, colorSpaceInfo.colorSpace()).premul());
} else {
auto cfFP = colorFilter->asFragmentProcessor(context, colorSpaceInfo);
if (cfFP) {
diff --git a/src/gpu/SkGr.h b/src/gpu/SkGr.h
index 2159cd9..d03ac5a 100644
--- a/src/gpu/SkGr.h
+++ b/src/gpu/SkGr.h
@@ -57,10 +57,6 @@
return GrColorPackRGBA(r, g, b, a);
}
-/** Transform an SkColor (sRGB bytes) or SkColor4f (sRGB floats) to GrColor4f
- for the specified color space info. */
-GrColor4f SkColor4fToUnpremulGrColor4f(SkColor4f, const GrColorSpaceInfo&);
-
/** Similar, but using SkPMColor4f. */
SkPMColor4f SkColorToPMColor4f(SkColor, const GrColorSpaceInfo&);
diff --git a/src/gpu/effects/GrConstColorProcessor.cpp b/src/gpu/effects/GrConstColorProcessor.cpp
index 7cf221b..82ef77a 100644
--- a/src/gpu/effects/GrConstColorProcessor.cpp
+++ b/src/gpu/effects/GrConstColorProcessor.cpp
@@ -86,7 +86,7 @@
uint32_t r = d->fRandom->nextULessThan(a + 1);
uint32_t g = d->fRandom->nextULessThan(a + 1);
uint32_t b = d->fRandom->nextULessThan(a + 1);
- color = GrColorToPMColor4f(GrColorPackRGBA(r, g, b, a));
+ color = SkPMColor4f::FromBytes_RGBA(GrColorPackRGBA(r, g, b, a));
break;
}
case 1:
@@ -94,7 +94,7 @@
break;
case 2:
uint32_t c = d->fRandom->nextULessThan(0x100);
- color = GrColorToPMColor4f(c | (c << 8) | (c << 16) | (c << 24));
+ color = SkPMColor4f::FromBytes_RGBA(c | (c << 8) | (c << 16) | (c << 24));
break;
}
InputMode mode = static_cast<InputMode>(d->fRandom->nextULessThan(kInputModeCnt));
diff --git a/src/gpu/effects/GrConstColorProcessor.fp b/src/gpu/effects/GrConstColorProcessor.fp
index fd45328..1a301ce 100644
--- a/src/gpu/effects/GrConstColorProcessor.fp
+++ b/src/gpu/effects/GrConstColorProcessor.fp
@@ -71,7 +71,7 @@
uint32_t r = d->fRandom->nextULessThan(a+1);
uint32_t g = d->fRandom->nextULessThan(a+1);
uint32_t b = d->fRandom->nextULessThan(a+1);
- color = GrColorToPMColor4f(GrColorPackRGBA(r, g, b, a));
+ color = SkPMColor4f::FromBytes_RGBA(GrColorPackRGBA(r, g, b, a));
break;
}
case 1:
@@ -79,7 +79,7 @@
break;
case 2:
uint32_t c = d->fRandom->nextULessThan(0x100);
- color = GrColorToPMColor4f(c | (c << 8) | (c << 16) | (c << 24));
+ color = SkPMColor4f::FromBytes_RGBA(c | (c << 8) | (c << 16) | (c << 24));
break;
}
InputMode mode = static_cast<InputMode>(d->fRandom->nextULessThan(kInputModeCnt));
diff --git a/src/gpu/mtl/GrMtlGpuCommandBuffer.mm b/src/gpu/mtl/GrMtlGpuCommandBuffer.mm
index 72e5c2e..b982577 100644
--- a/src/gpu/mtl/GrMtlGpuCommandBuffer.mm
+++ b/src/gpu/mtl/GrMtlGpuCommandBuffer.mm
@@ -185,7 +185,8 @@
// if we end up here from absClear, the clear bounds may be bigger than the RT proxy bounds -
// but in that case, scissor should be enabled, so this check should still succeed
SkASSERT(!clip.scissorEnabled() || clip.scissorRect().contains(fBounds));
- const auto& clear = GrColor4f::FromGrColor(color).fRGBA;
+ float clear[4];
+ GrColorToRGBAFloat(color, clear);
fRenderPassDesc.colorAttachments[0].clearColor = MTLClearColorMake(clear[0], clear[1], clear[2],
clear[3]);
fRenderPassDesc.colorAttachments[0].loadAction = MTLLoadActionClear;
@@ -241,7 +242,8 @@
static_cast<GrMtlRenderTarget*>(fRenderTarget)->mtlRenderTexture();
renderPassDesc.colorAttachments[0].slice = 0;
renderPassDesc.colorAttachments[0].level = 0;
- const auto& clearColor = GrColor4f::FromGrColor(fColorLoadAndStoreInfo.fClearColor).fRGBA;
+ float clearColor[4];
+ GrColorToRGBAFloat(fColorLoadAndStoreInfo.fClearColor, clearColor);
renderPassDesc.colorAttachments[0].clearColor =
MTLClearColorMake(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
renderPassDesc.colorAttachments[0].loadAction =
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.cpp b/src/gpu/vk/GrVkGpuCommandBuffer.cpp
index e1c795b..edd73fc 100644
--- a/src/gpu/vk/GrVkGpuCommandBuffer.cpp
+++ b/src/gpu/vk/GrVkGpuCommandBuffer.cpp
@@ -99,10 +99,10 @@
vkStencilOps);
}
- cbInfo.fColorClearValue.color.float32[0] = fClearColor.fRGBA[0];
- cbInfo.fColorClearValue.color.float32[1] = fClearColor.fRGBA[1];
- cbInfo.fColorClearValue.color.float32[2] = fClearColor.fRGBA[2];
- cbInfo.fColorClearValue.color.float32[3] = fClearColor.fRGBA[3];
+ cbInfo.fColorClearValue.color.float32[0] = fClearColor[0];
+ cbInfo.fColorClearValue.color.float32[1] = fClearColor[1];
+ cbInfo.fColorClearValue.color.float32[2] = fClearColor[2];
+ cbInfo.fColorClearValue.color.float32[3] = fClearColor[3];
if (VK_ATTACHMENT_LOAD_OP_CLEAR == fVkColorLoadOp) {
cbInfo.fBounds = SkRect::MakeWH(vkRT->width(), vkRT->height());
@@ -240,7 +240,7 @@
this->INHERITED::set(rt, origin);
- fClearColor = GrColor4f::FromGrColor(colorInfo.fClearColor);
+ GrColorToRGBAFloat(colorInfo.fClearColor, fClearColor);
get_vk_load_store_ops(colorInfo.fLoadOp, colorInfo.fStoreOp,
&fVkColorLoadOp, &fVkColorStoreOp);
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.h b/src/gpu/vk/GrVkGpuCommandBuffer.h
index c00e4ae..6aad0c2 100644
--- a/src/gpu/vk/GrVkGpuCommandBuffer.h
+++ b/src/gpu/vk/GrVkGpuCommandBuffer.h
@@ -199,7 +199,7 @@
VkAttachmentStoreOp fVkColorStoreOp;
VkAttachmentLoadOp fVkStencilLoadOp;
VkAttachmentStoreOp fVkStencilStoreOp;
- GrColor4f fClearColor;
+ float fClearColor[4];
GrVkPipelineState* fLastPipelineState;
typedef GrGpuRTCommandBuffer INHERITED;
diff --git a/src/shaders/SkPerlinNoiseShader.cpp b/src/shaders/SkPerlinNoiseShader.cpp
index d778448..23b8103 100644
--- a/src/shaders/SkPerlinNoiseShader.cpp
+++ b/src/shaders/SkPerlinNoiseShader.cpp
@@ -1442,7 +1442,7 @@
// color space of the noise. Either way, this case (and the GLSL) need to convert to
// the destination.
auto inner =
- GrConstColorProcessor::Make(GrColorToPMColor4f(0x80404040),
+ GrConstColorProcessor::Make(SkPMColor4f::FromBytes_RGBA(0x80404040),
GrConstColorProcessor::InputMode::kModulateRGBA);
return GrFragmentProcessor::MulChildByInputAlpha(std::move(inner));
}
diff --git a/tests/GrCCPRTest.cpp b/tests/GrCCPRTest.cpp
index 01ba443..6b0e162 100644
--- a/tests/GrCCPRTest.cpp
+++ b/tests/GrCCPRTest.cpp
@@ -83,7 +83,7 @@
SkASSERT(this->valid());
GrPaint paint;
- paint.setColor4f(GrColor4f(0, 1, 0, 1));
+ paint.setColor4f({ 0, 1, 0, 1 });
GrNoClip noClip;
SkIRect clipBounds = SkIRect::MakeWH(kCanvasSize, kCanvasSize);
@@ -105,7 +105,7 @@
&clipBounds, &matrix, &shape, GrAAType::kCoverage, false});
}
- void clipFullscreenRect(SkPath clipPath, GrColor4f color = GrColor4f(0, 1, 0, 1)) {
+ void clipFullscreenRect(SkPath clipPath, SkPMColor4f color = { 0, 1, 0, 1 }) {
SkASSERT(this->valid());
GrPaint paint;
diff --git a/tests/OnFlushCallbackTest.cpp b/tests/OnFlushCallbackTest.cpp
index 7dae0ed..991a219 100644
--- a/tests/OnFlushCallbackTest.cpp
+++ b/tests/OnFlushCallbackTest.cpp
@@ -369,7 +369,7 @@
rtc->clear(&r, op->color(), GrRenderTargetContext::CanClearFullscreen::kNo);
#else
GrPaint paint;
- paint.setColor4f(GrColor4f::FromGrColor(op->color()));
+ paint.setColor4f(SkPMColor4f::FromBytes_RGBA(op->color()));
std::unique_ptr<GrDrawOp> drawOp(NonAARectOp::Make(std::move(paint),
SkRect::Make(r)));
rtc->priv().testingOnly_addDrawOp(std::move(drawOp));
diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp
index 6b6b6d5..af0de50 100644
--- a/tests/ProcessorTest.cpp
+++ b/tests/ProcessorTest.cpp
@@ -231,16 +231,16 @@
// Delta must be less than 0.5 to prevent over/underflow issues with the input color
SkASSERT(delta <= 0.5);
- GrColor color = GrColorPackRGBA((uint8_t)j, (uint8_t)(i + j), (uint8_t)(2 * j - i), (uint8_t)i);
- GrColor4f color4f = GrColor4f::FromGrColor(color);
+ SkColor color = SkColorSetARGB((uint8_t)i, (uint8_t)j, (uint8_t)(i + j), (uint8_t)(2 * j - i));
+ SkColor4f color4f = SkColor4f::FromColor(color);
for (int i = 0; i < 4; i++) {
- if (color4f.fRGBA[i] > 0.5) {
- color4f.fRGBA[i] -= delta;
+ if (color4f[i] > 0.5) {
+ color4f[i] -= delta;
} else {
- color4f.fRGBA[i] += delta;
+ color4f[i] += delta;
}
}
- return color4f.premul().toGrColor();
+ return color4f.premul().toBytes_RGBA();
}
void test_draw_op(GrContext* context,
@@ -378,12 +378,12 @@
const GrColor& out1, const GrColor& out2, const GrColor& out3,
bool alphaModulation) {
// Convert to floating point, which is the number space the FP operates in (more or less)
- SkPMColor4f in1f = GrColor4f::FromGrColor(in1).asRGBA4f<kPremul_SkAlphaType>();
- SkPMColor4f in2f = GrColor4f::FromGrColor(in2).asRGBA4f<kPremul_SkAlphaType>();
- SkPMColor4f in3f = GrColor4f::FromGrColor(in3).asRGBA4f<kPremul_SkAlphaType>();
- SkPMColor4f out1f = GrColor4f::FromGrColor(out1).asRGBA4f<kPremul_SkAlphaType>();
- SkPMColor4f out2f = GrColor4f::FromGrColor(out2).asRGBA4f<kPremul_SkAlphaType>();
- SkPMColor4f out3f = GrColor4f::FromGrColor(out3).asRGBA4f<kPremul_SkAlphaType>();
+ SkPMColor4f in1f = SkPMColor4f::FromBytes_RGBA(in1);
+ SkPMColor4f in2f = SkPMColor4f::FromBytes_RGBA(in2);
+ SkPMColor4f in3f = SkPMColor4f::FromBytes_RGBA(in3);
+ SkPMColor4f out1f = SkPMColor4f::FromBytes_RGBA(out1);
+ SkPMColor4f out2f = SkPMColor4f::FromBytes_RGBA(out2);
+ SkPMColor4f out3f = SkPMColor4f::FromBytes_RGBA(out3);
// Reconstruct the output of the FP before the shader modulated its color with the input value.
// When the original input is very small, it may cause the final output color to round
@@ -402,19 +402,16 @@
// With reconstructed pre-modulated FP output, derive the expected value of fp * input for each
// of the transformed input colors.
- int mR = modulation_index(0, alphaModulation);
- int mG = modulation_index(1, alphaModulation);
- int mB = modulation_index(2, alphaModulation);
- GrColor4f expected1 = GrColor4f(fpPreModulation.fR * in1f[mR], fpPreModulation.fG * in1f[mG],
- fpPreModulation.fB * in1f[mB], fpPreModulation.fA * in1f.fA);
- GrColor4f expected2 = GrColor4f(fpPreModulation.fR * in2f[mR], fpPreModulation.fG * in2f[mG],
- fpPreModulation.fB * in2f[mB], fpPreModulation.fA * in2f.fA);
- GrColor4f expected3 = GrColor4f(fpPreModulation.fR * in3f[mR], fpPreModulation.fG * in3f[mG],
- fpPreModulation.fB * in3f[mB], fpPreModulation.fA * in3f.fA);
+ SkPMColor4f expected1 = alphaModulation ? (fpPreModulation * in1f.fA)
+ : (fpPreModulation * in1f);
+ SkPMColor4f expected2 = alphaModulation ? (fpPreModulation * in2f.fA)
+ : (fpPreModulation * in2f);
+ SkPMColor4f expected3 = alphaModulation ? (fpPreModulation * in3f.fA)
+ : (fpPreModulation * in3f);
- return fuzzy_color_equals(out1f, expected1.asRGBA4f<kPremul_SkAlphaType>()) &&
- fuzzy_color_equals(out2f, expected2.asRGBA4f<kPremul_SkAlphaType>()) &&
- fuzzy_color_equals(out3f, expected3.asRGBA4f<kPremul_SkAlphaType>());
+ return fuzzy_color_equals(out1f, expected1) &&
+ fuzzy_color_equals(out2f, expected2) &&
+ fuzzy_color_equals(out3f, expected3);
}
DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, reporter, ctxInfo) {
@@ -555,15 +552,14 @@
}
}
- SkPMColor4f input4f =
- GrColor4f::FromGrColor(input).asRGBA4f<kPremul_SkAlphaType>();
- GrColor4f output4f = GrColor4f::FromGrColor(output);
+ SkPMColor4f input4f = SkPMColor4f::FromBytes_RGBA(input);
+ SkPMColor4f output4f = SkPMColor4f::FromBytes_RGBA(output);
SkPMColor4f expected4f;
if (fp->hasConstantOutputForConstantInput(input4f, &expected4f)) {
- float rDiff = fabsf(output4f.fRGBA[0] - expected4f.fR);
- float gDiff = fabsf(output4f.fRGBA[1] - expected4f.fG);
- float bDiff = fabsf(output4f.fRGBA[2] - expected4f.fB);
- float aDiff = fabsf(output4f.fRGBA[3] - expected4f.fA);
+ float rDiff = fabsf(output4f.fR - expected4f.fR);
+ float gDiff = fabsf(output4f.fG - expected4f.fG);
+ float bDiff = fabsf(output4f.fB - expected4f.fB);
+ float aDiff = fabsf(output4f.fA - expected4f.fA);
static constexpr float kTol = 4 / 255.f;
if (rDiff > kTol || gDiff > kTol || bDiff > kTol || aDiff > kTol) {
if (constMessage.isEmpty()) {
@@ -575,9 +571,8 @@
"expected(%f, %f, %f, %f)", fp->name(),
SkTMax(rDiff, SkTMax(gDiff, SkTMax(bDiff, aDiff))), kTol,
input4f.fR, input4f.fG, input4f.fB, input4f.fA,
- output4f.fRGBA[0], output4f.fRGBA[1], output4f.fRGBA[2],
- output4f.fRGBA[3], expected4f.fR, expected4f.fG,
- expected4f.fB, expected4f.fA);
+ output4f.fR, output4f.fG, output4f.fB, output4f.fA,
+ expected4f.fR, expected4f.fG, expected4f.fB, expected4f.fA);
}
}
}