From 50db9035b034385a27fb557e4da3c48b51a0e3eb Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 22 Apr 2016 10:10:04 +0800 Subject: vulkan: add FindLayer helper It finds a Layer using the layer name. Change-Id: I16214514fcdef09f9016dc2c71fcd5c1f3d0fa6b --- vulkan/libvulkan/layers_extensions.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'vulkan/libvulkan') diff --git a/vulkan/libvulkan/layers_extensions.cpp b/vulkan/libvulkan/layers_extensions.cpp index 93e83af605..4c883509ee 100644 --- a/vulkan/libvulkan/layers_extensions.cpp +++ b/vulkan/libvulkan/layers_extensions.cpp @@ -342,6 +342,14 @@ void DiscoverLayersInDirectory(const std::string& dir_path) { closedir(directory); } +const Layer* FindLayer(const std::vector& layers, const char* name) { + auto layer = + std::find_if(layers.cbegin(), layers.cend(), [=](const Layer& entry) { + return strcmp(entry.properties.layerName, name) == 0; + }); + return (layer != layers.cend()) ? &*layer : nullptr; +} + void* GetLayerGetProcAddr(const Layer& layer, const char* gpa_name, size_t gpa_name_len) { @@ -363,27 +371,25 @@ void GetLayerExtensions(const std::vector& layers, const char* name, const VkExtensionProperties** properties, uint32_t* count) { - auto layer = - std::find_if(layers.cbegin(), layers.cend(), [=](const Layer& entry) { - return strcmp(entry.properties.layerName, name) == 0; - }); - if (layer == layers.cend()) { - *properties = nullptr; - *count = 0; - } else { + const Layer* layer = FindLayer(layers, name); + if (layer) { *properties = layer->extensions.data(); *count = static_cast(layer->extensions.size()); + } else { + *properties = nullptr; + *count = 0; } } LayerRef GetLayerRef(std::vector& layers, const char* name) { - for (uint32_t id = 0; id < layers.size(); id++) { - if (strcmp(name, layers[id].properties.layerName) == 0) { - LayerLibrary& library = g_layer_libraries[layers[id].library_idx]; - return LayerRef((library.Open()) ? &layers[id] : nullptr); - } + const Layer* layer = FindLayer(layers, name); + if (layer) { + LayerLibrary& library = g_layer_libraries[layer->library_idx]; + if (!library.Open()) + layer = nullptr; } - return LayerRef(nullptr); + + return LayerRef(layer); } } // anonymous namespace -- cgit v1.2.3-59-g8ed1b