rhi: vulkan: Fix swapchain format check

Fix the treatment of the sRGB flag. That is independent from the value
of format(), and should be checked regardless of wanting a HDR swapchain
or not. On Android for instance Display P3 with RGBA8 or RGBA8_SRGB is
one of the formats offered. While we do not support this right now,
it is an example of a "HDR" format that still uses a color buffer
format where a dedicated sRGB format is available and must be
chosen according to the specified swapchain flags.

Pick-to: 6.6
Change-Id: I2d97689fa5af7c08486702ae690f2230d06db469
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
Laszlo Agocs 2023-06-07 14:25:04 +02:00
parent dc341ea284
commit 526744ba65

View File

@ -7543,11 +7543,9 @@ bool QVkSwapChain::ensureSurface()
const bool srgbRequested = m_flags.testFlag(sRGB);
for (int i = 0; i < int(formatCount); ++i) {
if (formats[i].format != VK_FORMAT_UNDEFINED) {
bool ok = false;
if (m_format == SDR)
ok = srgbRequested == isSrgbFormat(formats[i].format);
else
ok = hdrFormatMatchesVkSurfaceFormat(m_format, formats[i]);
bool ok = srgbRequested == isSrgbFormat(formats[i].format);
if (m_format != SDR)
ok &= hdrFormatMatchesVkSurfaceFormat(m_format, formats[i]);
if (ok) {
colorFormat = formats[i].format;
colorSpace = formats[i].colorSpace;