From 67f18f282a607a914ea6f57bb24bcd079d1e4308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 9 Jun 2023 12:44:39 +0200 Subject: [PATCH] rhi: Only report HDR as supported if maxPotentialColorComponentValue > 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I4c951e8c651b2bee41aba8ff69f481a08d6a3561 Reviewed-by: Laszlo Agocs (cherry picked from commit 5302fb64af2f3f1eb4351a6f775663b74b8e53da) Reviewed-by: Tor Arne Vestbø --- src/gui/rhi/qrhimetal.mm | 16 ++++++++++++++-- src/gui/rhi/qrhimetal_p.h | 3 +++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/gui/rhi/qrhimetal.mm b/src/gui/rhi/qrhimetal.mm index 4a4da81b862..537f63418da 100644 --- a/src/gui/rhi/qrhimetal.mm +++ b/src/gui/rhi/qrhimetal.mm @@ -6107,7 +6107,7 @@ bool QMetalSwapChain::isFormatSupported(Format f) { if (f == HDRExtendedSrgbLinear) { if (@available(macOS 10.11, iOS 16.0, *)) - return true; + return hdrInfoForScreen().limits.colorComponentValue.maxPotentialColorComponentValue > 1.0f; else return false; } @@ -6328,13 +6328,25 @@ bool QMetalSwapChain::createOrResize() } QRhiSwapChainHdrInfo QMetalSwapChain::hdrInfo() +{ + if (m_format == SDR) { + QRhiSwapChainHdrInfo info; + info.limitsType = QRhiSwapChainHdrInfo::ColorComponentValue; + info.limits.colorComponentValue.maxColorComponentValue = 1; + info.isHardCodedDefaults = true; + } else { + return hdrInfoForScreen(); + } +} + +QRhiSwapChainHdrInfo QMetalSwapChain::hdrInfoForScreen() { QRhiSwapChainHdrInfo info; info.limitsType = QRhiSwapChainHdrInfo::ColorComponentValue; info.limits.colorComponentValue.maxColorComponentValue = 1; info.isHardCodedDefaults = true; - if (m_format != SDR && m_window) { + if (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()); diff --git a/src/gui/rhi/qrhimetal_p.h b/src/gui/rhi/qrhimetal_p.h index 8fb2ce84b0c..3cc8f89ca7d 100644 --- a/src/gui/rhi/qrhimetal_p.h +++ b/src/gui/rhi/qrhimetal_p.h @@ -318,6 +318,9 @@ struct QMetalSwapChain : public QRhiSwapChain QMetalCommandBuffer cbWrapper; QMetalRenderBuffer *ds = nullptr; QMetalSwapChainData *d = nullptr; + +private: + QRhiSwapChainHdrInfo hdrInfoForScreen(); }; struct QRhiMetalData;