diff --git a/liblava/base/instance.cpp b/liblava/base/instance.cpp index 9f5504aaa276a821ab2042fdf977e12419792eff..bf7c51441a27f934e8793b6b7497a0ac445f08ed 100644 --- a/liblava/base/instance.cpp +++ b/liblava/base/instance.cpp @@ -38,7 +38,7 @@ bool instance::create(create_param& param, debug_config::ref d, app_info::ref i) param.extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); } - if (!param.check()) { + if (!check(param)) { log()->error("create instance param"); return false; @@ -108,37 +108,6 @@ void instance::destroy() { vk_instance = nullptr; } -bool instance::create_param::check() const { - - auto layer_properties = enumerate_layer_properties(); - for (auto const& layer_name : layers) { - - auto itr = std::find_if(layer_properties.begin(), layer_properties.end(), - [&](VkLayerProperties const& extProp) { - - return strcmp(layer_name, extProp.layerName) == 0; - }); - - if (itr == layer_properties.end()) - return false; - } - - auto extensions_properties = enumerate_extension_properties(); - for (auto const& ext_name : extensions) { - - auto itr = std::find_if(extensions_properties.begin(), extensions_properties.end(), - [&](VkExtensionProperties const& extProp) { - - return strcmp(ext_name, extProp.extensionName) == 0; - }); - - if (itr == extensions_properties.end()) - return false; - } - - return true; -} - static VKAPI_ATTR VkBool32 VKAPI_CALL validation_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, VkDebugUtilsMessageTypeFlagsEXT message_type, const VkDebugUtilsMessengerCallbackDataEXT* callback_data, void* user_data) { @@ -253,3 +222,34 @@ internal_version instance::get_version() { } } // lava + +bool lava::check(instance::create_param::ref param) { + + auto layer_properties = instance::enumerate_layer_properties(); + for (auto const& layer_name : param.layers) { + + auto itr = std::find_if(layer_properties.begin(), layer_properties.end(), + [&](VkLayerProperties const& extProp) { + + return strcmp(layer_name, extProp.layerName) == 0; + }); + + if (itr == layer_properties.end()) + return false; + } + + auto extensions_properties = instance::enumerate_extension_properties(); + for (auto const& ext_name : param.extensions) { + + auto itr = std::find_if(extensions_properties.begin(), extensions_properties.end(), + [&](VkExtensionProperties const& extProp) { + + return strcmp(ext_name, extProp.extensionName) == 0; + }); + + if (itr == extensions_properties.end()) + return false; + } + + return true; +} diff --git a/liblava/base/instance.hpp b/liblava/base/instance.hpp index d8ea637bcd8fbfde1f17e4721fb4618420bcdd34..881990845f4bdbea7f4abc31f89f01a47cb818e3 100644 --- a/liblava/base/instance.hpp +++ b/liblava/base/instance.hpp @@ -12,10 +12,10 @@ struct instance : no_copy_no_move { struct create_param { + using ref = create_param const&; + names layers{}; names extensions{}; - - bool check() const; }; struct debug_config { @@ -87,4 +87,6 @@ private: VkDebugUtilsMessengerEXT debug_messenger = 0; }; +bool check(instance::create_param::ref param); + } // lava