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