Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 4964300

Browse files
johnstiles-googleSkia Commit-Bot
authored andcommitted
Improve gencode for inlined blend and composition functions.
Using `return` instead of assigning to the output color removes an unnecessary temporary variable from the output. Change-Id: Ica31e290f8745a7309ae32c7148516d2189308ea Bug: skia:10549 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/328386 Reviewed-by: Brian Osman <[email protected]> Commit-Queue: Brian Osman <[email protected]> Auto-Submit: John Stiles <[email protected]>
1 parent cd74dfa commit 4964300

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/gpu/GrFragmentProcessor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::Compose(
425425
void emitCode(EmitArgs& args) override {
426426
SkString result = this->invokeChild(0, args);
427427
result = this->invokeChild(1, result.c_str(), args);
428-
args.fFragBuilder->codeAppendf("%s = %s;", args.fOutputColor, result.c_str());
428+
args.fFragBuilder->codeAppendf("return %s;", result.c_str());
429429
}
430430
};
431431
return new GLFP;
@@ -447,6 +447,7 @@ std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::Compose(
447447
void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {}
448448

449449
bool onIsEqual(const GrFragmentProcessor&) const override { return true; }
450+
bool usesExplicitReturn() const override { return true; }
450451

451452
SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override {
452453
SkPMColor4f color = inColor;

src/gpu/effects/GrBlendFragmentProcessor.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ class BlendFragmentProcessor : public GrFragmentProcessor {
176176
return fMode == cs.fMode;
177177
}
178178

179+
bool usesExplicitReturn() const override { return true; }
180+
179181
SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override {
180182
const auto* src = this->childProcessor(0);
181183
const auto* dst = this->childProcessor(1);
@@ -309,13 +311,15 @@ void GLBlendFragmentProcessor::emitCode(EmitArgs& args) {
309311
}
310312

311313
// Blend src and dst colors together.
312-
GrGLSLBlend::AppendMode(fragBuilder, srcColor.c_str(), dstColor.c_str(),
313-
args.fOutputColor, mode);
314+
fragBuilder->codeAppendf("return %s(%s, %s)", GrGLSLBlend::BlendFuncName(mode),
315+
srcColor.c_str(), dstColor.c_str());
314316

315317
// Reapply alpha from input color if we are doing a compose-two.
316318
if (behavior == BlendBehavior::kComposeTwoBehavior) {
317-
fragBuilder->codeAppendf("%s *= %s.a;\n", args.fOutputColor, args.fInputColor);
319+
fragBuilder->codeAppendf(" * %s.a", args.fInputColor);
318320
}
321+
322+
fragBuilder->codeAppendf(";\n");
319323
}
320324

321325
//////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)