Switch to float vertex colors for wide color vertex attribs
Bug: chromium:985500
Change-Id: Iab73405728dc64c816f736e95b00a23e11fd4888
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/258565
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/ops/GrQuadPerEdgeAA.cpp b/src/gpu/ops/GrQuadPerEdgeAA.cpp
index da70bf6..e1a3616 100644
--- a/src/gpu/ops/GrQuadPerEdgeAA.cpp
+++ b/src/gpu/ops/GrQuadPerEdgeAA.cpp
@@ -40,7 +40,7 @@
// save color
if (spec.hasVertexColors()) {
- bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kHalf;
+ bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kFloat;
vb->write(GrVertexColor(
color * (mode == GrQuadPerEdgeAA::CoverageMode::kWithColor ? coverage[i] : 1.f),
wide));
@@ -85,7 +85,7 @@
// accumulate local coords conservatively (paint not trivial), and then after analysis realize
// the processors don't need local coordinates.
- bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kHalf;
+ bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kFloat;
for (int i = 0; i < 4; ++i) {
// If this is not coverage-with-alpha, make sure coverage == 1 so it doesn't do anything
SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor ||
@@ -130,7 +130,7 @@
SkASSERT(!spec.hasDomain());
SkASSERT(localQuad);
- bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kHalf;
+ bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kFloat;
for (int i = 0; i < 4; ++i) {
// If this is not coverage-with-alpha, make sure coverage == 1 so it doesn't do anything
SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor ||
@@ -203,7 +203,7 @@
SkASSERT(spec.hasDomain());
SkASSERT(localQuad);
- bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kHalf;
+ bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kFloat;
for (int i = 0; i < 4; ++i) {
// If this is not coverage-with-alpha, make sure coverage == 1 so it doesn't do anything
SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor ||
@@ -248,13 +248,12 @@
}
}
-// This is a more elaborate version of SkPMColor4fNeedsWideColor that allows "no color" for white
-ColorType MinColorType(SkPMColor4f color, GrClampType clampType, const GrCaps& caps) {
+// This is a more elaborate version of fitsInBytes() that allows "no color" for white
+ColorType MinColorType(SkPMColor4f color) {
if (color == SK_PMColor4fWHITE) {
return ColorType::kNone;
} else {
- return SkPMColor4fNeedsWideColor(color, clampType, caps) ? ColorType::kHalf
- : ColorType::kByte;
+ return color.fitsInBytes() ? ColorType::kByte : ColorType::kFloat;
}
}
@@ -509,8 +508,8 @@
if (ColorType::kByte == this->colorType()) {
count += GrVertexAttribTypeSize(kUByte4_norm_GrVertexAttribType);
- } else if (ColorType::kHalf == this->colorType()) {
- count += GrVertexAttribTypeSize(kHalf4_GrVertexAttribType);
+ } else if (ColorType::kFloat == this->colorType()) {
+ count += GrVertexAttribTypeSize(kFloat4_GrVertexAttribType);
}
if (this->hasDomain()) {
@@ -788,10 +787,8 @@
fLocalCoord = {"localCoord", kFloat2_GrVertexAttribType, kFloat2_GrSLType};
} // else localDim == 0 and attribute remains uninitialized
- if (ColorType::kByte == spec.colorType()) {
- fColor = {"color", kUByte4_norm_GrVertexAttribType, kHalf4_GrSLType};
- } else if (ColorType::kHalf == spec.colorType()) {
- fColor = {"color", kHalf4_GrVertexAttribType, kHalf4_GrSLType};
+ if (spec.hasVertexColors()) {
+ fColor = MakeColorAttribute("color", ColorType::kFloat == spec.colorType());
}
if (spec.hasDomain()) {