if (FLAGS_cpu) {
auto srgbColorSpace = SkColorSpace::MakeSRGB();
+ auto srgbColorSpaceNonLinearBlending = SkColorSpace::MakeRGB(
+ SkColorSpace::kSRGB_RenderTargetGamma,
+ SkColorSpace::kSRGB_Gamut,
+ SkColorSpace::kNonLinearBlending_ColorSpaceFlag);
auto srgbLinearColorSpace = SkColorSpace::MakeSRGBLinear();
- SINK("565", RasterSink, kRGB_565_SkColorType);
- SINK("8888", RasterSink, kN32_SkColorType);
- SINK("srgb", RasterSink, kN32_SkColorType, srgbColorSpace);
- SINK("f16", RasterSink, kRGBA_F16_SkColorType, srgbLinearColorSpace);
- SINK("pdf", PDFSink);
- SINK("skp", SKPSink);
- SINK("pipe", PipeSink);
- SINK("svg", SVGSink);
- SINK("null", NullSink);
- SINK("xps", XPSSink);
- SINK("pdfa", PDFSink, true);
+ SINK("565", RasterSink, kRGB_565_SkColorType);
+ SINK("8888", RasterSink, kN32_SkColorType);
+ SINK("srgb", RasterSink, kN32_SkColorType, srgbColorSpace);
+ SINK("srgbnl", RasterSink, kN32_SkColorType, srgbColorSpaceNonLinearBlending);
+ SINK("f16", RasterSink, kRGBA_F16_SkColorType, srgbLinearColorSpace);
+ SINK("pdf", PDFSink);
+ SINK("skp", SKPSink);
+ SINK("pipe", PipeSink);
+ SINK("svg", SVGSink);
+ SINK("null", NullSink);
+ SINK("xps", XPSSink);
+ SINK("pdfa", PDFSink, true);
SINK("jsdebug", DebugSink);
}
#undef SINK
{ "esinstdit4", "gpu", "api=gles,inst=true,samples=4,dit=true" },
{ "gpuf16", "gpu", "color=f16" },
{ "gpusrgb", "gpu", "color=srgb" },
+ { "gpusrgbnl", "gpu", "color=srgbnl" },
{ "glsrgb", "gpu", "api=gl,color=srgb" },
{ "glwide", "gpu", "api=gl,color=f16_wide" },
{ "glnarrow", "gpu", "api=gl,color=f16_narrow" },
return false;
}
- // First, figure out color gamut that we'll work in (default to sRGB)
const bool linearGamma = commands[0].equals("f16");
- *outColorSpace = linearGamma ? SkColorSpace::MakeSRGBLinear()
- : SkColorSpace::MakeSRGB();
+ const bool nonLinearBlending = commands[0].equals("srgbnl");
+ SkColorSpace::Gamut gamut = SkColorSpace::kSRGB_Gamut;
+ SkColorSpace::RenderTargetGamma gamma = linearGamma ? SkColorSpace::kLinear_RenderTargetGamma
+ : SkColorSpace::kSRGB_RenderTargetGamma;
+ SkColorSpace::ColorSpaceFlags flags =
+ nonLinearBlending ? SkColorSpace::kNonLinearBlending_ColorSpaceFlag
+ : (SkColorSpace::ColorSpaceFlags) 0;
+ *outColorSpace = SkColorSpace::MakeRGB(gamma, gamut, flags);
+
if (commands.count() == 2) {
if (commands[1].equals("srgb")) {
// sRGB gamut (which is our default)
};
SkMatrix44 wideGamutRGBMatrix(SkMatrix44::kUninitialized_Constructor);
wideGamutRGBMatrix.set3x3RowMajorf(gWideGamutRGB_toXYZD50);
- *outColorSpace = SkColorSpace::MakeRGB(linearGamma
- ? SkColorSpace::kLinear_RenderTargetGamma
- : SkColorSpace::kSRGB_RenderTargetGamma,
- wideGamutRGBMatrix);
+ *outColorSpace = SkColorSpace::MakeRGB(gamma, wideGamutRGBMatrix, flags);
} else if (commands[1].equals("narrow")) {
// NarrowGamut RGB (an artifically smaller than sRGB gamut)
SkColorSpacePrimaries primaries ={
};
SkMatrix44 narrowGamutRGBMatrix(SkMatrix44::kUninitialized_Constructor);
primaries.toXYZD50(&narrowGamutRGBMatrix);
- *outColorSpace = SkColorSpace::MakeRGB(linearGamma
- ? SkColorSpace::kLinear_RenderTargetGamma
- : SkColorSpace::kSRGB_RenderTargetGamma,
- narrowGamutRGBMatrix);
+ *outColorSpace = SkColorSpace::MakeRGB(gamma, narrowGamutRGBMatrix, flags);
} else {
// Unknown color gamut
return false;
*outColorType = kRGBA_F16_SkColorType;
return true;
}
- if (commands[0].equals("srgb")) {
+ if (commands[0].equals("srgb") || commands[0].equals("srgbnl")) {
*outColorType = kRGBA_8888_SkColorType;
return true;
}