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