From 519b44c8398e1b237f72dbd8106cd0ea0a00d936 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Wed, 14 Aug 2019 23:15:02 -0700 Subject: libvulkan: ensure layer discovery is triggered only once for a new process After decoupling layer discovery from driver loading, the layer discovery is triggered at each call of vkCreateInstance, vkEnumerateInstanceLayerProperties and vkEnumerateInstanceExtensionProperties. However, it takes non-trivial time to traverse the layer search path for priviledged apps and non-updated system apps. So this change just makes sure the layer discovery logic is triggered only once for a new process. Bug: 139443653 Bug: 135536511 Test: preload Vulkan and atest CtsGpuToolsHostTestCases Change-Id: Ibe502fd4b089acbbff6f4a2485fa61c736a484b5 --- vulkan/libvulkan/api.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'vulkan/libvulkan/api.cpp') diff --git a/vulkan/libvulkan/api.cpp b/vulkan/libvulkan/api.cpp index 4608be2907..48f26e7e43 100644 --- a/vulkan/libvulkan/api.cpp +++ b/vulkan/libvulkan/api.cpp @@ -1177,9 +1177,13 @@ bool EnsureInitialized() { }); { + static pid_t pid = getpid() + 1; static std::mutex layer_lock; std::lock_guard lock(layer_lock); - DiscoverLayers(); + if (pid != getpid()) { + pid = getpid(); + DiscoverLayers(); + } } return initialized; -- cgit v1.2.3-59-g8ed1b