Update VulkanMemoryAllocator to 3528e2a.

PiperOrigin-RevId: 337963255
diff --git a/SUBMODULE_VERSIONS b/SUBMODULE_VERSIONS
index e9e0de9..2f33cb7 100644
--- a/SUBMODULE_VERSIONS
+++ b/SUBMODULE_VERSIONS
@@ -17,4 +17,4 @@
 2d6bdab3adb0b8949763d5c63426338f938c9efe third_party/tensorflow
 a9a09ab0940408898fccfdcfe2bb8dc19b50f13c third_party/tracy
 9bd3f561bcee3f01d22912de10bb07ce4e23d378 third_party/vulkan_headers
-909f36b714c9239ee0b112a321220213a474ba53 third_party/vulkan_memory_allocator
+3528e2aed3e8808f33e1e7d63eeb1560456a605a third_party/vulkan_memory_allocator
diff --git a/iree/hal/vulkan/internal_vk_mem_alloc.cc b/iree/hal/vulkan/internal_vk_mem_alloc.cc
index d61f108..325c522 100644
--- a/iree/hal/vulkan/internal_vk_mem_alloc.cc
+++ b/iree/hal/vulkan/internal_vk_mem_alloc.cc
@@ -25,8 +25,8 @@
 #include "absl/synchronization/mutex.h"
 #include "iree/base/logging.h"
 
-// Use std::vector instead of the VMA version.
-#define VMA_USE_STL_VECTOR 1
+// Uncomment to try using std::vector instead of the VMA version.
+// #define VMA_USE_STL_VECTOR 1
 
 // TODO(benvanik): figure out why std::list cannot be used.
 // #define VMA_USE_STL_LIST 1
@@ -54,14 +54,22 @@
  public:
   void LockRead() ABSL_SHARED_LOCK_FUNCTION() { mutex_.ReaderLock(); }
   void UnlockRead() ABSL_UNLOCK_FUNCTION() { mutex_.ReaderUnlock(); }
+  bool TryLockRead() ABSL_SHARED_TRYLOCK_FUNCTION(true) {
+    return mutex_.ReaderTryLock();
+  }
   void LockWrite() ABSL_EXCLUSIVE_LOCK_FUNCTION() { mutex_.WriterLock(); }
   void UnlockWrite() ABSL_UNLOCK_FUNCTION() { mutex_.WriterUnlock(); }
+  bool TryLockWrite() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
+    return mutex_.WriterTryLock();
+  }
 
  private:
   absl::Mutex mutex_;
 };
 #define VMA_RW_MUTEX AbslVmaRWMutex
 
+#define VMA_DYNAMIC_VULKAN_FUNCTIONS 0
+
 #define VMA_IMPLEMENTATION
 #include "vk_mem_alloc.h"
 
diff --git a/iree/hal/vulkan/vma_allocator.cc b/iree/hal/vulkan/vma_allocator.cc
index dd18cc2..f1f9225 100644
--- a/iree/hal/vulkan/vma_allocator.cc
+++ b/iree/hal/vulkan/vma_allocator.cc
@@ -37,7 +37,7 @@
 // static
 StatusOr<std::unique_ptr<VmaAllocator>> VmaAllocator::Create(
     VkPhysicalDevice physical_device,
-    const ref_ptr<VkDeviceHandle>& logical_device) {
+    const ref_ptr<VkDeviceHandle>& logical_device, VkInstance instance) {
   IREE_TRACE_SCOPE0("VmaAllocator::Create");
 
   const auto& syms = logical_device->syms();
@@ -79,6 +79,7 @@
   create_info.flags = 0;
   create_info.physicalDevice = physical_device;
   create_info.device = *logical_device;
+  create_info.instance = instance;
   create_info.preferredLargeHeapBlockSize = 64 * 1024 * 1024;
   create_info.pAllocationCallbacks = logical_device->allocator();
   create_info.pDeviceMemoryCallbacks = nullptr;
diff --git a/iree/hal/vulkan/vma_allocator.h b/iree/hal/vulkan/vma_allocator.h
index 2c0054c..fde9b98 100644
--- a/iree/hal/vulkan/vma_allocator.h
+++ b/iree/hal/vulkan/vma_allocator.h
@@ -49,7 +49,7 @@
  public:
   static StatusOr<std::unique_ptr<VmaAllocator>> Create(
       VkPhysicalDevice physical_device,
-      const ref_ptr<VkDeviceHandle>& logical_device);
+      const ref_ptr<VkDeviceHandle>& logical_device, VkInstance instance);
 
   ~VmaAllocator() override;
 
