23 half4 main(half4 inColor) { return inColor; }
27 // WTB matrix/vector inputs.
28 uniform half m0 , m1 , m2 , m3 , m4 ,
29 m5 , m6 , m7 , m8 , m9 ,
30 m10, m11, m12, m13, m14,
31 m15, m16, m17, m18, m19;
32 half4 main(half4 inColor) {
33 half4 c = unpremul(inColor);
35 half4x4 m = half4x4(m0, m5, m10, m15,
39 c = m * c + half4 (m4, m9, m14, m19);
48 0.2126f, 0.7152f, 0.0722f, 0.0f, 0.0f,
49 0.2126f, 0.7152f, 0.0722f, 0.0f, 0.0f,
50 0.2126f, 0.7152f, 0.0722f, 0.0f, 0.0f,
51 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
62 return effect->makeColorFilter(
81 static constexpr const char* kSuffix[] = {
87 fName.
printf(
"filteredrect_%s", kSuffix[t]);
113 const SkRect r = { 0, 0, 256, 256 };
114 for (
int i = 0; i < loops; ++i) {
134class ColorFilterBench final :
public Benchmark {
138 explicit ColorFilterBench(
const char* suffix, Factory f)
144 return fName.c_str();
154 surface->getCanvas()->drawImage(
157 fImage =
surface->makeImageSnapshot();
158 fColorFilter = fFactory();
163 p.setColorFilter(fColorFilter);
165 for (
int i = 0; i < loops; ++i) {
177static constexpr float kColorMatrix[] = {
178 0.3f, 0.3f, 0.0f, 0.0f, 0.3f,
179 0.0f, 0.3f, 0.3f, 0.0f, 0.3f,
180 0.0f, 0.0f, 0.3f, 0.3f, 0.3f,
181 0.3f, 0.0f, 0.3f, 0.3f, 0.0f,
188DEF_BENCH(
return new ColorFilterBench(
"blend_src",
192DEF_BENCH(
return new ColorFilterBench(
"linear_to_srgb",
196DEF_BENCH(
return new ColorFilterBench(
"matrix_rgba",
200DEF_BENCH(
return new ColorFilterBench(
"compose_src",
210DEF_BENCH(
return new ColorFilterBench(
"highcontrast", []() {
212 false, SkHighContrastConfig::InvertStyle::kInvertLightness, 0.2f
215DEF_BENCH(
return new ColorFilterBench(
"overdraw", []() {
217 0x80FF0000, 0x8000FF00, 0x800000FF, 0x80FFFF00, 0x8000FFFF, 0x80FF00FF,
221DEF_BENCH(
return new ColorFilterBench(
"gaussian", []() {
225#
if defined(SK_GANESH)
226DEF_BENCH(
return new ColorFilterBench(
"src_runtime", []() {
231DEF_BENCH(
return new ColorFilterBench(
"matrix_runtime", []() {
242 , fFilterFn(
std::move(f)) {}
250 fColorFilter = fFilterFn();
256 for (
int i = 0; i < loops; ++i) {
257 c = fColorFilter->filterColor4f(c,
nullptr,
nullptr);
262 std::function<sk_sp<SkColorFilter>()> fFilterFn;
static constexpr char kRuntimeNone_GPU_SRC[]
static constexpr char kRuntimeColorMatrix_GPU_SRC[]
static constexpr float kGrayscaleMatrix[]
static sk_sp< SkColorFilter > make_grayscale_rt()
static sk_sp< SkColorFilter > make_grayscale()
@ kSrcOver
r = s + (1-sa)*d
constexpr SkColor SK_ColorRED
SK_API SkString static SkString SkStringPrintf()
virtual SkISize onGetSize()
virtual void onDraw(int loops, SkCanvas *)=0
virtual void onDelayedSetup()
virtual const char * onGetName()=0
const char * onGetName() override
void onDraw(int loops, SkCanvas *) override
bool isSuitableFor(Backend backend) override
void onDelayedSetup() override
const char * onGetName() override
void onDraw(int loops, SkCanvas *canvas) override
@ kRuntimeColorFilter_Type
void onDelayedSetup() override
FilteredRectBench(Type t)
void drawRect(const SkRect &rect, const SkPaint &paint)
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
static sk_sp< SkColorFilter > MakeGaussian()
static sk_sp< SkColorFilter > Compose(const sk_sp< SkColorFilter > &outer, sk_sp< SkColorFilter > inner)
static sk_sp< SkColorFilter > Blend(const SkColor4f &c, sk_sp< SkColorSpace >, SkBlendMode mode)
static sk_sp< SkColorFilter > Matrix(const SkColorMatrix &)
static sk_sp< SkColorFilter > HSLAMatrix(const SkColorMatrix &)
static sk_sp< SkColorFilter > SRGBToLinearGamma()
static sk_sp< SkColorFilter > Lerp(float t, sk_sp< SkColorFilter > dst, sk_sp< SkColorFilter > src)
static sk_sp< SkColorFilter > LinearToSRGBGamma()
static sk_sp< SkData > MakeWithCopy(const void *data, size_t length)
static sk_sp< SkData > MakeEmpty()
static sk_sp< SkImageFilter > ColorFilter(sk_sp< SkColorFilter > cf, sk_sp< SkImageFilter > input, const CropRect &cropRect={})
static sk_sp< SkColorFilter > MakeWithSkColors(const SkColor[kNumColors])
static constexpr int kNumColors
void setColor(SkColor color)
void setImageFilter(sk_sp< SkImageFilter > imageFilter)
void setColorFilter(sk_sp< SkColorFilter > colorFilter)
static Result MakeForColorFilter(SkString sksl, const Options &)
void printf(const char format[],...) SK_PRINTF_LIKE(2
const char * c_str() const
Dart_NativeFunction function
SKSHAPER_API sk_sp< Factory > Factory()
SK_API sk_sp< SkSurface > Raster(const SkImageInfo &imageInfo, size_t rowBytes, const SkSurfaceProps *surfaceProps)
static sk_sp< SkColorFilter > Make(const SkHighContrastConfig &config)
static SkImageInfo MakeN32Premul(int width, int height)
sk_sp< SkRuntimeEffect > effect