diff --git a/vulkan/libvulkan/api.cpp b/vulkan/libvulkan/api.cpp
index e7f10b3..e3f69fe 100644
--- a/vulkan/libvulkan/api.cpp
+++ b/vulkan/libvulkan/api.cpp
@@ -1098,13 +1098,19 @@
     if (!EnsureInitialized())
         return VK_ERROR_INITIALIZATION_FAILED;
 
-    uint32_t count =
-        EnumerateInstanceLayers(pProperties ? *pPropertyCount : 0, pProperties);
+    uint32_t count = GetLayerCount();
 
-    if (!pProperties || *pPropertyCount > count)
+    if (!pProperties) {
         *pPropertyCount = count;
+        return VK_SUCCESS;
+    }
 
-    return *pPropertyCount < count ? VK_INCOMPLETE : VK_SUCCESS;
+    uint32_t copied = std::min(*pPropertyCount, count);
+    for (uint32_t i = 0; i < copied; i++)
+        pProperties[i] = GetLayerProperties(GetLayer(i));
+    *pPropertyCount = copied;
+
+    return (copied == count) ? VK_SUCCESS : VK_INCOMPLETE;
 }
 
 VkResult EnumerateInstanceExtensionProperties(
@@ -1137,13 +1143,34 @@
                                         VkLayerProperties* pProperties) {
     (void)physicalDevice;
 
-    uint32_t count =
-        EnumerateDeviceLayers(pProperties ? *pPropertyCount : 0, pProperties);
+    uint32_t total_count = GetLayerCount();
 
-    if (!pProperties || *pPropertyCount > count)
+    if (!pProperties) {
+        uint32_t count = 0;
+        for (uint32_t i = 0; i < total_count; i++) {
+            if (IsLayerGlobal(GetLayer(i)))
+                count++;
+        }
+
         *pPropertyCount = count;
+        return VK_SUCCESS;
+    }
 
-    return *pPropertyCount < count ? VK_INCOMPLETE : VK_SUCCESS;
+    uint32_t count = 0;
+    uint32_t copied = 0;
+    for (uint32_t i = 0; i < total_count; i++) {
+        const Layer& layer = GetLayer(i);
+        if (!IsLayerGlobal(layer))
+            continue;
+
+        count++;
+        if (copied < *pPropertyCount)
+            pProperties[copied++] = GetLayerProperties(layer);
+    }
+
+    *pPropertyCount = copied;
+
+    return (copied == count) ? VK_SUCCESS : VK_INCOMPLETE;
 }
 
 VkResult EnumerateDeviceExtensionProperties(
diff --git a/vulkan/libvulkan/layers_extensions.cpp b/vulkan/libvulkan/layers_extensions.cpp
index 4cf1c2a..4363dd8 100644
--- a/vulkan/libvulkan/layers_extensions.cpp
+++ b/vulkan/libvulkan/layers_extensions.cpp
@@ -50,6 +50,7 @@
     VkLayerProperties properties;
     size_t library_idx;
 
+    // true if the layer intercepts vkCreateDevice and device commands
     bool is_global;
 
     std::vector<VkExtensionProperties> instance_extensions;
@@ -359,29 +360,20 @@
         DiscoverLayersInDirectory(LoaderData::GetInstance().layer_path.c_str());
 }
 
-uint32_t EnumerateInstanceLayers(uint32_t count,
-                                 VkLayerProperties* properties) {
-    uint32_t n =
-        std::min(count, static_cast<uint32_t>(g_instance_layers.size()));
-    for (uint32_t i = 0; i < n; i++)
-        properties[i] = g_instance_layers[i].properties;
-
+uint32_t GetLayerCount() {
     return static_cast<uint32_t>(g_instance_layers.size());
 }
 
-uint32_t EnumerateDeviceLayers(uint32_t count, VkLayerProperties* properties) {
-    uint32_t n = 0;
-    for (const auto& layer : g_instance_layers) {
-        // ignore non-global layers
-        if (!layer.is_global)
-            continue;
+const Layer& GetLayer(uint32_t index) {
+    return g_instance_layers[index];
+}
 
-        if (n < count)
-            properties[n] = layer.properties;
-        n++;
-    }
+const VkLayerProperties& GetLayerProperties(const Layer& layer) {
+    return layer.properties;
+}
 
-    return n;
+bool IsLayerGlobal(const Layer& layer) {
+    return layer.is_global;
 }
 
 void GetInstanceLayerExtensions(const char* name,
diff --git a/vulkan/libvulkan/layers_extensions.h b/vulkan/libvulkan/layers_extensions.h
index e2eb32b..ee85f00 100644
--- a/vulkan/libvulkan/layers_extensions.h
+++ b/vulkan/libvulkan/layers_extensions.h
@@ -23,6 +23,7 @@
 namespace api {
 
 struct Layer;
+
 class LayerRef {
    public:
     LayerRef(const Layer* layer, bool is_instance);
@@ -48,8 +49,13 @@
 };
 
 void DiscoverLayers();
-uint32_t EnumerateInstanceLayers(uint32_t count, VkLayerProperties* properties);
-uint32_t EnumerateDeviceLayers(uint32_t count, VkLayerProperties* properties);
+
+uint32_t GetLayerCount();
+const Layer& GetLayer(uint32_t index);
+
+const VkLayerProperties& GetLayerProperties(const Layer& layer);
+bool IsLayerGlobal(const Layer& layer);
+
 void GetInstanceLayerExtensions(const char* name,
                                 const VkExtensionProperties** properties,
                                 uint32_t* count);