diff --git a/iree/hal/vulkan/vulkan_device.cc b/iree/hal/vulkan/vulkan_device.cc
index 4df227e..05fa4ab 100644
--- a/iree/hal/vulkan/vulkan_device.cc
+++ b/iree/hal/vulkan/vulkan_device.cc
@@ -346,8 +346,9 @@
 
   // Create the device memory allocator.
   // TODO(benvanik): allow other types to be plugged in.
-  IREE_ASSIGN_OR_RETURN(auto allocator,
-                        VmaAllocator::Create(physical_device, logical_device));
+  IREE_ASSIGN_OR_RETURN(
+      auto allocator,
+      VmaAllocator::Create(physical_device, logical_device, instance));
 
   // Create command pools for each queue family. If we don't have a transfer
   // queue then we'll ignore that one and just use the dispatch pool.
@@ -407,7 +408,7 @@
 
 // static
 StatusOr<ref_ptr<VulkanDevice>> VulkanDevice::Wrap(
-    ref_ptr<Driver> driver, const DeviceInfo& device_info,
+    ref_ptr<Driver> driver, VkInstance instance, const DeviceInfo& device_info,
     VkPhysicalDevice physical_device, VkDevice logical_device,
     const ExtensibilitySpec& extensibility_spec,
     const QueueSet& compute_queue_set, const QueueSet& transfer_queue_set,
@@ -442,8 +443,9 @@
 
   // Create the device memory allocator.
   // TODO(benvanik): allow other types to be plugged in.
-  IREE_ASSIGN_OR_RETURN(auto allocator,
-                        VmaAllocator::Create(physical_device, device_handle));
+  IREE_ASSIGN_OR_RETURN(
+      auto allocator,
+      VmaAllocator::Create(physical_device, device_handle, instance));
 
   bool has_dedicated_transfer_queues = transfer_queue_count > 0;
 
diff --git a/iree/hal/vulkan/vulkan_device.h b/iree/hal/vulkan/vulkan_device.h
index 273d407..d7b31bb 100644
--- a/iree/hal/vulkan/vulkan_device.h
+++ b/iree/hal/vulkan/vulkan_device.h
@@ -60,9 +60,9 @@
 
   // Creates a device that wraps an externally managed VkDevice.
   static StatusOr<ref_ptr<VulkanDevice>> Wrap(
-      ref_ptr<Driver> driver, const DeviceInfo& device_info,
-      VkPhysicalDevice physical_device, VkDevice logical_device,
-      const ExtensibilitySpec& extensibility_spec,
+      ref_ptr<Driver> driver, VkInstance instance,
+      const DeviceInfo& device_info, VkPhysicalDevice physical_device,
+      VkDevice logical_device, const ExtensibilitySpec& extensibility_spec,
       const QueueSet& compute_queue_set, const QueueSet& transfer_queue_set,
       const ref_ptr<DynamicSymbols>& syms);
 
diff --git a/iree/hal/vulkan/vulkan_driver.cc b/iree/hal/vulkan/vulkan_driver.cc
index 6941bb6..576145e 100644
--- a/iree/hal/vulkan/vulkan_driver.cc
+++ b/iree/hal/vulkan/vulkan_driver.cc
@@ -311,10 +311,10 @@
   // Attempt to create the device.
   // This may fail if the VkDevice does not support all necessary features.
   IREE_ASSIGN_OR_RETURN(
-      auto device,
-      VulkanDevice::Wrap(add_ref(this), device_info, physical_device,
-                         logical_device, device_extensibility_spec_,
-                         compute_queue_set, transfer_queue_set, syms()));
+      auto device, VulkanDevice::Wrap(
+                       add_ref(this), instance(), device_info, physical_device,
+                       logical_device, device_extensibility_spec_,
+                       compute_queue_set, transfer_queue_set, syms()));
   return device;
 }