summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vulkan/libvulkan/api.cpp12
-rw-r--r--vulkan/libvulkan/layers_extensions.cpp34
-rw-r--r--vulkan/libvulkan/layers_extensions.h4
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