[graphite] Use PaintParams::toKey in ExtractPaintData

Bug: skia:12701
Change-Id: I9af3c437512f2538066ddbbe576739c8873d0bc0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/503345
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This commit is contained in:
Robert Phillips 2022-02-03 12:28:22 -05:00 committed by SkCQ
parent bd712d3f97
commit 0fa0367c8a
3 changed files with 4 additions and 104 deletions

View File

@ -72,58 +72,13 @@ static const char* kNoneSkSL = "outColor = half4(0.0, 0.0, 1.0, 1.0);\n";
} // anonymous namespace
std::tuple<SkUniquePaintParamsID, std::unique_ptr<SkUniformBlock>> ExtractPaintData(
SkShaderCodeDictionary* dictionary, const PaintParams& p) {
SkPaintParamsKey key;
SkShaderCodeDictionary* dictionary,
const PaintParams& p) {
SkPaintParamsKey key;
std::unique_ptr<SkUniformBlock> block = std::make_unique<SkUniformBlock>();
// TODO: add UniformData generation to PaintParams::toKey and use it here
if (auto s = p.shader()) {
SkColor colors[GradientData::kMaxStops];
float offsets[GradientData::kMaxStops];
SkShader::GradientInfo gradInfo;
gradInfo.fColorCount = GradientData::kMaxStops;
gradInfo.fColors = colors;
gradInfo.fColorOffsets = offsets;
SkShader::GradientType type = s->asAGradient(&gradInfo);
if (gradInfo.fColorCount > GradientData::kMaxStops) {
type = SkShader::GradientType::kNone_GradientType;
}
GradientData data(type, gradInfo.fPoint, gradInfo.fRadius,
gradInfo.fTileMode, gradInfo.fColorCount,
colors, offsets);
switch (type) {
case SkShader::kLinear_GradientType: [[fallthrough]];
case SkShader::kRadial_GradientType: [[fallthrough]];
case SkShader::kSweep_GradientType: [[fallthrough]];
case SkShader::kConical_GradientType:
GradientShaderBlocks::AddToKey(SkBackend::kGraphite,
&key,
block.get(),
data);
break;
case SkShader::GradientType::kColor_GradientType: [[fallthrough]];
// TODO: The solid color gradient type should use its color, not
// the paint color
case SkShader::GradientType::kNone_GradientType: [[fallthrough]];
default:
SolidColorShaderBlock::AddToKey(SkBackend::kGraphite, &key, block.get(), p.color());
break;
}
} else {
// Solid colored paint
SolidColorShaderBlock::AddToKey(SkBackend::kGraphite, &key, block.get(), p.color());
}
if (p.blender()) {
as_BB(p.blender())->addToKey(dictionary, SkBackend::kGraphite, &key, block.get());
} else {
BlendModeBlock::AddToKey(SkBackend::kGraphite, &key, block.get(), SkBlendMode::kSrcOver);
}
p.toKey(dictionary, SkBackend::kGraphite, &key, block.get());
auto entry = dictionary->findOrCreate(key);

View File

@ -264,49 +264,6 @@ GradientData::GradientData(SkShader::GradientType type,
sk_bzero(fOffsets, sizeof(fOffsets));
}
GradientData::GradientData(SkShader::GradientType type,
SkPoint points[2],
float radii[2],
SkTileMode tm,
int numStops,
SkColor colors[kMaxStops],
float offsets[kMaxStops])
: fType(type)
, fTM(tm)
, fNumStops(numStops) {
memcpy(fPoints, points, sizeof(fPoints));
memcpy(fRadii, radii, sizeof(fRadii));
this->toColor4fs(fNumStops, colors);
this->toOffsets(fNumStops, offsets);
}
void GradientData::toColor4fs(int numColors, SkColor colors[kMaxStops]) {
if (numColors < 2 || numColors > kMaxStops) {
sk_bzero(fColor4fs, sizeof(fColor4fs));
return;
}
int i;
for (i = 0; i < numColors; ++i) {
fColor4fs[i] = SkColor4f::FromColor(colors[i]);
}
for ( ; i < kMaxStops; ++i) {
fColor4fs[i] = fColor4fs[numColors-1];
}
}
void GradientData::toOffsets(int numStops, float inputOffsets[kMaxStops]) {
if (numStops < 2 || numStops > kMaxStops) {
sk_bzero(fOffsets, sizeof(fOffsets));
return;
}
memcpy(fOffsets, inputOffsets, numStops * sizeof(float));
for (int i = numStops ; i < kMaxStops; ++i) {
fOffsets[i] = fOffsets[numStops-1];
}
}
GradientData::GradientData(SkShader::GradientType type,
SkPoint point0, SkPoint point1,
float radius0, float radius1,

View File

@ -59,14 +59,6 @@ namespace GradientShaderBlocks {
// This ctor is used when extracting information from PaintParams. It must provide
// enough data to generate the uniform data the selected code snippet will require.
GradientData(SkShader::GradientType,
SkPoint points[2],
float radii[2],
SkTileMode,
int numStops,
SkColor colors[kMaxStops],
float offsets[kMaxStops]);
GradientData(SkShader::GradientType,
SkPoint point0, SkPoint point1,
float radius0, float radius1,
@ -95,10 +87,6 @@ namespace GradientShaderBlocks {
int fNumStops;
SkColor4f fColor4fs[kMaxStops];
float fOffsets[kMaxStops];
private:
void toColor4fs(int numColors, SkColor colors[kMaxStops]);
void toOffsets(int numStops, float inputOffsets[kMaxStops]);
};
void AddToKey(SkBackend,