nmarci89
f916dd6887
Implement macOS wide gamut (Display P3) support ( #181769 )
...
Adds wide gamut color support to macOS (matching iOS), upgrades the
surface pixel format from 10-bit BGRA10_XR to 16-bit float RGBA16Float
on both iOS and macOS when enabled, and fixes Impeller's blur filter P3
clamping on macOS.
**macOS Wide Gamut Support**
- Added DoesHardwareSupportWideGamut() hardware capability check
(MTLGPUFamilyApple2 or MTLGPUFamilyMac2)
- Wide gamut enabled when both hardware supports it and
FLTEnableWideGamut plist flag is YES
- Dynamic wide gamut switching when windows move between P3 and sRGB
displays
- Added flutter/screenshot method channel on macOS for integration
testing
**RGBA16Float Surface Format (iOS + macOS)**
- macOS IOSurface: kCVPixelFormatType_64RGBAHalf +
MTLPixelFormatRGBA16Float
- iOS CAMetalLayer: MTLPixelFormatRGBA16Float
- Image decoder: always uses kRGBA_F16_SkColorType for all wide gamut
images (previously only transparent images used 16-bit)
**Fix Blur P3 Clamping on macOS**
macOS uses the compositor/embedder path, not GPUSurfaceMetalImpeller, so
UpdateOffscreenLayerPixelFormat was never called. Added the call in
embedder.cc after wrapping the Metal resolve texture.
**Why RGBA16Float over BGRA10_XR?**
BGRA10_XR has only 10 bits per channel — values outside sRGB gamut get
clamped in intermediate render targets (e.g. blur filters). RGBA16Float
has 16 bits per channel with full floating-point range, preventing P3
color clamping in multi-pass rendering.
**Tests**
- 9 new iOS FlutterView unit tests verifying RGBA16Float pixel format
and extended sRGB color space
- Updated macOS FlutterSurfaceManagerTest for RGBA16Float, dynamic
switching, color space, and pixel format verification
- Updated image decoder and Impeller display list tests for
kR16G16B16A16Float
- 11 macOS/iOS integration tests: image, saveLayer, codecImage, none,
blur, drawnImage, container, linearGradient, radialGradient,
conicalGradient, sweepGradient
### Issues
https://github.com/flutter/flutter/issues/164557
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.
2026-02-05 00:27:27 +00:00
..
2021-07-13 16:45:09 -07:00
2022-02-28 10:16:21 -08:00
2021-07-13 16:45:09 -07:00
2025-02-12 19:42:39 +00:00
2025-07-08 18:40:35 +00:00
2025-11-26 01:10:39 +00:00
2022-03-01 15:26:21 -08:00
2022-02-08 16:10:43 -08:00
2025-11-26 01:10:39 +00:00
2021-07-13 16:45:09 -07:00
2025-11-03 20:43:30 +00:00
2021-07-13 16:45:09 -07:00
2024-01-24 23:11:12 +00:00
2023-08-09 10:57:35 -07:00
2023-08-09 10:57:35 -07:00
2024-12-19 20:06:21 +00:00
2023-03-31 20:54:51 +00:00
2023-03-31 20:54:51 +00:00
2024-12-19 20:06:21 +00:00
2022-11-29 01:59:19 +00:00
2022-04-25 18:14:06 -07:00
2022-08-26 14:06:26 -07:00
2023-01-18 22:33:49 +00:00
2024-12-19 20:06:21 +00:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2022-08-26 15:29:14 +00:00
2021-07-13 16:45:09 -07:00
2025-11-26 01:10:39 +00:00
2025-12-16 19:34:38 +00:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2025-09-16 20:15:11 +00:00
2021-07-13 16:45:09 -07:00
2022-09-08 22:39:07 +00:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2022-05-13 14:04:06 +08:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2022-08-26 14:06:26 -07:00
2022-03-16 19:15:13 -07:00
2022-07-20 19:13:06 +00:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2022-08-25 23:35:00 +00:00
2024-12-19 20:06:21 +00:00
2024-12-19 20:06:21 +00:00
2021-07-13 16:45:09 -07:00
2022-08-26 18:50:07 +00:00
2023-12-04 19:23:26 +00:00
2023-12-04 19:23:26 +00:00
2021-10-08 09:25:14 -07:00
2023-01-19 21:29:19 +00:00
2024-12-19 20:06:21 +00:00
2022-08-17 09:38:41 -04:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2021-07-13 16:45:09 -07:00
2024-12-19 20:06:21 +00:00
2025-11-20 23:50:37 +00:00
2025-11-20 23:50:37 +00:00
2025-11-20 23:50:37 +00:00
2025-11-20 23:50:37 +00:00
2023-08-14 18:47:08 +00:00
2023-08-14 18:47:08 +00:00
2023-08-14 18:47:08 +00:00
2023-05-15 19:14:58 +00:00
2023-08-14 18:47:08 +00:00
2023-08-14 18:47:08 +00:00
2023-08-14 18:47:08 +00:00
2025-11-26 01:10:39 +00:00
2025-04-10 21:38:08 +00:00
2025-04-10 21:38:08 +00:00
2023-08-14 18:47:08 +00:00
2023-08-14 18:47:08 +00:00
2021-07-13 16:45:09 -07:00
2025-11-26 01:10:39 +00:00
2022-03-28 18:15:10 -07:00
2024-01-26 01:07:08 +00:00
2024-07-29 20:15:25 +00:00
2021-07-13 16:45:09 -07:00
2024-12-19 20:06:21 +00:00
2024-12-19 20:06:21 +00:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2024-12-19 20:06:21 +00:00
2024-12-19 20:06:21 +00:00
2021-10-06 09:43:02 -07:00
2021-07-13 22:04:03 -07:00
2023-05-10 00:50:11 +00:00
2022-09-07 20:19:20 +00:00
2022-09-07 20:19:20 +00:00
2025-11-26 01:10:39 +00:00
2022-05-12 09:54:10 -07:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2025-04-10 15:11:10 +00:00
2022-08-26 17:29:39 +00:00
2022-09-08 16:49:17 +00:00
2025-11-26 01:10:39 +00:00
2024-12-19 20:06:21 +00:00
2021-07-13 22:04:03 -07:00
2022-08-17 09:38:41 -04:00
2022-08-17 09:38:41 -04:00
2026-01-14 01:13:03 +00:00
2023-04-21 22:33:07 +00:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2022-09-14 23:44:14 +00:00
2022-08-17 09:38:41 -04:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2022-08-26 14:06:26 -07:00
2021-07-13 22:04:03 -07:00
2022-04-08 17:20:22 -07:00
2022-04-08 17:20:22 -07:00
2022-04-08 17:20:22 -07:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2026-01-26 20:18:24 +00:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2025-02-10 21:53:55 +00:00
2021-07-13 22:04:03 -07:00
2025-11-26 01:10:39 +00:00
2021-07-13 22:04:03 -07:00
2022-08-24 18:04:42 +00:00
2022-08-17 09:38:41 -04:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2021-12-10 15:39:07 -08:00
2023-10-12 15:53:00 +00:00
2021-07-13 22:04:03 -07:00
2022-10-18 22:26:16 +00:00
2022-10-20 03:23:12 +00:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2026-01-23 02:22:09 +00:00
2024-12-19 20:06:21 +00:00
2024-12-19 20:06:21 +00:00
2021-07-13 22:04:03 -07:00
2022-08-26 14:06:26 -07:00
2025-02-04 00:07:19 +00:00
2025-02-04 00:07:19 +00:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2021-07-15 17:11:09 -07:00
2021-07-13 22:04:03 -07:00
2021-07-15 17:11:09 -07:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2021-07-13 22:04:03 -07:00
2022-09-26 17:45:19 +00:00
2021-07-13 22:04:03 -07:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2025-04-22 23:33:02 +00:00
2024-12-19 20:06:21 +00:00
2024-12-19 20:06:21 +00:00
2025-08-12 17:23:19 +00:00
2024-10-31 21:31:07 +00:00
2025-07-15 00:02:16 +00:00
2023-03-10 16:16:30 +00:00
2022-06-21 18:17:07 +00:00
2024-10-31 21:31:07 +00:00
2025-08-12 17:23:19 +00:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2025-12-02 18:59:44 +00:00
2025-11-26 01:10:39 +00:00
2021-07-13 16:41:06 -07:00
2023-12-07 16:29:11 +00:00
2025-11-26 01:10:39 +00:00
2023-09-10 08:07:13 +00:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2024-12-19 20:06:21 +00:00
2024-02-15 22:32:38 +00:00
2024-02-15 22:32:38 +00:00
2024-12-19 20:06:21 +00:00
2024-02-15 22:32:38 +00:00
2024-02-15 22:32:38 +00:00
2024-02-15 22:32:38 +00:00
2024-12-19 20:06:21 +00:00
2022-01-27 13:25:17 -08:00
2021-12-01 01:39:02 -08:00
2021-12-01 01:39:02 -08:00
2022-01-27 13:25:17 -08:00
2021-12-01 01:39:02 -08:00
2021-12-01 01:39:02 -08:00
2021-12-01 01:39:02 -08:00
2022-07-21 20:01:06 +00:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2023-03-23 11:56:23 -07:00
2021-07-13 16:41:06 -07:00
2022-06-30 14:54:07 +00:00
2021-07-13 16:41:06 -07:00
2024-12-19 20:06:21 +00:00
2024-12-19 20:06:21 +00:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2025-11-26 01:10:39 +00:00
2022-09-08 19:35:20 +00:00
2022-08-17 09:38:41 -04:00
2025-02-11 02:12:49 +00:00
2021-07-13 16:41:06 -07:00
2024-03-16 05:44:21 +00:00
2024-07-08 21:01:58 +00:00
2023-06-23 18:40:17 -07:00
2021-07-13 16:41:06 -07:00
2023-03-10 16:16:30 +00:00
2025-11-26 01:10:39 +00:00
2025-11-26 01:10:39 +00:00
2025-09-02 20:36:07 +00:00
2025-09-02 20:36:07 +00:00
2025-11-26 23:00:42 +00:00
2024-12-19 20:06:21 +00:00
2025-11-26 23:00:42 +00:00
2024-12-19 20:06:21 +00:00
2021-10-08 09:25:14 -07:00
2025-02-10 21:53:55 +00:00
2025-11-26 01:10:39 +00:00
2024-05-29 22:19:10 +00:00
2024-05-29 22:19:10 +00:00
2022-12-12 22:39:49 +00:00
2023-01-13 19:17:12 +00:00
2022-12-12 22:39:49 +00:00
2022-12-12 22:39:49 +00:00
2023-01-13 19:17:12 +00:00
2022-11-08 23:00:04 +00:00
2022-12-08 14:05:53 -08:00
2022-12-06 21:57:25 +00:00
2025-11-26 01:10:39 +00:00
2022-03-28 00:15:07 -07:00
2021-10-08 09:25:14 -07:00
2023-04-24 23:25:28 +00:00
2022-12-20 14:15:39 -08:00
2024-12-19 20:06:21 +00:00
2021-07-13 16:41:06 -07:00
2023-11-29 08:41:27 +00:00
2024-12-19 20:06:21 +00:00
2021-07-13 16:41:06 -07:00
2022-12-22 02:47:11 +00:00
2022-08-17 16:16:02 +00:00
2025-04-10 21:38:08 +00:00
2025-04-10 21:38:08 +00:00
2023-08-14 18:47:08 +00:00
2023-08-14 18:47:08 +00:00
2025-11-26 01:10:39 +00:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2021-07-13 16:41:06 -07:00
2023-08-31 19:03:14 +00:00
2023-08-31 19:03:14 +00:00
2025-09-16 20:15:11 +00:00
2025-09-16 20:15:11 +00:00
2025-09-16 20:15:11 +00:00
2025-09-16 20:15:11 +00:00
2025-09-16 20:15:11 +00:00
2024-12-19 20:06:21 +00:00
2023-02-13 22:33:19 +00:00
2026-02-05 00:27:27 +00:00
2025-10-14 21:36:19 +00:00
2025-10-23 14:12:56 +00:00
2025-09-26 13:37:02 +00:00
2025-08-12 17:23:19 +00:00
2024-10-31 21:31:07 +00:00
2022-03-04 15:41:14 -08:00
2022-08-25 18:54:20 -07:00