diff options
-rw-r--r-- | vulkan/libvulkan/api.cpp | 12 | ||||
-rw-r--r-- | vulkan/libvulkan/layers_extensions.cpp | 34 | ||||
-rw-r--r-- | vulkan/libvulkan/layers_extensions.h | 4 |
3 files changed, 18 insertions, 32 deletions
diff --git a/vulkan/libvulkan/api.cpp b/vulkan/libvulkan/api.cpp index 6d558eec80..1014c144dc 100644 --- a/vulkan/libvulkan/api.cpp +++ b/vulkan/libvulkan/api.cpp @@ -543,13 +543,19 @@ LayerChain::ActiveLayer* LayerChain::AllocateLayerArray(uint32_t count) const { } VkResult LayerChain::LoadLayer(ActiveLayer& layer, const char* name) { + const Layer* l = FindLayer(name); + if (!l || (!is_instance_ && !IsLayerGlobal(*l))) { + ALOGW("Failed to find layer %s", name); + return VK_ERROR_LAYER_NOT_PRESENT; + } + if (is_instance_) - new (&layer) ActiveLayer{GetInstanceLayerRef(name), {}}; + new (&layer) ActiveLayer{GetInstanceLayerRef(*l), {}}; else - new (&layer) ActiveLayer{GetDeviceLayerRef(name), {}}; + new (&layer) ActiveLayer{GetDeviceLayerRef(*l), {}}; if (!layer.ref) { - ALOGE("Failed to load layer %s", name); + ALOGW("Failed to open layer %s", name); layer.ref.~LayerRef(); return VK_ERROR_LAYER_NOT_PRESENT; } diff --git a/vulkan/libvulkan/layers_extensions.cpp b/vulkan/libvulkan/layers_extensions.cpp index b7558a28ea..9998aeeab7 100644 --- a/vulkan/libvulkan/layers_extensions.cpp +++ b/vulkan/libvulkan/layers_extensions.cpp @@ -330,15 +330,6 @@ void DiscoverLayersInDirectory(const std::string& dir_path) { closedir(directory); } -const Layer* FindInstanceLayer(const char* name) { - return FindLayer(name); -} - -const Layer* FindDeviceLayer(const char* name) { - const Layer* layer = FindInstanceLayer(name); - return (layer && layer->is_global) ? layer : nullptr; -} - void* GetLayerGetProcAddr(const Layer& layer, const char* gpa_name, size_t gpa_name_len) { @@ -392,26 +383,15 @@ const VkExtensionProperties* GetLayerDeviceExtensions(const Layer& layer, return layer.device_extensions.data(); } -LayerRef GetInstanceLayerRef(const char* name) { - const Layer* layer = FindInstanceLayer(name); - if (layer) { - LayerLibrary& library = g_layer_libraries[layer->library_idx]; - if (!library.Open()) - layer = nullptr; - } - - return LayerRef(layer, true); +LayerRef GetInstanceLayerRef(const Layer& layer) { + LayerLibrary& library = g_layer_libraries[layer.library_idx]; + return LayerRef((library.Open()) ? &layer : nullptr, true); } -LayerRef GetDeviceLayerRef(const char* name) { - const Layer* layer = FindDeviceLayer(name); - if (layer) { - LayerLibrary& library = g_layer_libraries[layer->library_idx]; - if (!library.Open()) - layer = nullptr; - } - - return LayerRef(layer, false); +LayerRef GetDeviceLayerRef(const Layer& layer) { + LayerLibrary& library = g_layer_libraries[layer.library_idx]; + return LayerRef((layer.is_global && library.Open()) ? &layer : nullptr, + false); } LayerRef::LayerRef(const Layer* layer, bool is_instance) diff --git a/vulkan/libvulkan/layers_extensions.h b/vulkan/libvulkan/layers_extensions.h index 899d60039b..32e1a67c15 100644 --- a/vulkan/libvulkan/layers_extensions.h +++ b/vulkan/libvulkan/layers_extensions.h @@ -61,8 +61,8 @@ const VkExtensionProperties* GetLayerInstanceExtensions(const Layer& layer, const VkExtensionProperties* GetLayerDeviceExtensions(const Layer& layer, uint32_t& count); -LayerRef GetInstanceLayerRef(const char* name); -LayerRef GetDeviceLayerRef(const char* name); +LayerRef GetInstanceLayerRef(const Layer& layer); +LayerRef GetDeviceLayerRef(const Layer& layer); } // namespace api } // namespace vulkan |