diff options
Diffstat (limited to 'chromium/components/metal_util')
-rw-r--r-- | chromium/components/metal_util/DEPS | 2 | ||||
-rw-r--r-- | chromium/components/metal_util/hdr_copier_layer.mm | 29 |
2 files changed, 28 insertions, 3 deletions
diff --git a/chromium/components/metal_util/DEPS b/chromium/components/metal_util/DEPS index dceaeaa0079..d88430c4224 100644 --- a/chromium/components/metal_util/DEPS +++ b/chromium/components/metal_util/DEPS @@ -1,5 +1,5 @@ include_rules = [ "+components/crash/core/common/crash_key.h", - "+third_party/skia/include", + "+third_party/skia/modules", "+ui/gfx", ] diff --git a/chromium/components/metal_util/hdr_copier_layer.mm b/chromium/components/metal_util/hdr_copier_layer.mm index fe48c854454..d49491d06f6 100644 --- a/chromium/components/metal_util/hdr_copier_layer.mm +++ b/chromium/components/metal_util/hdr_copier_layer.mm @@ -14,7 +14,7 @@ #include "base/notreached.h" #include "base/strings/sys_string_conversions.h" #include "components/metal_util/device.h" -#include "third_party/skia/include/third_party/skcms/skcms.h" +#include "third_party/skia/modules/skcms/skcms.h" #include "ui/gfx/color_space.h" namespace { @@ -146,6 +146,10 @@ MTLPixelFormat IOSurfaceGetMTLPixelFormat(IOSurfaceRef buffer) { return MTLPixelFormatRGBA16Float; case kCVPixelFormatType_ARGB2101010LEPacked: return MTLPixelFormatBGR10A2Unorm; + case kCVPixelFormatType_32BGRA: + return MTLPixelFormatBGRA8Unorm; + case kCVPixelFormatType_32RGBA: + return MTLPixelFormatRGBA8Unorm; default: break; } @@ -207,6 +211,7 @@ API_AVAILABLE(macos(10.15)) API_AVAILABLE(macos(10.15)) @interface HDRCopierLayer : CAMetalLayer { base::scoped_nsprotocol<id<MTLRenderPipelineState>> _render_pipeline_state; + gfx::ColorSpace _color_space; } - (id)init; - (void)setHDRContents:(IOSurfaceRef)buffer @@ -239,10 +244,30 @@ API_AVAILABLE(macos(10.15)) return; } + // Set metadata for tone mapping. + if (_color_space != color_space) { + CAEDRMetadata* edr_metadata = nil; + switch (color_space.GetTransferID()) { + case gfx::ColorSpace::TransferID::PQ: + edr_metadata = [CAEDRMetadata HDR10MetadataWithMinLuminance:0 + maxLuminance:10000 + opticalOutputScale:100]; + break; + case gfx::ColorSpace::TransferID::HLG: + edr_metadata = [CAEDRMetadata HLGMetadata]; + break; + default: + [self setEDRMetadata:nil]; + break; + } + [self setEDRMetadata:edr_metadata]; + _color_space = color_space; + } + // Migrate to the MTLDevice on which the CAMetalLayer is being composited, if // known. if ([self respondsToSelector:@selector(preferredDevice)]) { - id<MTLDevice> preferred_device = nil; + id<MTLDevice> preferred_device = [self preferredDevice]; if (preferred_device) [self setDevice:preferred_device]; } |