Commit e996d7ce authored by Brian Osman's avatar Brian Osman Committed by Commit Bot

Apply SDR scaling to solid color quads in Skia renderer

Bug: chromium:985500

Change-Id: I0f2c00ac5aac0a939d87a5c0d1e53fd6f53d8313
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1917621Reviewed-by: default avatarMichael Ludwig <michaelludwig@google.com>
Reviewed-by: default avatarkylechar <kylechar@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
Cr-Commit-Position: refs/heads/master@{#715685}
parent 19d6eb56
......@@ -206,6 +206,7 @@ viz_component("service") {
"//media/capture:capture_lib",
"//media/mojo/services",
"//services/viz/privileged/mojom",
"//skia:skcms",
"//ui/display/types",
]
......
......@@ -54,6 +54,7 @@
#include "third_party/skia/include/effects/SkOverdrawColorFilter.h"
#include "third_party/skia/include/effects/SkShaderMaskFilter.h"
#include "third_party/skia/include/gpu/GrBackendSurface.h"
#include "third_party/skia/include/third_party/skcms/skcms.h"
#include "third_party/skia/src/core/SkColorFilterPriv.h"
#include "ui/gfx/color_transform.h"
#include "ui/gfx/geometry/axis_transform2d.h"
......@@ -1642,9 +1643,26 @@ void SkiaRenderer::DrawColoredQuad(SkColor color,
color = SkColorSetA(color, params->opacity * SkColorGetA(color));
const SkPoint* draw_region =
params->draw_region.has_value() ? params->draw_region->points : nullptr;
SkColor4f color4f = SkColor4f::FromColor(color);
float sdr_white_level = current_frame()->sdr_white_level;
if (sdr_white_level != gfx::ColorSpace::kDefaultSDRWhiteLevel) {
// SkColor is always sRGB. Use skcms to linearize, scale, and re-encode
const float scale_factor =
sdr_white_level / gfx::ColorSpace::kDefaultSDRWhiteLevel;
const auto* srgb_to_linear = skcms_sRGB_TransferFunction();
const auto* linear_to_srgb = skcms_sRGB_Inverse_TransferFunction();
for (int c = 0; c < 3; ++c) {
color4f[c] = skcms_TransferFunction_eval(
linear_to_srgb, scale_factor * skcms_TransferFunction_eval(
srgb_to_linear, color4f[c]));
}
}
current_canvas_->experimental_DrawEdgeAAQuad(
gfx::RectFToSkRect(params->visible_rect), draw_region,
static_cast<SkCanvas::QuadAAFlags>(params->aa_flags), color,
static_cast<SkCanvas::QuadAAFlags>(params->aa_flags), color4f,
params->blend_mode);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment