Add buffer creation support to VK_FUCHSIA_buffer_collection

On current systems any VMO can be imported as a buffer and it will work
just like a vulkan-created buffer, except that the client that doesn't
use vulkan has no idea whether cache operations are needed. However on
non-UMA systems it's possible that an arbitrary VMO could only be
imported in very limited ways, e.g. not attachable to a vertex buffer
or uniform buffer.

The sysmem interface supports creating buffer collections that aren't 2D
images, but are linear memory. We can extend the Vulkan buffer
collection interface to allow clients to request that.

The main differences between the buffer and image constraints interfaces
(besides the VkBufferCreateInfo parameter) are that VkFormatFeatureFlags
can be specified to require that certain operations (like
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT) are supported. and
the minimum number of buffers in the collection are specified. The image
interface will be extended to support those features in the future.

Also updated Vulkan-Docs.diff to match the current versions:
Vulkan-Docs 3c0abef815a9ffe3d1b728bb383f132543e721b1
Vulkan-Hpp b4080fb4254dbc38fef7f71a262a08fe01cd964a

Change-Id: I76822922f646a5fdccd37b11f073b8555c17cd1e
diff --git a/build-fuchsia/Vulkan-Docs.diff b/build-fuchsia/Vulkan-Docs.diff
index f1107ac..ceaf4db 100644
--- a/build-fuchsia/Vulkan-Docs.diff
+++ b/build-fuchsia/Vulkan-Docs.diff
@@ -1,5 +1,5 @@
 diff --git a/include/vulkan/vulkan.h b/include/vulkan/vulkan.h
-index cf9d85a..42c4a3d 100644
+index cf9d85ae..42c4a3db 100644
 --- a/include/vulkan/vulkan.h
 +++ b/include/vulkan/vulkan.h
 @@ -24,7 +24,7 @@
@@ -12,24 +12,10 @@
  #include "vulkan_fuchsia.h"
  #endif
 diff --git a/xml/genvk.py b/xml/genvk.py
-index cdbf9385..c59c43e4 100755
+index cdbf9385..468e8365 100755
 --- a/xml/genvk.py
 +++ b/xml/genvk.py
-@@ -30,11 +30,11 @@ startTime = None
- 
- def startTimer(timeit):
-     global startTime
--    startTime = time.clock()
-+    startTime = time.process_time()
- 
- def endTimer(timeit, msg):
-     global startTime
--    endTime = time.clock()
-+    endTime = time.process_time()
-     if (timeit):
-         write(msg, endTime - startTime, file=sys.stderr)
-         startTime = None
-@@ -254,7 +254,12 @@ def makeGenOpts(args):
+@@ -254,7 +254,10 @@ def makeGenOpts(args):
          [ 'vulkan_android.h',     [ 'VK_KHR_android_surface',
                                      'VK_ANDROID_external_memory_android_hardware_buffer'
                                                                    ], commonSuppressExtensions ],
diff --git a/build-fuchsia/generated/include/object_tracker.cpp b/build-fuchsia/generated/include/object_tracker.cpp
index 202b148..578a42e 100644
--- a/build-fuchsia/generated/include/object_tracker.cpp
+++ b/build-fuchsia/generated/include/object_tracker.cpp
@@ -5197,6 +5197,26 @@
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
 
+VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice                                    device,
+    VkBufferCollectionFUCHSIA                   collection,
+    const VkBufferConstraintsInfoFUCHSIA*       pBufferConstraintsInfo)
+{
+    bool skip = false;
+    {
+        std::lock_guard<std::mutex> lock(global_lock);
+        skip |= ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_UNDEFINED, VALIDATION_ERROR_UNDEFINED);
+        skip |= ValidateObject(device, collection, kVulkanObjectTypeBufferCollectionFUCHSIA, false, VALIDATION_ERROR_UNDEFINED, VALIDATION_ERROR_UNDEFINED);
+    }
+    if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
+    VkResult result = get_dispatch_table(ot_device_table_map, device)->SetBufferCollectionBufferConstraintsFUCHSIA(device, collection, pBufferConstraintsInfo);
+
+    return result;
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+
 VKAPI_ATTR void VKAPI_CALL DestroyBufferCollectionFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -5681,6 +5701,9 @@
     {"vkSetBufferCollectionConstraintsFUCHSIA", (void*)SetBufferCollectionConstraintsFUCHSIA},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    {"vkSetBufferCollectionBufferConstraintsFUCHSIA", (void*)SetBufferCollectionBufferConstraintsFUCHSIA},
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
     {"vkDestroyBufferCollectionFUCHSIA", (void*)DestroyBufferCollectionFUCHSIA},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
