Program Listing for File FormatHelper.hpp

Return to documentation for file (Src/GraphicsEngineVulkan/common/FormatHelper.hpp)

#pragma once

#include <vulkan/vulkan.h>

#include <stdexcept>
#include <vector>

#include "spdlog/spdlog.h"

namespace Kataglyphis {
static VkFormat choose_supported_format(VkPhysicalDevice physical_device,
  const std::vector<VkFormat> &formats,
  VkImageTiling tiling,
  VkFormatFeatureFlags feature_flags)
{
    // loop through options and find compatible one
    for (VkFormat format : formats) {
        // get properties for give format on this device
        VkFormatProperties properties;
        vkGetPhysicalDeviceFormatProperties(physical_device, format, &properties);

        // depending on tiling choice, need to check for different bit flag
        if (tiling == VK_IMAGE_TILING_LINEAR && (properties.linearTilingFeatures & feature_flags) == feature_flags) {
            return format;

        } else if (tiling == VK_IMAGE_TILING_OPTIMAL
                   && (properties.optimalTilingFeatures & feature_flags) == feature_flags) {
            return format;
        }
    }

    spdlog::error("Failed to find supported format!");
}
}// namespace Kataglyphis