Reverse twin of to_vulkan_format. Returns std::nullopt for Vulkan formats with no ImageFormat equivalent rather than guessing.
977{
978 switch (vk_format) {
979 case vk::Format::eR8Unorm:
980 return ImageFormat::R8;
981 case vk::Format::eR8G8Unorm:
982 return ImageFormat::RG8;
983 case vk::Format::eR8G8B8Unorm:
984 return ImageFormat::RGB8;
985 case vk::Format::eR8G8B8A8Unorm:
986 return ImageFormat::RGBA8;
987 case vk::Format::eR8G8B8A8Srgb:
988 return ImageFormat::RGBA8_SRGB;
989 case vk::Format::eB8G8R8A8Unorm:
990 return ImageFormat::BGRA8;
991 case vk::Format::eB8G8R8A8Srgb:
992 return ImageFormat::BGRA8_SRGB;
993
994 case vk::Format::eR16Unorm:
995 return ImageFormat::R16;
996 case vk::Format::eR16G16Unorm:
997 return ImageFormat::RG16;
998 case vk::Format::eR16G16B16A16Unorm:
999 return ImageFormat::RGBA16;
1000
1001 case vk::Format::eR16Sfloat:
1002 return ImageFormat::R16F;
1003 case vk::Format::eR16G16Sfloat:
1004 return ImageFormat::RG16F;
1005 case vk::Format::eR16G16B16A16Sfloat:
1006 return ImageFormat::RGBA16F;
1007
1008 case vk::Format::eR32Sfloat:
1009 return ImageFormat::R32F;
1010 case vk::Format::eR32G32Sfloat:
1011 return ImageFormat::RG32F;
1012 case vk::Format::eR32G32B32A32Sfloat:
1013 return ImageFormat::RGBA32F;
1014
1015 case vk::Format::eD16Unorm:
1016 return ImageFormat::DEPTH16;
1017 case vk::Format::eX8D24UnormPack32:
1018 return ImageFormat::DEPTH24;
1019 case vk::Format::eD32Sfloat:
1020 return ImageFormat::DEPTH32F;
1021 case vk::Format::eD24UnormS8Uint:
1022 return ImageFormat::DEPTH24_STENCIL8;
1023
1024 default:
1025 return std::nullopt;
1026 }
1027}