diff --git a/src/gui/rhi/qrhimetal.mm b/src/gui/rhi/qrhimetal.mm index ac372e10864..4edf0ac865e 100644 --- a/src/gui/rhi/qrhimetal.mm +++ b/src/gui/rhi/qrhimetal.mm @@ -6331,22 +6331,24 @@ QRhiSwapChainHdrInfo QMetalSwapChain::hdrInfo() { QRhiSwapChainHdrInfo info; info.limitsType = QRhiSwapChainHdrInfo::ColorComponentValue; - if (m_format == SDR) { - info.limits.colorComponentValue.maxColorComponentValue = 1; - return info; + info.limits.colorComponentValue.maxColorComponentValue = 1; + info.isHardCodedDefaults = true; + + if (m_format != SDR && m_window) { + // Must use m_window, not window, given this may be called before createOrResize(). +#ifdef Q_OS_MACOS + NSView *view = reinterpret_cast(m_window->winId()); + info.limits.colorComponentValue.maxColorComponentValue = view.window.screen.maximumExtendedDynamicRangeColorComponentValue; + info.isHardCodedDefaults = false; +#else + if (@available(iOS 16.0, *)) { + UIView *view = reinterpret_cast(m_window->winId()); + info.limits.colorComponentValue.maxColorComponentValue = view.window.windowScene.screen.currentEDRHeadroom; + info.isHardCodedDefaults = false; + } +#endif } -#ifdef Q_OS_MACOS - info.isHardCodedDefaults = false; - // Must use m_window, not window, given this may be called before createOrResize(). - NSView *view = reinterpret_cast(m_window->winId()); - info.limits.colorComponentValue.maxColorComponentValue = view.window.screen.maximumExtendedDynamicRangeColorComponentValue; -#else - // ### Fixme: Maybe retrieve the brightness from the screen and if we're not at full brightness we might be able to do more. - // For now, assume 2, in line with iPhone 12 specs that claim 625 nits max brightness and 1200 nits max HDR brightness. - info.isHardCodedDefaults = true; - info.limits.colorComponentValue.maxColorComponentValue = 2; -#endif return info; }