summaryrefslogtreecommitdiff
path: root/vulkan/libvulkan/api.cpp
diff options
context:
space:
mode:
author Ian Elliott <ianelliott@google.com> 2021-11-24 16:32:41 -0700
committer Ian Elliott <ianelliott@google.com> 2021-11-24 16:46:57 -0700
commitbfb7199b594c705116571744c1504f29d5cfebef (patch)
tree41e15db36e1632b03f8fa920a07002a6e355c5d9 /vulkan/libvulkan/api.cpp
parent38a129962a2c2c93fd5c3b31703ecad1e17ddd4c (diff)
Vulkan: Work-around Android start-up race condition
Work-around a race condition during Android start-up, while the `service.sf.present_timestamp` property is asynchronously working its way from HWC to other processes (especially render engine). This can cause the two successive calls to EnumerateDeviceExtensionProperties to have different numbers of extensions. That causes the second call to return VK_INCOMPLETE, which can cause vkCreateDevice() to fail. The work-around is to add 1 to the "count" returned by the first call. Test: Manual test with additional logging Bug: b/206733351 Change-Id: I7b29998d670196d2af772f19be30b2e9498acfe0
Diffstat (limited to 'vulkan/libvulkan/api.cpp')
-rw-r--r--vulkan/libvulkan/api.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/vulkan/libvulkan/api.cpp b/vulkan/libvulkan/api.cpp
index d1cd397da4..fa3b2601a4 100644
--- a/vulkan/libvulkan/api.cpp
+++ b/vulkan/libvulkan/api.cpp
@@ -965,6 +965,13 @@ VkResult LayerChain::ValidateExtensions(VkPhysicalDevice physical_dev,
VkResult result = EnumerateDeviceExtensionProperties(physical_dev, nullptr,
&count, nullptr);
if (result == VK_SUCCESS && count) {
+ // Work-around a race condition during Android start-up, that can result
+ // in the second call to EnumerateDeviceExtensionProperties having
+ // another extension. That causes the second call to return
+ // VK_INCOMPLETE. A work-around is to add 1 to "count" and ask for one
+ // more extension property. See: http://anglebug.com/6715 and
+ // internal-to-Google b/206733351.
+ count++;
driver_extensions_ = AllocateDriverExtensionArray(count);
result = (driver_extensions_)
? EnumerateDeviceExtensionProperties(