blob: e2a33417b963c992890f3b9c838dca6e25d92ea9 [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/lib/vulkan/swapchain/vulkan_utils.h"
namespace image_pipe_swapchain {
bool IsYuvFormat(VkFormat format) {
switch (format) {
case VK_FORMAT_G8B8G8R8_422_UNORM:
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
return true;
default:
return false;
}
}
// TODO(https://fxbug.dev/42172729): Support more usage cases and feature flags.
VkFormatFeatureFlags GetFormatFeatureFlagsFromUsage(VkImageUsageFlags usage) {
VkFormatFeatureFlags result = {};
if (usage & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) {
result |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT;
}
if (usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT) {
result |= VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
}
if (usage & VK_IMAGE_USAGE_SAMPLED_BIT) {
result |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
}
if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) {
result |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT;
}
if (usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {
result |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
}
if (usage & VK_IMAGE_USAGE_STORAGE_BIT) {
result |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
}
return result;
}
} // namespace image_pipe_swapchain