Find an HDR-capable format from available formats.
386{
387 vk::SurfaceFormatKHR selected_format;
388 std::vector<std::pair<vk::Format, vk::ColorSpaceKHR>> hdr_candidates = {
389 { vk::Format::eR16G16B16A16Sfloat, vk::ColorSpaceKHR::eHdr10St2084EXT },
390 { vk::Format::eR16G16B16A16Sfloat, vk::ColorSpaceKHR::eExtendedSrgbLinearEXT },
391 { vk::Format::eA2B10G10R10UnormPack32, vk::ColorSpaceKHR::eHdr10St2084EXT },
392 { vk::Format::eA2B10G10R10UnormPack32, vk::ColorSpaceKHR::eExtendedSrgbLinearEXT },
393 };
394
395 bool hdr_supported = false;
396 for (const auto& candidate : hdr_candidates) {
397 for (const auto& fmt : available_formats) {
398 if (fmt.format == candidate.first && fmt.colorSpace == candidate.second) {
399 selected_format = fmt;
400 hdr_supported = true;
401 break;
402 }
403 }
404 if (hdr_supported) {
405 return selected_format;
406 }
407 }
408 return std::nullopt;
409}