#ifndef VKW_BASE_WIDGET_H #define VKW_BASE_WIDGET_H #include #include #include #include #include "vulkan_include.h" namespace vkw { class BaseWidget { public: /** * @brief getSupportedExtensions * @return * * Return a set of all the extensions currently supported * but your vulkan library. */ static std::set getSupportedInstanceExtensions() { uint32_t count; vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr); //get number of extensions std::vector extensions(count); vkEnumerateInstanceExtensionProperties(nullptr, &count, extensions.data()); //populate buffer std::set results; for (auto & extension : extensions) { results.insert(extension.extensionName); } return results; } static std::set getSupportedLayers() { uint32_t count; vkEnumerateInstanceLayerProperties(&count, nullptr); //get number of extensions std::vector extensions(count); vkEnumerateInstanceLayerProperties(&count, extensions.data()); //populate buffer std::set results; for (auto & extension : extensions) { results.insert(extension.layerName); } return results; } static std::set getSupportedDeviceExtensions(VkPhysicalDevice physicalDevice) { uint32_t count; vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &count, nullptr); std::vector extensions(count); vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &count, extensions.data()); //populate buffer std::set results; for (auto & extension : extensions) { results.insert(extension.extensionName); } return results; }; static std::set getSupportedDeviceExtensions(VkPhysicalDevice physicalDevice, char const* layer) { uint32_t count; vkEnumerateDeviceExtensionProperties(physicalDevice, layer, &count, nullptr); //vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr); //get number of extensions std::vector extensions(count); vkEnumerateDeviceExtensionProperties(physicalDevice, layer, &count, extensions.data()); //populate buffer std::set results; for (auto & extension : extensions) { results.insert(extension.extensionName); } return results; }; template static void vectorAppend( std::vector & A, std::vector const &B ) { A.insert(A.end(), B.begin(), B.end()); } template static void vectorUnique( std::vector & A) { std::sort(A.begin(), A.end()); A.erase(std::unique( A.begin(), A.end()), A.end()); } }; } #endif