diff --git a/build-fuchsia/generated/include/parameter_validation.cpp b/build-fuchsia/generated/include/parameter_validation.cpp
index d095d67..ffa9ad8 100644
--- a/build-fuchsia/generated/include/parameter_validation.cpp
+++ b/build-fuchsia/generated/include/parameter_validation.cpp
@@ -518,6 +518,9 @@
 typedef bool (*PFN_manual_vkSetBufferCollectionConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageCreateInfo* pImageInfo);
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
+typedef bool (*PFN_manual_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
 typedef bool (*PFN_manual_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator);
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
@@ -878,6 +881,9 @@
     {"vkSetBufferCollectionConstraintsFUCHSIA", nullptr},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    {"vkSetBufferCollectionBufferConstraintsFUCHSIA", nullptr},
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
     {"vkDestroyBufferCollectionFUCHSIA", nullptr},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
@@ -2417,9 +2423,9 @@
 
     if (pCreateInfo != NULL)
     {
-        const VkStructureType allowed_structs_VkBufferCreateInfo[] = { VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO };
+        const VkStructureType allowed_structs_VkBufferCreateInfo[] = { VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA, VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO };
 
-        skip |= validate_struct_pnext(local_data->report_data, "vkCreateBuffer", "pCreateInfo->pNext", "VkDedicatedAllocationBufferCreateInfoNV, VkExternalMemoryBufferCreateInfo", pCreateInfo->pNext, ARRAY_SIZE(allowed_structs_VkBufferCreateInfo), allowed_structs_VkBufferCreateInfo, GeneratedHeaderVersion, VALIDATION_ERROR_0141c40d);
+        skip |= validate_struct_pnext(local_data->report_data, "vkCreateBuffer", "pCreateInfo->pNext", "VkBufferCollectionBufferCreateInfoFUCHSIA, VkDedicatedAllocationBufferCreateInfoNV, VkExternalMemoryBufferCreateInfo", pCreateInfo->pNext, ARRAY_SIZE(allowed_structs_VkBufferCreateInfo), allowed_structs_VkBufferCreateInfo, GeneratedHeaderVersion, VALIDATION_ERROR_0141c40d);
 
         skip |= validate_flags(local_data->report_data, "vkCreateBuffer", "pCreateInfo->flags", "VkBufferCreateFlagBits", AllVkBufferCreateFlagBits, pCreateInfo->flags, false, false, VALIDATION_ERROR_01409001);
 
@@ -11680,6 +11686,58 @@
     return result;
 }
 
+VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice                                    device,
+    VkBufferCollectionFUCHSIA                   collection,
+    const VkBufferConstraintsInfoFUCHSIA*       pBufferConstraintsInfo)
+{
+    layer_data *local_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
+    bool skip = false;
+    VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
+    std::unique_lock<std::mutex> lock(global_lock);
+
+    if (!local_data->extensions.vk_fuchsia_external_memory) skip |= OutputExtensionError(local_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME);
+
+    if (!local_data->extensions.vk_fuchsia_buffer_collection) skip |= OutputExtensionError(local_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME);
+
+    skip |= validate_required_handle(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "collection", collection);
+
+    skip |= validate_struct_type(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "pBufferConstraintsInfo", "VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA", pBufferConstraintsInfo, VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA, true, VALIDATION_ERROR_UNDEFINED);
+
+    if (pBufferConstraintsInfo != NULL)
+    {
+        skip |= validate_struct_pnext(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "pBufferConstraintsInfo->pNext", NULL, pBufferConstraintsInfo->pNext, 0, NULL, GeneratedHeaderVersion, VALIDATION_ERROR_UNDEFINED);
+
+        skip |= validate_struct_type(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "pBufferConstraintsInfo->pBufferCreateInfo", "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO", pBufferConstraintsInfo->pBufferCreateInfo, VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, true, VALIDATION_ERROR_0142b00b);
+
+        if (pBufferConstraintsInfo->pBufferCreateInfo != NULL)
+        {
+            const VkStructureType allowed_structs_VkBufferCreateInfo[] = { VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA, VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO };
+
+            skip |= validate_struct_pnext(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "pBufferConstraintsInfo->pBufferCreateInfo->pNext", "VkBufferCollectionBufferCreateInfoFUCHSIA, VkDedicatedAllocationBufferCreateInfoNV, VkExternalMemoryBufferCreateInfo", pBufferConstraintsInfo->pBufferCreateInfo->pNext, ARRAY_SIZE(allowed_structs_VkBufferCreateInfo), allowed_structs_VkBufferCreateInfo, GeneratedHeaderVersion, VALIDATION_ERROR_0141c40d);
+
+            skip |= validate_flags(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "pBufferConstraintsInfo->pBufferCreateInfo->flags", "VkBufferCreateFlagBits", AllVkBufferCreateFlagBits, pBufferConstraintsInfo->pBufferCreateInfo->flags, false, false, VALIDATION_ERROR_01409001);
+
+            skip |= validate_flags(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "pBufferConstraintsInfo->pBufferCreateInfo->usage", "VkBufferUsageFlagBits", AllVkBufferUsageFlagBits, pBufferConstraintsInfo->pBufferCreateInfo->usage, true, false, VALIDATION_ERROR_01430603);
+
+            skip |= validate_ranged_enum(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "pBufferConstraintsInfo->pBufferCreateInfo->sharingMode", "VkSharingMode", AllVkSharingModeEnums, pBufferConstraintsInfo->pBufferCreateInfo->sharingMode, VALIDATION_ERROR_0142c001);
+        }
+
+        skip |= validate_flags(local_data->report_data, "vkSetBufferCollectionBufferConstraintsFUCHSIA", "pBufferConstraintsInfo->requiredFormatFeatures", "VkFormatFeatureFlagBits", AllVkFormatFeatureFlagBits, pBufferConstraintsInfo->requiredFormatFeatures, true, false, VALIDATION_ERROR_UNDEFINED);
+    }
+
+    PFN_manual_vkSetBufferCollectionBufferConstraintsFUCHSIA custom_func = (PFN_manual_vkSetBufferCollectionBufferConstraintsFUCHSIA)custom_functions["vkSetBufferCollectionBufferConstraintsFUCHSIA"];
+    if (custom_func != nullptr) {
+        skip |= custom_func(device, collection, pBufferConstraintsInfo);
+    }
+
+    lock.unlock();
+    if (!skip) {
+            result = local_data->dispatch_table.SetBufferCollectionBufferConstraintsFUCHSIA(device, collection, pBufferConstraintsInfo);
+    }
+    return result;
+}
+
 VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -13335,6 +13393,12 @@
     const VkImageCreateInfo*                    pImageInfo);
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
+VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice                                    device,
+    VkBufferCollectionFUCHSIA                   collection,
+    const VkBufferConstraintsInfoFUCHSIA*       pBufferConstraintsInfo);
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
 VKAPI_ATTR void VKAPI_CALL DestroyBufferCollectionFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -13724,6 +13788,9 @@
     {"vkSetBufferCollectionConstraintsFUCHSIA", (void*)vkSetBufferCollectionConstraintsFUCHSIA},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    {"vkSetBufferCollectionBufferConstraintsFUCHSIA", (void*)vkSetBufferCollectionBufferConstraintsFUCHSIA},
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
     {"vkDestroyBufferCollectionFUCHSIA", (void*)vkDestroyBufferCollectionFUCHSIA},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
diff --git a/build-fuchsia/generated/include/thread_check.h b/build-fuchsia/generated/include/thread_check.h
index af76aa3..12a8613 100644
--- a/build-fuchsia/generated/include/thread_check.h
+++ b/build-fuchsia/generated/include/thread_check.h
@@ -6055,6 +6055,30 @@
     return result;
 }
 
+VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice                                    device,
+    VkBufferCollectionFUCHSIA                   collection,
+    const VkBufferConstraintsInfoFUCHSIA*       pBufferConstraintsInfo)
+{
+    dispatch_key key = get_dispatch_key(device);
+    layer_data *my_data = GetLayerDataPtr(key, layer_data_map);
+    VkLayerDispatchTable *pTable = my_data->device_dispatch_table;
+    VkResult result;
+    bool threadChecks = startMultiThread();
+    if (threadChecks) {
+        startReadObject(my_data, device);
+        startReadObject(my_data, collection);
+    }
+    result = pTable->SetBufferCollectionBufferConstraintsFUCHSIA(device,collection,pBufferConstraintsInfo);
+    if (threadChecks) {
+        finishReadObject(my_data, device);
+        finishReadObject(my_data, collection);
+    } else {
+        finishMultiThread();
+    }
+    return result;
+}
+
 VKAPI_ATTR void VKAPI_CALL DestroyBufferCollectionFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -6497,6 +6521,9 @@
     {"vkSetBufferCollectionConstraintsFUCHSIA", (void*)SetBufferCollectionConstraintsFUCHSIA},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    {"vkSetBufferCollectionBufferConstraintsFUCHSIA", (void*)SetBufferCollectionBufferConstraintsFUCHSIA},
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
     {"vkDestroyBufferCollectionFUCHSIA", (void*)DestroyBufferCollectionFUCHSIA},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
diff --git a/build-fuchsia/generated/include/unique_objects_wrappers.h b/build-fuchsia/generated/include/unique_objects_wrappers.h
index 327523f..66ce83c 100644
--- a/build-fuchsia/generated/include/unique_objects_wrappers.h
+++ b/build-fuchsia/generated/include/unique_objects_wrappers.h
@@ -203,6 +203,29 @@
                 } break;
 
 #ifdef VK_USE_PLATFORM_FUCHSIA 
+            case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA: {
+                    safe_VkBufferCollectionBufferCreateInfoFUCHSIA *safe_struct = new safe_VkBufferCollectionBufferCreateInfoFUCHSIA;
+                    safe_struct->initialize(reinterpret_cast<const VkBufferCollectionBufferCreateInfoFUCHSIA *>(cur_pnext));
+                    if (safe_struct->collection) {
+                        safe_struct->collection = Unwrap(safe_struct->collection);
+                    }
+                    cur_ext_struct = reinterpret_cast<void *>(safe_struct);
+                } break;
+#endif // VK_USE_PLATFORM_FUCHSIA 
+
+            case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV: {
+                    safe_VkDedicatedAllocationBufferCreateInfoNV *safe_struct = new safe_VkDedicatedAllocationBufferCreateInfoNV;
+                    safe_struct->initialize(reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV *>(cur_pnext));
+                    cur_ext_struct = reinterpret_cast<void *>(safe_struct);
+                } break;
+
+            case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO: {
+                    safe_VkExternalMemoryBufferCreateInfo *safe_struct = new safe_VkExternalMemoryBufferCreateInfo;
+                    safe_struct->initialize(reinterpret_cast<const VkExternalMemoryBufferCreateInfo *>(cur_pnext));
+                    cur_ext_struct = reinterpret_cast<void *>(safe_struct);
+                } break;
+
+#ifdef VK_USE_PLATFORM_FUCHSIA 
             case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA: {
                     safe_VkBufferCollectionImageCreateInfoFUCHSIA *safe_struct = new safe_VkBufferCollectionImageCreateInfoFUCHSIA;
                     safe_struct->initialize(reinterpret_cast<const VkBufferCollectionImageCreateInfoFUCHSIA *>(cur_pnext));
@@ -437,6 +460,20 @@
                 break;
 
 #ifdef VK_USE_PLATFORM_FUCHSIA 
+            case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA:
+                delete reinterpret_cast<safe_VkBufferCollectionBufferCreateInfoFUCHSIA *>(header);
+                break;
+#endif // VK_USE_PLATFORM_FUCHSIA 
+
+            case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
+                delete reinterpret_cast<safe_VkDedicatedAllocationBufferCreateInfoNV *>(header);
+                break;
+
+            case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
+                delete reinterpret_cast<safe_VkExternalMemoryBufferCreateInfo *>(header);
+                break;
+
+#ifdef VK_USE_PLATFORM_FUCHSIA 
             case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA:
                 delete reinterpret_cast<safe_VkBufferCollectionImageCreateInfoFUCHSIA *>(header);
                 break;
@@ -1141,7 +1178,19 @@
     VkBuffer*                                   pBuffer)
 {
     layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
-    VkResult result = dev_data->dispatch_table.CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
+    safe_VkBufferCreateInfo *local_pCreateInfo = NULL;
+    {
+        std::lock_guard<std::mutex> lock(global_lock);
+        if (pCreateInfo) {
+            local_pCreateInfo = new safe_VkBufferCreateInfo(pCreateInfo);
+            local_pCreateInfo->pNext = CreateUnwrappedExtensionStructs(local_pCreateInfo->pNext);
+        }
+    }
+    VkResult result = dev_data->dispatch_table.CreateBuffer(device, (const VkBufferCreateInfo*)local_pCreateInfo, pAllocator, pBuffer);
+    if (local_pCreateInfo) {
+        FreeUnwrappedExtensionStructs(const_cast<void *>(local_pCreateInfo->pNext));
+        delete local_pCreateInfo;
+    }
     if (VK_SUCCESS == result) {
         std::lock_guard<std::mutex> lock(global_lock);
         *pBuffer = WrapNew(*pBuffer);
@@ -4332,6 +4381,24 @@
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
 
+VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice                                    device,
+    VkBufferCollectionFUCHSIA                   collection,
+    const VkBufferConstraintsInfoFUCHSIA*       pBufferConstraintsInfo)
+{
+    layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
+    {
+        std::lock_guard<std::mutex> lock(global_lock);
+        collection = Unwrap(collection);
+    }
+    VkResult result = dev_data->dispatch_table.SetBufferCollectionBufferConstraintsFUCHSIA(device, collection, pBufferConstraintsInfo);
+
+    return result;
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+
 VKAPI_ATTR void VKAPI_CALL DestroyBufferCollectionFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -4694,6 +4761,9 @@
     {"vkSetBufferCollectionConstraintsFUCHSIA", (void*)SetBufferCollectionConstraintsFUCHSIA},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    {"vkSetBufferCollectionBufferConstraintsFUCHSIA", (void*)SetBufferCollectionBufferConstraintsFUCHSIA},
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
     {"vkDestroyBufferCollectionFUCHSIA", (void*)DestroyBufferCollectionFUCHSIA},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
diff --git a/build-fuchsia/generated/include/vk_dispatch_table_helper.h b/build-fuchsia/generated/include/vk_dispatch_table_helper.h
index 502178f..1766c63 100644
--- a/build-fuchsia/generated/include/vk_dispatch_table_helper.h
+++ b/build-fuchsia/generated/include/vk_dispatch_table_helper.h
@@ -127,6 +127,9 @@
 static VKAPI_ATTR VkResult VKAPI_CALL StubSetBufferCollectionConstraintsFUCHSIA(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageCreateInfo* pImageInfo) { return VK_SUCCESS; };
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
+static VKAPI_ATTR VkResult VKAPI_CALL StubSetBufferCollectionBufferConstraintsFUCHSIA(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) { return VK_SUCCESS; };
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
 static VKAPI_ATTR void VKAPI_CALL StubDestroyBufferCollectionFUCHSIA(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator) {  };
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
@@ -470,6 +473,10 @@
     if (table->SetBufferCollectionConstraintsFUCHSIA == nullptr) { table->SetBufferCollectionConstraintsFUCHSIA = (PFN_vkSetBufferCollectionConstraintsFUCHSIA)StubSetBufferCollectionConstraintsFUCHSIA; }
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    table->SetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA) gpa(device, "vkSetBufferCollectionBufferConstraintsFUCHSIA");
+    if (table->SetBufferCollectionBufferConstraintsFUCHSIA == nullptr) { table->SetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)StubSetBufferCollectionBufferConstraintsFUCHSIA; }
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
     table->DestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA) gpa(device, "vkDestroyBufferCollectionFUCHSIA");
     if (table->DestroyBufferCollectionFUCHSIA == nullptr) { table->DestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)StubDestroyBufferCollectionFUCHSIA; }
 #endif // VK_USE_PLATFORM_FUCHSIA
diff --git a/build-fuchsia/generated/include/vk_enum_string_helper.h b/build-fuchsia/generated/include/vk_enum_string_helper.h
index 456d9d1..92e0219 100644
--- a/build-fuchsia/generated/include/vk_enum_string_helper.h
+++ b/build-fuchsia/generated/include/vk_enum_string_helper.h
@@ -146,12 +146,16 @@
             return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO";
         case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO:
             return "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO";
+        case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA:
+            return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA";
         case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA:
             return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA";
         case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA:
             return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA";
         case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA:
             return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA";
+        case VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA:
+            return "VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA";
         case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO:
             return "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO";
         case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:
diff --git a/build-fuchsia/generated/include/vk_layer_dispatch_table.h b/build-fuchsia/generated/include/vk_layer_dispatch_table.h
index f7a4844..41b1c68 100644
--- a/build-fuchsia/generated/include/vk_layer_dispatch_table.h
+++ b/build-fuchsia/generated/include/vk_layer_dispatch_table.h
@@ -524,6 +524,9 @@
     PFN_vkSetBufferCollectionConstraintsFUCHSIA SetBufferCollectionConstraintsFUCHSIA;
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA SetBufferCollectionBufferConstraintsFUCHSIA;
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
     PFN_vkDestroyBufferCollectionFUCHSIA DestroyBufferCollectionFUCHSIA;
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
diff --git a/build-fuchsia/generated/include/vk_loader_extensions.c b/build-fuchsia/generated/include/vk_loader_extensions.c
index 6a75115..feb15f0 100644
--- a/build-fuchsia/generated/include/vk_loader_extensions.c
+++ b/build-fuchsia/generated/include/vk_loader_extensions.c
@@ -573,6 +573,9 @@
     table->SetBufferCollectionConstraintsFUCHSIA = (PFN_vkSetBufferCollectionConstraintsFUCHSIA)gpa(dev, "vkSetBufferCollectionConstraintsFUCHSIA");
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    table->SetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)gpa(dev, "vkSetBufferCollectionBufferConstraintsFUCHSIA");
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
     table->DestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)gpa(dev, "vkDestroyBufferCollectionFUCHSIA");
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
@@ -1096,6 +1099,9 @@
     if (!strcmp(name, "SetBufferCollectionConstraintsFUCHSIA")) return (void *)table->SetBufferCollectionConstraintsFUCHSIA;
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    if (!strcmp(name, "SetBufferCollectionBufferConstraintsFUCHSIA")) return (void *)table->SetBufferCollectionBufferConstraintsFUCHSIA;
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
     if (!strcmp(name, "DestroyBufferCollectionFUCHSIA")) return (void *)table->DestroyBufferCollectionFUCHSIA;
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
@@ -2277,6 +2283,16 @@
 
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
+VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice                                    device,
+    VkBufferCollectionFUCHSIA                   collection,
+    const VkBufferConstraintsInfoFUCHSIA*       pBufferConstraintsInfo) {
+    const VkLayerDispatchTable *disp = loader_get_dispatch(device);
+    return disp->SetBufferCollectionBufferConstraintsFUCHSIA(device, collection, pBufferConstraintsInfo);
+}
+
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
 VKAPI_ATTR void VKAPI_CALL DestroyBufferCollectionFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -2899,6 +2915,12 @@
     }
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    if (!strcmp("vkSetBufferCollectionBufferConstraintsFUCHSIA", name)) {
+        *addr = (void *)SetBufferCollectionBufferConstraintsFUCHSIA;
+        return true;
+    }
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
     if (!strcmp("vkDestroyBufferCollectionFUCHSIA", name)) {
         *addr = (void *)DestroyBufferCollectionFUCHSIA;
         return true;
diff --git a/build-fuchsia/generated/include/vk_safe_struct.cpp b/build-fuchsia/generated/include/vk_safe_struct.cpp
index 29f596e..96d1ed5 100644
--- a/build-fuchsia/generated/include/vk_safe_struct.cpp
+++ b/build-fuchsia/generated/include/vk_safe_struct.cpp
@@ -17645,6 +17645,142 @@
 #ifdef VK_USE_PLATFORM_FUCHSIA
 
 
+safe_VkBufferConstraintsInfoFUCHSIA::safe_VkBufferConstraintsInfoFUCHSIA(const VkBufferConstraintsInfoFUCHSIA* in_struct) :
+    sType(in_struct->sType),
+    pNext(in_struct->pNext),
+    requiredFormatFeatures(in_struct->requiredFormatFeatures),
+    minCount(in_struct->minCount)
+{
+    if (in_struct->pBufferCreateInfo)
+        pBufferCreateInfo = new safe_VkBufferCreateInfo(in_struct->pBufferCreateInfo);
+    else
+        pBufferCreateInfo = NULL;
+}
+
+safe_VkBufferConstraintsInfoFUCHSIA::safe_VkBufferConstraintsInfoFUCHSIA()
+{}
+
+safe_VkBufferConstraintsInfoFUCHSIA::safe_VkBufferConstraintsInfoFUCHSIA(const safe_VkBufferConstraintsInfoFUCHSIA& src)
+{
+    sType = src.sType;
+    pNext = src.pNext;
+    requiredFormatFeatures = src.requiredFormatFeatures;
+    minCount = src.minCount;
+    if (src.pBufferCreateInfo)
+        pBufferCreateInfo = new safe_VkBufferCreateInfo(*src.pBufferCreateInfo);
+    else
+        pBufferCreateInfo = NULL;
+}
+
+safe_VkBufferConstraintsInfoFUCHSIA& safe_VkBufferConstraintsInfoFUCHSIA::operator=(const safe_VkBufferConstraintsInfoFUCHSIA& src)
+{
+    if (&src == this) return *this;
+
+    if (pBufferCreateInfo)
+        delete pBufferCreateInfo;
+
+    sType = src.sType;
+    pNext = src.pNext;
+    requiredFormatFeatures = src.requiredFormatFeatures;
+    minCount = src.minCount;
+    if (src.pBufferCreateInfo)
+        pBufferCreateInfo = new safe_VkBufferCreateInfo(*src.pBufferCreateInfo);
+    else
+        pBufferCreateInfo = NULL;
+
+    return *this;
+}
+
+safe_VkBufferConstraintsInfoFUCHSIA::~safe_VkBufferConstraintsInfoFUCHSIA()
+{
+    if (pBufferCreateInfo)
+        delete pBufferCreateInfo;
+}
+
+void safe_VkBufferConstraintsInfoFUCHSIA::initialize(const VkBufferConstraintsInfoFUCHSIA* in_struct)
+{
+    sType = in_struct->sType;
+    pNext = in_struct->pNext;
+    requiredFormatFeatures = in_struct->requiredFormatFeatures;
+    minCount = in_struct->minCount;
+    if (in_struct->pBufferCreateInfo)
+        pBufferCreateInfo = new safe_VkBufferCreateInfo(in_struct->pBufferCreateInfo);
+    else
+        pBufferCreateInfo = NULL;
+}
+
+void safe_VkBufferConstraintsInfoFUCHSIA::initialize(const safe_VkBufferConstraintsInfoFUCHSIA* src)
+{
+    sType = src->sType;
+    pNext = src->pNext;
+    requiredFormatFeatures = src->requiredFormatFeatures;
+    minCount = src->minCount;
+    if (src->pBufferCreateInfo)
+        pBufferCreateInfo = new safe_VkBufferCreateInfo(*src->pBufferCreateInfo);
+    else
+        pBufferCreateInfo = NULL;
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+
+
+safe_VkBufferCollectionBufferCreateInfoFUCHSIA::safe_VkBufferCollectionBufferCreateInfoFUCHSIA(const VkBufferCollectionBufferCreateInfoFUCHSIA* in_struct) :
+    sType(in_struct->sType),
+    pNext(in_struct->pNext),
+    collection(in_struct->collection),
+    index(in_struct->index)
+{
+}
+
+safe_VkBufferCollectionBufferCreateInfoFUCHSIA::safe_VkBufferCollectionBufferCreateInfoFUCHSIA()
+{}
+
+safe_VkBufferCollectionBufferCreateInfoFUCHSIA::safe_VkBufferCollectionBufferCreateInfoFUCHSIA(const safe_VkBufferCollectionBufferCreateInfoFUCHSIA& src)
+{
+    sType = src.sType;
+    pNext = src.pNext;
+    collection = src.collection;
+    index = src.index;
+}
+
+safe_VkBufferCollectionBufferCreateInfoFUCHSIA& safe_VkBufferCollectionBufferCreateInfoFUCHSIA::operator=(const safe_VkBufferCollectionBufferCreateInfoFUCHSIA& src)
+{
+    if (&src == this) return *this;
+
+
+    sType = src.sType;
+    pNext = src.pNext;
+    collection = src.collection;
+    index = src.index;
+
+    return *this;
+}
+
+safe_VkBufferCollectionBufferCreateInfoFUCHSIA::~safe_VkBufferCollectionBufferCreateInfoFUCHSIA()
+{
+}
+
+void safe_VkBufferCollectionBufferCreateInfoFUCHSIA::initialize(const VkBufferCollectionBufferCreateInfoFUCHSIA* in_struct)
+{
+    sType = in_struct->sType;
+    pNext = in_struct->pNext;
+    collection = in_struct->collection;
+    index = in_struct->index;
+}
+
+void safe_VkBufferCollectionBufferCreateInfoFUCHSIA::initialize(const safe_VkBufferCollectionBufferCreateInfoFUCHSIA* src)
+{
+    sType = src->sType;
+    pNext = src->pNext;
+    collection = src->collection;
+    index = src->index;
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+
+
 safe_VkBufferCollectionPropertiesFUCHSIA::safe_VkBufferCollectionPropertiesFUCHSIA(const VkBufferCollectionPropertiesFUCHSIA* in_struct) :
     sType(in_struct->sType),
     pNext(in_struct->pNext),
diff --git a/build-fuchsia/generated/include/vk_safe_struct.h b/build-fuchsia/generated/include/vk_safe_struct.h
index 280e244..79fa733 100644
--- a/build-fuchsia/generated/include/vk_safe_struct.h
+++ b/build-fuchsia/generated/include/vk_safe_struct.h
@@ -4358,6 +4358,43 @@
 #endif // VK_USE_PLATFORM_FUCHSIA
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
+struct safe_VkBufferConstraintsInfoFUCHSIA {
+    VkStructureType sType;
+    const void* pNext;
+    safe_VkBufferCreateInfo* pBufferCreateInfo;
+    VkFormatFeatureFlags requiredFormatFeatures;
+    uint32_t minCount;
+    safe_VkBufferConstraintsInfoFUCHSIA(const VkBufferConstraintsInfoFUCHSIA* in_struct);
+    safe_VkBufferConstraintsInfoFUCHSIA(const safe_VkBufferConstraintsInfoFUCHSIA& src);
+    safe_VkBufferConstraintsInfoFUCHSIA& operator=(const safe_VkBufferConstraintsInfoFUCHSIA& src);
+    safe_VkBufferConstraintsInfoFUCHSIA();
+    ~safe_VkBufferConstraintsInfoFUCHSIA();
+    void initialize(const VkBufferConstraintsInfoFUCHSIA* in_struct);
+    void initialize(const safe_VkBufferConstraintsInfoFUCHSIA* src);
+    VkBufferConstraintsInfoFUCHSIA *ptr() { return reinterpret_cast<VkBufferConstraintsInfoFUCHSIA *>(this); }
+    VkBufferConstraintsInfoFUCHSIA const *ptr() const { return reinterpret_cast<VkBufferConstraintsInfoFUCHSIA const *>(this); }
+};
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+struct safe_VkBufferCollectionBufferCreateInfoFUCHSIA {
+    VkStructureType sType;
+    const void* pNext;
+    VkBufferCollectionFUCHSIA collection;
+    uint32_t index;
+    safe_VkBufferCollectionBufferCreateInfoFUCHSIA(const VkBufferCollectionBufferCreateInfoFUCHSIA* in_struct);
+    safe_VkBufferCollectionBufferCreateInfoFUCHSIA(const safe_VkBufferCollectionBufferCreateInfoFUCHSIA& src);
+    safe_VkBufferCollectionBufferCreateInfoFUCHSIA& operator=(const safe_VkBufferCollectionBufferCreateInfoFUCHSIA& src);
+    safe_VkBufferCollectionBufferCreateInfoFUCHSIA();
+    ~safe_VkBufferCollectionBufferCreateInfoFUCHSIA();
+    void initialize(const VkBufferCollectionBufferCreateInfoFUCHSIA* in_struct);
+    void initialize(const safe_VkBufferCollectionBufferCreateInfoFUCHSIA* src);
+    VkBufferCollectionBufferCreateInfoFUCHSIA *ptr() { return reinterpret_cast<VkBufferCollectionBufferCreateInfoFUCHSIA *>(this); }
+    VkBufferCollectionBufferCreateInfoFUCHSIA const *ptr() const { return reinterpret_cast<VkBufferCollectionBufferCreateInfoFUCHSIA const *>(this); }
+};
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
 struct safe_VkBufferCollectionPropertiesFUCHSIA {
     VkStructureType sType;
     void* pNext;
diff --git a/build-fuchsia/generated/include/vk_typemap_helper.h b/build-fuchsia/generated/include/vk_typemap_helper.h
index 8717766..ff76ecc 100644
--- a/build-fuchsia/generated/include/vk_typemap_helper.h
+++ b/build-fuchsia/generated/include/vk_typemap_helper.h
@@ -2225,6 +2225,28 @@
 
 #endif // VK_USE_PLATFORM_FUCHSIA
 #ifdef VK_USE_PLATFORM_FUCHSIA
+// Map type VkBufferConstraintsInfoFUCHSIA to id VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA
+template <> struct LvlTypeMap<VkBufferConstraintsInfoFUCHSIA> {
+    static const VkStructureType kSType = VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA;
+};
+
+template <> struct LvlSTypeMap<VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA> {
+    typedef VkBufferConstraintsInfoFUCHSIA Type;
+};
+
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
+// Map type VkBufferCollectionBufferCreateInfoFUCHSIA to id VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA
+template <> struct LvlTypeMap<VkBufferCollectionBufferCreateInfoFUCHSIA> {
+    static const VkStructureType kSType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA;
+};
+
+template <> struct LvlSTypeMap<VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA> {
+    typedef VkBufferCollectionBufferCreateInfoFUCHSIA Type;
+};
+
+#endif // VK_USE_PLATFORM_FUCHSIA
+#ifdef VK_USE_PLATFORM_FUCHSIA
 // Map type VkBufferCollectionPropertiesFUCHSIA to id VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA
 template <> struct LvlTypeMap<VkBufferCollectionPropertiesFUCHSIA> {
     static const VkStructureType kSType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA;
diff --git a/include/vulkan/vulkan.hpp b/include/vulkan/vulkan.hpp
index d809a5e..e491313 100644
--- a/include/vulkan/vulkan.hpp
+++ b/include/vulkan/vulkan.hpp
@@ -2321,6 +2321,12 @@
     return ::vkResetFences( device, fenceCount, pFences);
   }
 #ifdef VK_USE_PLATFORM_FUCHSIA
+  VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA( VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo  ) const
+  {
+    return ::vkSetBufferCollectionBufferConstraintsFUCHSIA( device, collection, pBufferConstraintsInfo);
+  }
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#ifdef VK_USE_PLATFORM_FUCHSIA
   VkResult vkSetBufferCollectionConstraintsFUCHSIA( VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageCreateInfo* pImageInfo  ) const
   {
     return ::vkSetBufferCollectionConstraintsFUCHSIA( device, collection, pImageInfo);
@@ -9178,6 +9184,8 @@
     eImportMemoryBufferCollectionFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA,
     eBufferCollectionImageCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA,
     eBufferCollectionPropertiesFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA,
+    eBufferConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA,
+    eBufferCollectionBufferCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA,
     eTempImportMemoryZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_TEMP_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA,
     eTempMemoryZirconHandlePropertiesFUCHSIA = VK_STRUCTURE_TYPE_TEMP_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA,
     eTempMemoryGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_TEMP_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
@@ -13604,6 +13612,78 @@
 #endif /*VK_USE_PLATFORM_FUCHSIA*/
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
+  struct BufferCollectionBufferCreateInfoFUCHSIA
+  {
+    BufferCollectionBufferCreateInfoFUCHSIA( BufferCollectionFUCHSIA collection_ = BufferCollectionFUCHSIA(),
+                                             uint32_t index_ = 0 )
+      : collection( collection_ )
+      , index( index_ )
+    {
+    }
+
+    BufferCollectionBufferCreateInfoFUCHSIA( VkBufferCollectionBufferCreateInfoFUCHSIA const & rhs )
+    {
+      memcpy( this, &rhs, sizeof( BufferCollectionBufferCreateInfoFUCHSIA ) );
+    }
+
+    BufferCollectionBufferCreateInfoFUCHSIA& operator=( VkBufferCollectionBufferCreateInfoFUCHSIA const & rhs )
+    {
+      memcpy( this, &rhs, sizeof( BufferCollectionBufferCreateInfoFUCHSIA ) );
+      return *this;
+    }
+    BufferCollectionBufferCreateInfoFUCHSIA& setPNext( const void* pNext_ )
+    {
+      pNext = pNext_;
+      return *this;
+    }
+
+    BufferCollectionBufferCreateInfoFUCHSIA& setCollection( BufferCollectionFUCHSIA collection_ )
+    {
+      collection = collection_;
+      return *this;
+    }
+
+    BufferCollectionBufferCreateInfoFUCHSIA& setIndex( uint32_t index_ )
+    {
+      index = index_;
+      return *this;
+    }
+
+    operator VkBufferCollectionBufferCreateInfoFUCHSIA const&() const
+    {
+      return *reinterpret_cast<const VkBufferCollectionBufferCreateInfoFUCHSIA*>(this);
+    }
+
+    operator VkBufferCollectionBufferCreateInfoFUCHSIA &()
+    {
+      return *reinterpret_cast<VkBufferCollectionBufferCreateInfoFUCHSIA*>(this);
+    }
+
+    bool operator==( BufferCollectionBufferCreateInfoFUCHSIA const& rhs ) const
+    {
+      return ( sType == rhs.sType )
+          && ( pNext == rhs.pNext )
+          && ( collection == rhs.collection )
+          && ( index == rhs.index );
+    }
+
+    bool operator!=( BufferCollectionBufferCreateInfoFUCHSIA const& rhs ) const
+    {
+      return !operator==( rhs );
+    }
+
+  private:
+    StructureType sType = StructureType::eBufferCollectionBufferCreateInfoFUCHSIA;
+
+  public:
+    const void* pNext = nullptr;
+    BufferCollectionFUCHSIA collection;
+    uint32_t index;
+  };
+  static_assert( sizeof( BufferCollectionBufferCreateInfoFUCHSIA ) == sizeof( VkBufferCollectionBufferCreateInfoFUCHSIA ), "struct and wrapper have different size!" );
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
   struct BufferCollectionCreateInfoFUCHSIA
   {
     BufferCollectionCreateInfoFUCHSIA( zx_handle_t collectionToken_ = 0 )
@@ -21423,6 +21503,88 @@
 
   using FormatProperties2KHR = FormatProperties2;
 
+#ifdef VK_USE_PLATFORM_FUCHSIA
+  struct BufferConstraintsInfoFUCHSIA
+  {
+    BufferConstraintsInfoFUCHSIA( const BufferCreateInfo* pBufferCreateInfo_ = nullptr,
+                                  FormatFeatureFlags requiredFormatFeatures_ = FormatFeatureFlags(),
+                                  uint32_t minCount_ = 0 )
+      : pBufferCreateInfo( pBufferCreateInfo_ )
+      , requiredFormatFeatures( requiredFormatFeatures_ )
+      , minCount( minCount_ )
+    {
+    }
+
+    BufferConstraintsInfoFUCHSIA( VkBufferConstraintsInfoFUCHSIA const & rhs )
+    {
+      memcpy( this, &rhs, sizeof( BufferConstraintsInfoFUCHSIA ) );
+    }
+
+    BufferConstraintsInfoFUCHSIA& operator=( VkBufferConstraintsInfoFUCHSIA const & rhs )
+    {
+      memcpy( this, &rhs, sizeof( BufferConstraintsInfoFUCHSIA ) );
+      return *this;
+    }
+    BufferConstraintsInfoFUCHSIA& setPNext( const void* pNext_ )
+    {
+      pNext = pNext_;
+      return *this;
+    }
+
+    BufferConstraintsInfoFUCHSIA& setPBufferCreateInfo( const BufferCreateInfo* pBufferCreateInfo_ )
+    {
+      pBufferCreateInfo = pBufferCreateInfo_;
+      return *this;
+    }
+
+    BufferConstraintsInfoFUCHSIA& setRequiredFormatFeatures( FormatFeatureFlags requiredFormatFeatures_ )
+    {
+      requiredFormatFeatures = requiredFormatFeatures_;
+      return *this;
+    }
+
+    BufferConstraintsInfoFUCHSIA& setMinCount( uint32_t minCount_ )
+    {
+      minCount = minCount_;
+      return *this;
+    }
+
+    operator VkBufferConstraintsInfoFUCHSIA const&() const
+    {
+      return *reinterpret_cast<const VkBufferConstraintsInfoFUCHSIA*>(this);
+    }
+
+    operator VkBufferConstraintsInfoFUCHSIA &()
+    {
+      return *reinterpret_cast<VkBufferConstraintsInfoFUCHSIA*>(this);
+    }
+
+    bool operator==( BufferConstraintsInfoFUCHSIA const& rhs ) const
+    {
+      return ( sType == rhs.sType )
+          && ( pNext == rhs.pNext )
+          && ( pBufferCreateInfo == rhs.pBufferCreateInfo )
+          && ( requiredFormatFeatures == rhs.requiredFormatFeatures )
+          && ( minCount == rhs.minCount );
+    }
+
+    bool operator!=( BufferConstraintsInfoFUCHSIA const& rhs ) const
+    {
+      return !operator==( rhs );
+    }
+
+  private:
+    StructureType sType = StructureType::eBufferConstraintsInfoFUCHSIA;
+
+  public:
+    const void* pNext = nullptr;
+    const BufferCreateInfo* pBufferCreateInfo;
+    FormatFeatureFlags requiredFormatFeatures;
+    uint32_t minCount;
+  };
+  static_assert( sizeof( BufferConstraintsInfoFUCHSIA ) == sizeof( VkBufferConstraintsInfoFUCHSIA ), "struct and wrapper have different size!" );
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
   enum class QueryControlFlagBits
   {
     ePrecise = VK_QUERY_CONTROL_PRECISE_BIT
@@ -35636,6 +35798,15 @@
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
     template<typename Dispatch = DispatchLoaderStatic>
+    Result setBufferCollectionBufferConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, const BufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo, Dispatch const &d = Dispatch() ) const;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+    template<typename Dispatch = DispatchLoaderStatic>
+    ResultValueType<void>::type setBufferCollectionBufferConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, const BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo, Dispatch const &d = Dispatch() ) const;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    template<typename Dispatch = DispatchLoaderStatic>
     void destroyBufferCollectionFUCHSIA( BufferCollectionFUCHSIA collection, const AllocationCallbacks* pAllocator, Dispatch const &d = Dispatch() ) const;
 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
     template<typename Dispatch = DispatchLoaderStatic>
@@ -38264,6 +38435,22 @@
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
   template<typename Dispatch>
+  VULKAN_HPP_INLINE Result Device::setBufferCollectionBufferConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, const BufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo, Dispatch const &d) const
+  {
+    return static_cast<Result>( d.vkSetBufferCollectionBufferConstraintsFUCHSIA( m_device, static_cast<VkBufferCollectionFUCHSIA>( collection ), reinterpret_cast<const VkBufferConstraintsInfoFUCHSIA*>( pBufferConstraintsInfo ) ) );
+  }
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+  template<typename Dispatch>
+  VULKAN_HPP_INLINE ResultValueType<void>::type Device::setBufferCollectionBufferConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, const BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo, Dispatch const &d ) const
+  {
+    Result result = static_cast<Result>( d.vkSetBufferCollectionBufferConstraintsFUCHSIA( m_device, static_cast<VkBufferCollectionFUCHSIA>( collection ), reinterpret_cast<const VkBufferConstraintsInfoFUCHSIA*>( &bufferConstraintsInfo ) ) );
+    return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING"::Device::setBufferCollectionBufferConstraintsFUCHSIA" );
+  }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+  template<typename Dispatch>
   VULKAN_HPP_INLINE void Device::destroyBufferCollectionFUCHSIA( BufferCollectionFUCHSIA collection, const AllocationCallbacks* pAllocator, Dispatch const &d) const
   {
     d.vkDestroyBufferCollectionFUCHSIA( m_device, static_cast<VkBufferCollectionFUCHSIA>( collection ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
@@ -42939,6 +43126,9 @@
 #ifdef VK_USE_PLATFORM_FUCHSIA
   template <> struct isStructureChainValid<ImageCreateInfo, BufferCollectionImageCreateInfoFUCHSIA>{ enum { value = true }; };
 #endif /*VK_USE_PLATFORM_FUCHSIA*/
+#ifdef VK_USE_PLATFORM_FUCHSIA
+  template <> struct isStructureChainValid<BufferCreateInfo, BufferCollectionBufferCreateInfoFUCHSIA>{ enum { value = true }; };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
 #ifdef VK_USE_PLATFORM_WIN32_KHR
   template <> struct isStructureChainValid<SubmitInfo, Win32KeyedMutexAcquireReleaseInfoKHR>{ enum { value = true }; };
 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
@@ -44521,6 +44711,8 @@
     case StructureType::eImportMemoryBufferCollectionFUCHSIA: return "ImportMemoryBufferCollectionFUCHSIA";
     case StructureType::eBufferCollectionImageCreateInfoFUCHSIA: return "BufferCollectionImageCreateInfoFUCHSIA";
     case StructureType::eBufferCollectionPropertiesFUCHSIA: return "BufferCollectionPropertiesFUCHSIA";
+    case StructureType::eBufferConstraintsInfoFUCHSIA: return "BufferConstraintsInfoFUCHSIA";
+    case StructureType::eBufferCollectionBufferCreateInfoFUCHSIA: return "BufferCollectionBufferCreateInfoFUCHSIA";
     case StructureType::eTempImportMemoryZirconHandleInfoFUCHSIA: return "TempImportMemoryZirconHandleInfoFUCHSIA";
     case StructureType::eTempMemoryZirconHandlePropertiesFUCHSIA: return "TempMemoryZirconHandlePropertiesFUCHSIA";
     case StructureType::eTempMemoryGetZirconHandleInfoFUCHSIA: return "TempMemoryGetZirconHandleInfoFUCHSIA";
@@ -46714,6 +46906,9 @@
     PFN_vkResetEvent vkResetEvent = 0;
     PFN_vkResetFences vkResetFences = 0;
 #ifdef VK_USE_PLATFORM_FUCHSIA
+    PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA = 0;
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#ifdef VK_USE_PLATFORM_FUCHSIA
     PFN_vkSetBufferCollectionConstraintsFUCHSIA vkSetBufferCollectionConstraintsFUCHSIA = 0;
 #endif /*VK_USE_PLATFORM_FUCHSIA*/
     PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT = 0;
@@ -47102,6 +47297,9 @@
       vkResetEvent = PFN_vkResetEvent(device ? device.getProcAddr( "vkResetEvent") : instance.getProcAddr( "vkResetEvent"));
       vkResetFences = PFN_vkResetFences(device ? device.getProcAddr( "vkResetFences") : instance.getProcAddr( "vkResetFences"));
 #ifdef VK_USE_PLATFORM_FUCHSIA
+      vkSetBufferCollectionBufferConstraintsFUCHSIA = PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA(device ? device.getProcAddr( "vkSetBufferCollectionBufferConstraintsFUCHSIA") : instance.getProcAddr( "vkSetBufferCollectionBufferConstraintsFUCHSIA"));
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#ifdef VK_USE_PLATFORM_FUCHSIA
       vkSetBufferCollectionConstraintsFUCHSIA = PFN_vkSetBufferCollectionConstraintsFUCHSIA(device ? device.getProcAddr( "vkSetBufferCollectionConstraintsFUCHSIA") : instance.getProcAddr( "vkSetBufferCollectionConstraintsFUCHSIA"));
 #endif /*VK_USE_PLATFORM_FUCHSIA*/
       vkSetDebugUtilsObjectNameEXT = PFN_vkSetDebugUtilsObjectNameEXT(device ? device.getProcAddr( "vkSetDebugUtilsObjectNameEXT") : instance.getProcAddr( "vkSetDebugUtilsObjectNameEXT"));
diff --git a/include/vulkan/vulkan_core.h b/include/vulkan/vulkan_core.h
index 1e4a589..432fe85 100644
--- a/include/vulkan/vulkan_core.h
+++ b/include/vulkan/vulkan_core.h
@@ -396,6 +396,8 @@
     VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA = 1001004004,
     VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA = 1001004005,
     VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA = 1001004006,
+    VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA = 1001004007,
+    VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA = 1001004008,
     VK_STRUCTURE_TYPE_TEMP_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1001005000,
     VK_STRUCTURE_TYPE_TEMP_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1001005001,
     VK_STRUCTURE_TYPE_TEMP_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1001005002,
diff --git a/include/vulkan/vulkan_fuchsia.h b/include/vulkan/vulkan_fuchsia.h
index c213e18..173882a 100644
--- a/include/vulkan/vulkan_fuchsia.h
+++ b/include/vulkan/vulkan_fuchsia.h
@@ -84,6 +84,21 @@
     uint32_t                     index;
 } VkBufferCollectionImageCreateInfoFUCHSIA;
 
+typedef struct VkBufferConstraintsInfoFUCHSIA {
+    VkStructureType              sType;
+    const void*                  pNext;
+    const VkBufferCreateInfo*    pBufferCreateInfo;
+    VkFormatFeatureFlags         requiredFormatFeatures;
+    uint32_t                     minCount;
+} VkBufferConstraintsInfoFUCHSIA;
+
+typedef struct VkBufferCollectionBufferCreateInfoFUCHSIA {
+    VkStructureType              sType;
+    const void*                  pNext;
+    VkBufferCollectionFUCHSIA    collection;
+    uint32_t                     index;
+} VkBufferCollectionBufferCreateInfoFUCHSIA;
+
 typedef struct VkBufferCollectionPropertiesFUCHSIA {
     VkStructureType    sType;
     void*              pNext;
@@ -94,6 +109,7 @@
 
 typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferCollectionFUCHSIA)(VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA* pImportInfo, const VkAllocationCallbacks* pAllocator, VkBufferCollectionFUCHSIA* pCollection);
 typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageCreateInfo* pImageInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
 typedef void (VKAPI_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator);
 typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties);
 
@@ -109,6 +125,11 @@
     VkBufferCollectionFUCHSIA                   collection,
     const VkImageCreateInfo*                    pImageInfo);
 
+VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice                                    device,
+    VkBufferCollectionFUCHSIA                   collection,
+    const VkBufferConstraintsInfoFUCHSIA*       pBufferConstraintsInfo);
+
 VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
diff --git a/scripts/vk.xml b/scripts/vk.xml
index bb4d115..e0bf6bc 100644
--- a/scripts/vk.xml
+++ b/scripts/vk.xml
@@ -2109,6 +2109,12 @@
             <member><type>VkBufferCollectionFUCHSIA</type>        <name>collection</name></member>
             <member><type>uint32_t</type>                         <name>index</name></member>
         </type>
+        <type category="struct" name="VkBufferCollectionBufferCreateInfoFUCHSIA" structextends="VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkBufferCollectionFUCHSIA</type>        <name>collection</name></member>
+            <member><type>uint32_t</type>                         <name>index</name></member>
+        </type>
         <type category="struct" name="VkBufferCollectionCreateInfoFUCHSIA">
             <member values="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>
@@ -2120,6 +2126,13 @@
             <member><type>uint32_t</type>                         <name>memoryTypeBits</name></member>
             <member><type>uint32_t</type>                         <name>count</name></member>
         </type>
+        <type category="struct" name="VkBufferConstraintsInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>*                      <name>pNext</name></member>
+            <member>const <type>VkBufferCreateInfo</type>*        <name>pBufferCreateInfo</name></member>
+            <member><type>VkFormatFeatureFlags</type>             <name>requiredFormatFeatures</name></member>
+            <member><type>uint32_t</type>                         <name>minCount</name></member>
+        </type>
         <type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoKHR" structextends="VkSubmitInfo">
             <member values="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>
@@ -5349,6 +5362,12 @@
             <param><type>VkBufferCollectionFUCHSIA</type> <name>collection</name></param>
             <param>const <type>VkImageCreateInfo</type>* <name>pImageInfo</name></param>
         </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkSetBufferCollectionBufferConstraintsFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkBufferCollectionFUCHSIA</type> <name>collection</name></param>
+            <param>const <type>VkBufferConstraintsInfoFUCHSIA</type>* <name>pBufferConstraintsInfo</name></param>
+        </command>
         <command>
             <proto><type>void</type> <name>vkDestroyBufferCollectionFUCHSIA</name></proto>
             <param><type>VkDevice</type> <name>device</name></param>
@@ -8845,14 +8864,19 @@
                 <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA"/>
                 <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA"/>
                 <enum offset="6" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA"/>
+                <enum offset="7" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA"/>
+                <enum offset="8" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA"/>
                 <type name="VkBufferCollectionFUCHSIA"/>
                 <type name="VkBufferCollectionCreateInfoFUCHSIA"/>
                 <type name="VkFuchsiaImageFormatFUCHSIA"/>
                 <type name="VkImportMemoryBufferCollectionFUCHSIA"/>
                 <type name="VkBufferCollectionImageCreateInfoFUCHSIA"/>
+                <type name="VkBufferConstraintsInfoFUCHSIA"/>
+                <type name="VkBufferCollectionBufferCreateInfoFUCHSIA"/>
                 <type name="VkBufferCollectionPropertiesFUCHSIA"/>
                 <command name="vkCreateBufferCollectionFUCHSIA"/>
                 <command name="vkSetBufferCollectionConstraintsFUCHSIA"/>
+                <command name="vkSetBufferCollectionBufferConstraintsFUCHSIA"/>
                 <command name="vkDestroyBufferCollectionFUCHSIA"/>
                 <command name="vkGetBufferCollectionPropertiesFUCHSIA"/>
             </require>
diff --git a/scripts/vuid_mapping.py b/scripts/vuid_mapping.py
index 62a142e..1373bd9 100644
--- a/scripts/vuid_mapping.py
+++ b/scripts/vuid_mapping.py
@@ -678,6 +678,9 @@
 'VkSemaphoreGetZirconHandleInfoFUCHSIA' : 622,
 'vkGetSemaphoreZirconHandleFUCHSIA' : 623,
 'VkImportMemoryBufferCollectionFUCHSIA' : 624,
+'VkBufferConstraintsInfoFUCHSIA' : 625,
+'vkSetBufferCollectionBufferConstraintsFUCHSIA' : 626,
+'VkBufferCollectionBufferCreateInfoFUCHSIA' : 627,
 ### ADD New func/struct mappings above this line
 }
 # Mapping of params to unique IDs
@@ -1221,6 +1224,7 @@
 'pCollection' : 536,
 'collection' : 537,
 'pZirconHandle' : 538,
+'requiredFormatFeatures' : 539,
 ### ADD New implicit param mappings above this line
 }