vulkan: make Get*LayerRef take a Layer

The only user-visible change should be improved error messages.

Bug: 27911856
Change-Id: Ie50a9d37f07b590026176642f2c67270225f9280
diff --git a/vulkan/libvulkan/api.cpp b/vulkan/libvulkan/api.cpp
index 6d558ee..1014c14 100644
--- a/vulkan/libvulkan/api.cpp
+++ b/vulkan/libvulkan/api.cpp
@@ -543,13 +543,19 @@
 }
 
 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 b7558a2..9998aee 100644
--- a/vulkan/libvulkan/layers_extensions.cpp
+++ b/vulkan/libvulkan/layers_extensions.cpp
@@ -330,15 +330,6 @@
     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 @@
     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 899d600..32e1a67 100644
--- a/vulkan/libvulkan/layers_extensions.h
+++ b/vulkan/libvulkan/layers_extensions.h
@@ -61,8 +61,8 @@
 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