/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * 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); }