/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright: * 2016-2017, Danny Robson */ #include "./instance.hpp" #include "./traits.hpp" using cruft::vk::instance; /////////////////////////////////////////////////////////////////////////////// static const VkInstanceCreateInfo DEFAULT_INFO = { .sType = cruft::vk::structure_type_v, .pNext = nullptr, .flags = {}, .pApplicationInfo = nullptr, .enabledLayerCount = 0, .ppEnabledLayerNames = nullptr, .enabledExtensionCount = 0, .ppEnabledExtensionNames = nullptr }; //----------------------------------------------------------------------------- instance::create_info_t::create_info_t (): create_info_t (DEFAULT_INFO) { ; } //----------------------------------------------------------------------------- instance::create_info_t::create_info_t (const VkInstanceCreateInfo &base): VkInstanceCreateInfo (base) { ; } /////////////////////////////////////////////////////////////////////////////// instance::instance (): instance (create_info_t ()) { ; } //----------------------------------------------------------------------------- instance::instance (const util::view layers, const util::view extensions): instance (VkInstanceCreateInfo { .sType = cruft::vk::structure_type_v, .pNext = nullptr, .flags = {}, .pApplicationInfo = nullptr, .enabledLayerCount = static_cast (layers.size ()), .ppEnabledLayerNames = layers.data (), .enabledExtensionCount = static_cast (extensions.size ()), .ppEnabledExtensionNames = extensions.data () }) { ; } //----------------------------------------------------------------------------- instance::instance (const create_info_t &info): root (&info, nullptr) { ; } /////////////////////////////////////////////////////////////////////////////// std::set instance::extensions (void) const { auto values = error::try_values ( vkEnumerateInstanceExtensionProperties, nullptr ); std::set strings; for (const auto &i: values) strings.insert (i.extensionName); return strings; } /////////////////////////////////////////////////////////////////////////////// std::vector instance::available_layers (void) { return error::try_values (vkEnumerateInstanceLayerProperties); }