| 212 | } |
| 213 | |
| 214 | inline std::set<VkImageUsageFlagBits> choose_image_usage(const std::set<VkImageUsageFlagBits> &requested_image_usage_flags, VkImageUsageFlags supported_image_usage, VkFormatFeatureFlags supported_features) |
| 215 | { |
| 216 | std::set<VkImageUsageFlagBits> validated_image_usage_flags; |
| 217 | for (auto flag : requested_image_usage_flags) |
| 218 | { |
| 219 | if ((flag & supported_image_usage) && validate_format_feature(flag, supported_features)) |
| 220 | { |
| 221 | validated_image_usage_flags.insert(flag); |
| 222 | } |
| 223 | else |
| 224 | { |
| 225 | LOGW("(Swapchain) Image usage ({}) requested but not supported.", to_string(flag)); |
| 226 | } |
| 227 | } |
| 228 | |
| 229 | if (validated_image_usage_flags.empty()) |
| 230 | { |
| 231 | // Pick the first format from list of defaults, if supported |
| 232 | static const std::vector<VkImageUsageFlagBits> image_usage_flags = { |
| 233 | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, |
| 234 | VK_IMAGE_USAGE_STORAGE_BIT, |
| 235 | VK_IMAGE_USAGE_SAMPLED_BIT, |
| 236 | VK_IMAGE_USAGE_TRANSFER_DST_BIT}; |
| 237 | |
| 238 | for (VkImageUsageFlagBits image_usage : image_usage_flags) |
| 239 | { |
| 240 | if ((image_usage & supported_image_usage) && validate_format_feature(image_usage, supported_features)) |
| 241 | { |
| 242 | validated_image_usage_flags.insert(image_usage); |
| 243 | break; |
| 244 | } |
| 245 | } |
| 246 | } |
| 247 | |
| 248 | if (!validated_image_usage_flags.empty()) |
| 249 | { |
| 250 | // Log image usage flags used |
| 251 | std::string usage_list; |
| 252 | for (VkImageUsageFlagBits image_usage : validated_image_usage_flags) |
| 253 | { |
| 254 | usage_list += to_string(image_usage) + " "; |
| 255 | } |
| 256 | LOGI("(Swapchain) Image usage flags: {}", usage_list); |
| 257 | } |
| 258 | else |
| 259 | { |
| 260 | throw std::runtime_error("No compatible image usage found."); |
| 261 | } |
| 262 | |
| 263 | return validated_image_usage_flags; |
| 264 | } |
| 265 | |
| 266 | inline VkImageUsageFlags composite_image_flags(std::set<VkImageUsageFlagBits> &image_usage_flags) |
| 267 | { |
no test coverage detected