/* * 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 = 0, .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 create_info_t &info): instantiated (&info, nullptr) { ; } /////////////////////////////////////////////////////////////////////////////// std::set instance::extensions (void) const { uint32_t expected = 0; error::try_code (vkEnumerateInstanceExtensionProperties (nullptr, &expected, nullptr)); VkExtensionProperties props[expected]; uint32_t found = expected; error::try_code (vkEnumerateInstanceExtensionProperties (nullptr, &found, props)); std::set ext; for (const auto &i: props) ext.insert (i.extensionName); return ext; }