Revert "Wide color support in the AA linearizing convex path renderer"

This reverts commit 4948e5578a.

Reason for revert: Speculative revert for layout tests.

Original change's description:
> Wide color support in the AA linearizing convex path renderer
> 
> Bug: skia:
> Change-Id: I6df042eb79af56b763cda1c58130dc40f6f4bbea
> Reviewed-on: https://skia-review.googlesource.com/c/179993
> Reviewed-by: Chris Dalton <csmartdalton@google.com>
> Reviewed-by: Mike Klein <mtklein@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>

TBR=mtklein@google.com,bsalomon@google.com,brianosman@google.com,csmartdalton@google.com

Change-Id: Ied756ad904901534d87f945b22599f4ba7a3d62e
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/c/180322
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
This commit is contained in:
Brian Osman 2018-12-28 17:43:50 +00:00 committed by Skia Commit-Bot
parent d7c2a383e1
commit f3e6b90461

View File

@ -83,20 +83,20 @@ GrAALinearizingConvexPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) co
static void extract_verts(const GrAAConvexTessellator& tess, static void extract_verts(const GrAAConvexTessellator& tess,
void* vertData, void* vertData,
size_t vertexStride, size_t vertexStride,
const SkPMColor4f& origColor, GrColor color,
bool wideColor,
uint16_t firstIndex, uint16_t firstIndex,
uint16_t* idxs, uint16_t* idxs,
bool tweakAlphaForCoverage) { bool tweakAlphaForCoverage) {
GrVertexWriter verts{vertData}; GrVertexWriter verts{vertData};
if (tweakAlphaForCoverage) { for (int i = 0; i < tess.numPts(); ++i) {
for (int i = 0; i < tess.numPts(); ++i) { verts.write(tess.point(i));
verts.write(tess.point(i), GrVertexColor(origColor * tess.coverage(i), wideColor)); if (tweakAlphaForCoverage) {
} SkASSERT(SkScalarRoundToInt(255.0f * tess.coverage(i)) <= 255);
} else { unsigned scale = SkScalarRoundToInt(255.0f * tess.coverage(i));
GrVertexColor color(origColor, wideColor); GrColor scaledColor = (0xff == scale) ? color : SkAlphaMulQ(color, scale);
for (int i = 0; i < tess.numPts(); ++i) { verts.write(scaledColor);
verts.write(tess.point(i), color, tess.coverage(i)); } else {
verts.write(color, tess.coverage(i));
} }
} }
@ -108,18 +108,22 @@ static void extract_verts(const GrAAConvexTessellator& tess,
static sk_sp<GrGeometryProcessor> create_lines_only_gp(const GrShaderCaps* shaderCaps, static sk_sp<GrGeometryProcessor> create_lines_only_gp(const GrShaderCaps* shaderCaps,
bool tweakAlphaForCoverage, bool tweakAlphaForCoverage,
const SkMatrix& viewMatrix, const SkMatrix& viewMatrix,
bool usesLocalCoords, bool usesLocalCoords) {
bool wideColor) {
using namespace GrDefaultGeoProcFactory; using namespace GrDefaultGeoProcFactory;
Coverage::Type coverageType = Coverage::Type coverageType;
tweakAlphaForCoverage ? Coverage::kSolid_Type : Coverage::kAttribute_Type; if (tweakAlphaForCoverage) {
coverageType = Coverage::kSolid_Type;
} else {
coverageType = Coverage::kAttribute_Type;
}
LocalCoords::Type localCoordsType = LocalCoords::Type localCoordsType =
usesLocalCoords ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type; usesLocalCoords ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type;
Color::Type colorType = return MakeForDeviceSpace(shaderCaps,
wideColor ? Color::kPremulWideColorAttribute_Type : Color::kPremulGrColorAttribute_Type; Color::kPremulGrColorAttribute_Type,
coverageType,
return MakeForDeviceSpace(shaderCaps, colorType, coverageType, localCoordsType, viewMatrix); localCoordsType,
viewMatrix);
} }
namespace { namespace {
@ -170,7 +174,6 @@ public:
bounds.outset(w, w); bounds.outset(w, w);
} }
this->setTransformedBounds(bounds, viewMatrix, HasAABloat::kYes, IsZeroArea::kNo); this->setTransformedBounds(bounds, viewMatrix, HasAABloat::kYes, IsZeroArea::kNo);
fWideColor = !SkPMColor4fFitsInBytes(color);
} }
const char* name() const override { return "AAFlatteningConvexPathOp"; } const char* name() const override { return "AAFlatteningConvexPathOp"; }
@ -240,8 +243,7 @@ private:
sk_sp<GrGeometryProcessor> gp(create_lines_only_gp(target->caps().shaderCaps(), sk_sp<GrGeometryProcessor> gp(create_lines_only_gp(target->caps().shaderCaps(),
fHelper.compatibleWithAlphaAsCoverage(), fHelper.compatibleWithAlphaAsCoverage(),
this->viewMatrix(), this->viewMatrix(),
fHelper.usesLocalCoords(), fHelper.usesLocalCoords()));
fWideColor));
if (!gp) { if (!gp) {
SkDebugf("Couldn't create a GrGeometryProcessor\n"); SkDebugf("Couldn't create a GrGeometryProcessor\n");
return; return;
@ -294,8 +296,9 @@ private:
indices = (uint16_t*) sk_realloc_throw(indices, maxIndices * sizeof(uint16_t)); indices = (uint16_t*) sk_realloc_throw(indices, maxIndices * sizeof(uint16_t));
} }
// TODO4F: Preserve float colors
extract_verts(tess, vertices + vertexStride * vertexCount, vertexStride, extract_verts(tess, vertices + vertexStride * vertexCount, vertexStride,
args.fColor, fWideColor, vertexCount, indices + indexCount, args.fColor.toBytes_RGBA(), vertexCount, indices + indexCount,
fHelper.compatibleWithAlphaAsCoverage()); fHelper.compatibleWithAlphaAsCoverage());
vertexCount += currentVertices; vertexCount += currentVertices;
indexCount += currentIndices; indexCount += currentIndices;
@ -315,7 +318,6 @@ private:
} }
fPaths.push_back_n(that->fPaths.count(), that->fPaths.begin()); fPaths.push_back_n(that->fPaths.count(), that->fPaths.begin());
fWideColor |= that->fWideColor;
return CombineResult::kMerged; return CombineResult::kMerged;
} }
@ -333,7 +335,6 @@ private:
SkSTArray<1, PathData, true> fPaths; SkSTArray<1, PathData, true> fPaths;
Helper fHelper; Helper fHelper;
bool fWideColor;
typedef GrMeshDrawOp INHERITED; typedef GrMeshDrawOp INHERITED;
}; };