Cover vkGetBufferMemoryRequirements*() routines tests

New tests:
dEQP-VK.api.buffer_memory_requirements.*

Components: Vulkan

VK-GL-CTS issue: 3163

Change-Id: I806d8a420e1e6d204061b3b740500736609263f8
diff --git a/AndroidGen.mk b/AndroidGen.mk
index 16eded9..9e95c10 100644
--- a/AndroidGen.mk
+++ b/AndroidGen.mk
@@ -66,6 +66,7 @@
 	external/vulkancts/modules/vulkan/api/vktApiBufferAndImageAllocationUtil.cpp \
 	external/vulkancts/modules/vulkan/api/vktApiBufferComputeInstance.cpp \
 	external/vulkancts/modules/vulkan/api/vktApiBufferMarkerTests.cpp \
+	external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTests.cpp \
 	external/vulkancts/modules/vulkan/api/vktApiBufferTests.cpp \
 	external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp \
 	external/vulkancts/modules/vulkan/api/vktApiBufferViewCreateTests.cpp \
diff --git a/android/cts/master/vk-master-2021-03-01/api.txt b/android/cts/master/vk-master-2021-03-01/api.txt
index 458b3bc..c166284 100644
--- a/android/cts/master/vk-master-2021-03-01/api.txt
+++ b/android/cts/master/vk-master-2021-03-01/api.txt
@@ -107530,3 +107530,123 @@
 dEQP-VK.api.format_feature_flags2.astc_12x10_srgb_block
 dEQP-VK.api.format_feature_flags2.astc_12x12_unorm_block
 dEQP-VK.api.format_feature_flags2.astc_12x12_srgb_block
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.video_usage_bits
diff --git a/android/cts/master/vk-master/api.txt b/android/cts/master/vk-master/api.txt
index 307cb57..1909b7a 100644
--- a/android/cts/master/vk-master/api.txt
+++ b/android/cts/master/vk-master/api.txt
@@ -224996,3 +224996,123 @@
 dEQP-VK.api.format_feature_flags2.astc_12x10_srgb_block
 dEQP-VK.api.format_feature_flags2.astc_12x12_unorm_block
 dEQP-VK.api.format_feature_flags2.astc_12x12_srgb_block
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.video_usage_bits
diff --git a/external/vulkancts/modules/vulkan/api/CMakeLists.txt b/external/vulkancts/modules/vulkan/api/CMakeLists.txt
index 9b1afa9..d1d1f33 100644
--- a/external/vulkancts/modules/vulkan/api/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/api/CMakeLists.txt
@@ -66,6 +66,9 @@
     vktApiToolingInfoTests.hpp
     vktApiFormatPropertiesExtendedKHRtests.cpp
     vktApiFormatPropertiesExtendedKHRtests.hpp
+	vktApiBufferMemoryRequirementsTests.cpp
+	vktApiBufferMemoryRequirementsTests.hpp
+    vktApiBufferMemoryRequirementsTestsUtils.hpp
 	)
 
 set(DEQP_VK_API_LIBS
diff --git a/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTests.cpp
new file mode 100644
index 0000000..3dfe4ea
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTests.cpp
@@ -0,0 +1,761 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *	  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+* \brief Cover for non-zero of memoryTypeBits from vkGetBufferMemoryRequirements*() tests.
+ *//*--------------------------------------------------------------------*/
+
+#include "vktApiBufferMemoryRequirementsTests.hpp"
+#include "vktApiBufferMemoryRequirementsTestsUtils.hpp"
+
+#include "vkMemUtil.hpp"
+#include "vkQueryUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "deFilePath.hpp"
+#include "tcuTestLog.hpp"
+
+#include <algorithm>
+#include <array>
+#include <functional>
+#include <iostream>
+#include <set>
+#include <sstream>
+#include <tuple>
+#include <vector>
+
+namespace vkt
+{
+namespace api
+{
+namespace
+{
+
+using namespace de;
+using namespace vk;
+using namespace tcu;
+
+struct TestConfig;
+struct InstanceConfig;
+
+enum BufferFateFlagBits
+{
+	Transfer		= 0x01,
+	Storage			= 0x02,
+	Other			= 0x04,
+	AccStructure	= 0x08,
+	Video			= 0x10
+};
+typedef deUint32	BufferFateFlags;
+typedef typename std::add_pointer<typename std::add_const<char>::type>::type	cstr;
+typedef u::BitsSet<BufferFateFlags, BufferFateFlagBits, cstr> BufferFateBits;
+
+const BufferFateBits	AvailableBufferFateBits
+{
+	{ Transfer,		"transfer_usage_bits"	},
+	{ Storage,		"storage_usage_bits"	},
+	{ Other,		"other_usage_bits"		},
+	{ AccStructure,	"acc_struct_usage_bits"	},
+	{ Video,		"video_usage_bits"		}
+};
+
+typedef u::BitsSet<VkBufferCreateFlags, VkBufferCreateFlagBits, cstr>				BufferCreateBits;
+typedef u::BitsSet<VkBufferUsageFlags, VkBufferUsageFlagBits, BufferFateFlagBits>	BufferUsageBits;
+typedef u::BitsSet<VkExternalMemoryHandleTypeFlags,
+					VkExternalMemoryHandleTypeFlagBits, cstr, bool>					ExternalMemoryHandleBits;
+typedef SharedPtr<BufferCreateBits>			BufferCreateBitsPtr;
+typedef SharedPtr<BufferUsageBits>			BufferUsageBitsPtr;
+typedef SharedPtr<ExternalMemoryHandleBits>	ExternalMemoryHandleBitsPtr;
+
+struct TestConfig
+{
+	bool						useMethod2;
+	SharedPtr<BufferCreateBits>	createBits;
+	SharedPtr<BufferFateBits>	fateBits;
+	bool						incExtMemTypeFlags;
+};
+struct InstanceConfig
+{
+	bool												useMethod2;
+	SharedPtr<BufferCreateBits>							createBits;
+	SharedPtr<BufferFateBits>							fateBits;
+	SharedPtr<std::vector<BufferUsageBitsPtr>>			usageFlags;
+	bool												incExtMemTypeFlags;
+	SharedPtr<std::vector<ExternalMemoryHandleBitsPtr>>	extMemHandleFlags;
+
+	InstanceConfig(const TestConfig& conf)
+		: useMethod2			(conf.useMethod2)
+		, createBits			(conf.createBits)
+		, fateBits				(conf.fateBits)
+		, usageFlags			(new std::vector<SharedPtr<BufferUsageBits>>)
+		, incExtMemTypeFlags	(conf.incExtMemTypeFlags)
+		, extMemHandleFlags		(new std::vector<SharedPtr<ExternalMemoryHandleBits>>) {}
+};
+
+const BufferCreateBits	AvailableBufferCreateBits
+{
+	{ VkBufferCreateFlagBits(0),				"no_flags"			},
+	{ VK_BUFFER_CREATE_PROTECTED_BIT,			"protected"			},
+	{ VK_BUFFER_CREATE_SPARSE_BINDING_BIT,		"sparse_binding"	},
+	{ VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,	"sparse_residency"	},
+	{ VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,		"sparse_aliased"	},
+};
+
+const BufferUsageBits	AvailableBufferUsageBits
+{
+	{ VK_BUFFER_USAGE_TRANSFER_SRC_BIT										, Transfer		},
+	{ VK_BUFFER_USAGE_TRANSFER_DST_BIT										, Transfer		},
+	{ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT								, Storage		},
+	{ VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT								, Storage		},
+	{ VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT									, Storage		},
+	{ VK_BUFFER_USAGE_STORAGE_BUFFER_BIT									, Storage		},
+	{ VK_BUFFER_USAGE_INDEX_BUFFER_BIT										, Storage		},
+	{ VK_BUFFER_USAGE_VERTEX_BUFFER_BIT										, Storage		},
+	{ VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT									, Other			},
+	{ VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT								, Other			},
+	{ VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR								, Video			},
+	{ VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR								, Video			},
+	{ VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT						, Other			},
+	{ VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT				, Other			},
+	{ VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT							, Other			},
+	{ VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR	, AccStructure	},
+	{ VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR				, AccStructure	},
+	{ VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR							, AccStructure	},
+	{ VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR								, Video			},
+	{ VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR								, Video			},
+};
+
+#define INTERNALTEST_EXTERNAL_MEMORY_HANDLE_TYPE_NO_BITS VkExternalMemoryHandleTypeFlagBits(0)
+const ExternalMemoryHandleBits	AvailableExternalMemoryHandleBits
+{
+	{ INTERNALTEST_EXTERNAL_MEMORY_HANDLE_TYPE_NO_BITS						, "no_flags",			false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT							, "opaque_fd",			false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT						, "opaque_win32",		false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT					, "opaque_win32_kmt",	false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT						, "d3d11_tex",			false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT					, "d3d11_tex_kmt",		false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT							, "d3d12_heap",			false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT						, "d3d12_rsrc",			false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT						, "dma_buf",			false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID	, "android_hw",			false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT				, "host_alloc",			true  },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT		, "host_mapped",		true  },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA					, "zircon_vmo",			false },
+	{ VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV					, "roma_addr",			false },
+};
+
+template<class Flag, class Bit, class Str, class... Ignored>
+std::string bitsToString (const u::BitsSet<Flag, Bit, Str, Ignored...>& bits,
+						  const std::string& prefix = std::string())
+{
+	DE_ASSERT(!bits.empty());
+	std::stringstream s;
+	s << prefix;
+	bool atLeastOne = false;
+	for (const auto& bit : bits) {
+		if (atLeastOne) s << '_';
+		s << std::get<1>(bit);
+		atLeastOne = true;
+	}
+	return s.str();
+}
+
+void updateBufferCreateFlags(std::vector<BufferCreateBits>& flags)
+{
+	const auto&	residencyBit	= AvailableBufferCreateBits.get(VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT);
+	const auto&	aliasedBit		= AvailableBufferCreateBits.get(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT);
+	const auto&	bindingBit		= AvailableBufferCreateBits.get(VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
+	const auto&	protectedBit	= AvailableBufferCreateBits.get(VK_BUFFER_CREATE_PROTECTED_BIT);
+	const auto&	noneBit			= AvailableBufferCreateBits.get(VkBufferCreateFlagBits(0));
+
+	// VUID-VkBufferCreateInfo-flags-00918 { if sparse residency or sparse aliased include sparse binding }
+	for (auto& bits : flags)
+	{
+		if (bits.contains(residencyBit) || bits.contains(aliasedBit))
+			bits.insert(bindingBit);
+	}
+
+	// VUID-VkBufferCreateInfo-None-01888 { if sparse residency, sparse aliased or sparse binding then flags must not include protected }
+	const typename BufferCreateBits::key_type disallowdBits[] { residencyBit, aliasedBit, bindingBit };
+	for (auto i = flags.begin(); i != flags.end();)
+	{
+		auto& bits = *i;
+		if (bits.contains(protectedBit))
+		{
+			for (const auto& disallowdBit : disallowdBits)
+			{
+				auto find = bits.find(disallowdBit);
+				if (find != bits.end())
+					bits.erase(find);
+			}
+		}
+		i = bits.empty() ? flags.erase(i) : std::next(i);
+	}
+
+	// since 0 is a valid VkBufferCreateFlagBits flag then remove it flags where it exists along with other non-zero flags
+	for (auto i = flags.begin(); i != flags.end(); ++i)
+	{
+		auto& bits = *i;
+		auto find = bits.find(noneBit);
+		if (find != bits.end() && bits.size() > 1)
+		{
+			bits.erase(find);
+		}
+	}
+
+	// remove duplicates
+	for (auto i = flags.begin(); i != flags.end(); ++i)
+	{
+		for (auto j = std::next(i); j != flags.end();)
+			j = (*i == *j) ? flags.erase(j) : std::next(j);
+	}
+}
+
+class BufferMemoryRequirementsInstance : public TestInstance
+{
+public:
+							BufferMemoryRequirementsInstance	(Context&				context,
+																 const InstanceConfig	config)
+								: TestInstance	(context)
+								, m_config		(config) {}
+
+	virtual					~BufferMemoryRequirementsInstance	(void) override = default;
+	virtual tcu::TestStatus	iterate								(void) override;
+
+	void						getBufferMemoryRequirements		(VkMemoryRequirements&	result,
+																 const DeviceInterface&	vkd,
+																 VkDevice				device,
+																 VkBuffer				buffer) const;
+	void						getBufferMemoryRequirements2	(VkMemoryRequirements&	result,
+																 const DeviceInterface&	vkd,
+																 VkDevice				device,
+																 VkBuffer				buffer) const;
+	typedef void (BufferMemoryRequirementsInstance::* Method)	(VkMemoryRequirements&	result,
+																 const DeviceInterface&	intf,
+																 VkDevice				device,
+																 VkBuffer				buffer) const;
+	template<class T, class... AddArgs>
+						void*	chainVkStructure				(void*					pNext,
+																 const AddArgs&...		addArgs) const;
+private:
+	void						logFailedSubtests				(const std::vector<BufferCreateBitsPtr>&			failCreateBits,
+																 const std::vector<BufferUsageBitsPtr>&				failUsageBits,
+																 const std::vector<ExternalMemoryHandleBitsPtr>&	failExtMemHandleBits) const;
+	const InstanceConfig	m_config;
+};
+
+class MemoryRequirementsTest : public TestCase
+{
+public:
+							MemoryRequirementsTest	(TestContext&			testCtx,
+													 const std::string&		name,
+													 const TestConfig		testConfig)
+								: TestCase		(testCtx, name, std::string())
+								, m_testConfig	(testConfig)
+								, m_instConfig	(testConfig) {}
+
+	virtual					~MemoryRequirementsTest	(void) override = default;
+	virtual void			checkSupport			(Context&				context) const override;
+	virtual TestInstance*	createInstance			(Context&				context) const override
+	{
+		return new BufferMemoryRequirementsInstance(context, m_instConfig);
+	}
+
+private:
+	const TestConfig	m_testConfig;
+	InstanceConfig		m_instConfig;
+};
+
+struct Info
+{
+	enum Type {
+		Create,
+		Usage
+	}					m_type;
+	std::ostringstream	m_str;
+	cstr				m_file;
+	int					m_line;
+	template<class Msg>	Info(Type type, const Msg& msg, cstr file, int line)
+		: m_type(type), m_str(), m_file(file), m_line(line) { m_str << msg; }
+	friend std::ostringstream& operator<<(std::ostringstream& str, const Info& info) {
+		switch (info.m_type) {
+		case Create:
+			str << "  Info (Create buffer with " << info.m_str.str() << " not supported by device at "
+				<< de::FilePath(info.m_file).getBaseName() << ":" << info.m_line << ")";
+			break;
+		case Usage:
+			str << "  Info (Create buffer with " << info.m_str.str() << " not supported by device at "
+				<< de::FilePath(info.m_file).getBaseName() << ":" << info.m_line << ")";
+			break;
+		}
+		return str;
+	}
+};
+#define INFOCREATE(msg_) Info(Info::Create, (msg_), __FILE__, __LINE__)
+#define INFOUSAGE(msg_) Info(Info::Usage, (msg_), __FILE__, __LINE__)
+
+void MemoryRequirementsTest::checkSupport (Context& context) const
+{
+	//const DeviceInterface&							vkd					= context.getDeviceInterface();
+	//const VkDevice									device				= context.getDevice();
+
+	const InstanceInterface&						intf				= context.getInstanceInterface();
+	const VkPhysicalDevice							physDevice			= context.getPhysicalDevice();
+	const std::vector<VkExtensionProperties>		supportedExtensions = enumerateDeviceExtensionProperties(intf, physDevice, nullptr);
+
+	VkPhysicalDeviceProtectedMemoryFeatures			protectedMemFeatures
+	{
+		vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES,	// VkStructureType	sType;
+		nullptr,															// void*			pNext;
+		VK_FALSE															// VkBool32			protectedMemory;
+	};
+	VkPhysicalDeviceFeatures2						extFeatures
+	{
+		vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,					// VkStructureType			sType;
+		&protectedMemFeatures,												// void*					pNext;
+		{}																	// VkPhysicalDeviceFeatures	features;
+	};
+	intf.getPhysicalDeviceFeatures2(physDevice, &extFeatures);
+
+	const VkPhysicalDeviceFeatures&	features					= extFeatures.features;
+	const VkBool32&					protectedMemFeatureEnabled	= protectedMemFeatures.protectedMemory;
+
+
+	// check the creating bits
+	{
+		std::ostringstream			str;
+		bool		notSupported	= false;
+		const auto& createBits		= *m_testConfig.createBits;
+
+		if (createBits.contains(VK_BUFFER_CREATE_SPARSE_BINDING_BIT) && (VK_FALSE == features.sparseBinding))
+		{
+			if (notSupported) str << std::endl;
+			str << INFOCREATE(getBufferCreateFlagsStr(VK_BUFFER_CREATE_SPARSE_BINDING_BIT));
+			notSupported = true;
+		}
+		if (createBits.contains(VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT) && (VK_FALSE == features.sparseResidencyBuffer))
+		{
+			if (notSupported) str << std::endl;
+			str << INFOCREATE(getBufferCreateFlagsStr(VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT));
+			notSupported = true;
+		}
+		if (createBits.contains(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT) && (VK_FALSE == features.sparseResidencyAliased))
+		{
+			if (notSupported) str << std::endl;
+			str << INFOCREATE(getBufferCreateFlagsStr(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT));
+			notSupported = true;
+		}
+		if (createBits.contains(VK_BUFFER_CREATE_PROTECTED_BIT) && (VK_FALSE == protectedMemFeatureEnabled))
+		{
+			if (notSupported) str << std::endl;
+			str << INFOCREATE(getBufferCreateFlagsStr(VK_BUFFER_CREATE_PROTECTED_BIT));
+			notSupported = true;
+		}
+		if (notSupported)
+		{
+			std::cout << str.str() << std::endl;
+			TCU_THROW(NotSupportedError, "One or more create buffer flags not supported by device");
+		}
+	}
+
+	// check the usage bits and build instance input
+	{
+		std::vector<BufferUsageBits>	usageFlags;
+		for (const auto& bit : *m_testConfig.fateBits)
+		{
+			auto fate = m_testConfig.fateBits->extract(bit);
+			std::vector<VkBufferUsageFlags>		usageHints;
+			std::vector<BufferUsageBits>		usageFlagsTmp;
+			u::combine(usageFlagsTmp, AvailableBufferUsageBits.select<1>(fate), usageHints);
+			u::mergeFlags(usageFlags, usageFlagsTmp);
+		}
+
+		std::ostringstream str;
+		std::array<bool, 5> msgs;
+		bool notSupported	= false;
+		int  entryCount		= 0;
+		msgs.fill(false);
+
+		for (auto i = usageFlags.begin(); i != usageFlags.end();)
+		{
+			notSupported = false;
+
+			if (i->any({VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR,
+					   VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR, VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR})
+					&& !isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_acceleration_structure")))
+			{
+				if (!msgs[0])
+				{
+					if (entryCount++) str << std::endl;
+					str << INFOUSAGE("VK_KHR_acceleration_structure not supported by device");
+					msgs[0] = true;
+				}
+				notSupported = true;
+			}
+
+			if (i->contains(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT)
+					&& !isExtensionSupported(supportedExtensions, RequiredExtension("VK_EXT_buffer_device_address")))
+			{
+				if (!msgs[1])
+				{
+					if (entryCount++) str << std::endl;
+					str << INFOUSAGE("VK_EXT_buffer_device_address not supported by device");
+					msgs[1] = true;
+				}
+				notSupported = true;
+			}
+
+			if (i->any({VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR, VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR,
+					   VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR}))
+			{
+
+			}
+
+			i = notSupported ? usageFlags.erase(i) : std::next(i);
+		}
+
+		// remove duplicates
+		for (auto i = usageFlags.begin(); i != usageFlags.end(); ++i)
+		{
+			for (auto j = std::next(i); j != usageFlags.end();)
+				j = (*i == *j) ? usageFlags.erase(j) : std::next(j);
+		}
+
+		if (usageFlags.empty())
+		{
+			std::cout << str.str() << std::endl;
+			TCU_THROW(NotSupportedError, "One or more buffer usage flags not supported by device");
+		}
+		else
+		{
+			if (entryCount > 0)
+			{
+				std::cout << str.str() << std::endl;
+			}
+			DE_ASSERT(m_instConfig.usageFlags.get());
+			m_instConfig.usageFlags->resize(usageFlags.size());
+			std::transform(usageFlags.begin(), usageFlags.end(), m_instConfig.usageFlags->begin(),
+						   [](BufferUsageBits& bits){ return BufferUsageBits::makeShared(std::move(bits)); });
+		}
+	}
+
+	// check the external memory handle type bits and build instance input
+	{
+		std::vector<ExternalMemoryHandleBits>	extMemHandleFlags;
+		if (m_testConfig.incExtMemTypeFlags)
+			extMemHandleFlags.push_back({AvailableExternalMemoryHandleBits.get(INTERNALTEST_EXTERNAL_MEMORY_HANDLE_TYPE_NO_BITS)});
+		else
+		{
+			std::vector<VkExternalMemoryHandleTypeFlags>	handleHints;
+			std::vector<ExternalMemoryHandleBits>			handleFlagsTmp;
+			u::combine(handleFlagsTmp, AvailableExternalMemoryHandleBits.select<2>(true), handleHints);
+			u::mergeFlags(extMemHandleFlags, handleFlagsTmp);
+		}
+
+		DE_ASSERT(m_instConfig.extMemHandleFlags.get());
+		m_instConfig.extMemHandleFlags->resize(extMemHandleFlags.size());
+		std::transform(extMemHandleFlags.begin(), extMemHandleFlags.end(), m_instConfig.extMemHandleFlags->begin(),
+					   [](ExternalMemoryHandleBits& bits){ return ExternalMemoryHandleBits::makeShared(std::move(bits)); });
+	}
+}
+
+void BufferMemoryRequirementsInstance::logFailedSubtests (const std::vector<BufferCreateBitsPtr>&			failCreateBits,
+														  const std::vector<BufferUsageBitsPtr>&			failUsageBits,
+														  const std::vector<ExternalMemoryHandleBitsPtr>&	failExtMemHandleBits) const
+{
+	const deUint32	flagCount	= deUint32(failCreateBits.size());
+	TestLog&		log			= m_context.getTestContext().getLog();
+	deUint32		entries		= 0;
+
+	DE_ASSERT(flagCount && flagCount == failUsageBits.size() && flagCount == failExtMemHandleBits.size());
+
+	log << TestLog::Section("Failed", "Failed subtests");
+
+	for (deUint32 i = 0; i < flagCount; ++i)
+	{
+		{
+			log << TestLog::Section("VkBufferCreateFlags", "Buffer create flags");
+			auto msg = log << TestLog::Message;
+			entries = 0;
+			for (const auto& createBit : *failCreateBits[i])
+			{
+				if (entries++) msg << " ";
+				const VkBufferCreateFlags flags = BufferCreateBits::extract(createBit);
+				if (flags == 0)
+					msg << "0";
+				else msg << getBufferCreateFlagsStr(flags);
+			}
+			msg << TestLog::EndMessage << TestLog::EndSection;
+		}
+
+		{
+			log << TestLog::Section("VkBufferUsageFlags", "Buffer usage flags");
+			auto msg = log << TestLog::Message;
+			entries = 0;
+			for (const auto& usageBit : *failUsageBits[i])
+			{
+				if (entries++) msg << " ";
+				msg << getBufferUsageFlagsStr(BufferUsageBits::extract(usageBit));
+			}
+			msg << TestLog::EndMessage << TestLog::EndSection;
+		}
+
+		{
+			log << TestLog::Section("VkExternalMemoryHandleTypeFlags", "External memory handle type flags");
+			auto msg = log << TestLog::Message;
+			entries = 0;
+			for (const auto& extMemHandleTypeBit : *failExtMemHandleBits[i])
+			{
+				if (entries++) msg << " ";
+				msg << getExternalMemoryHandleTypeFlagsStr(ExternalMemoryHandleBits::extract(extMemHandleTypeBit));
+			}
+			msg << TestLog::EndMessage << TestLog::EndSection;
+		}
+	}
+
+	log << TestLog::EndSection;
+}
+
+void BufferMemoryRequirementsInstance::getBufferMemoryRequirements2	(VkMemoryRequirements&	result,
+																	 const DeviceInterface&	vkd,
+																	 VkDevice				device,
+																	 VkBuffer				buffer) const
+{
+	VkMemoryDedicatedRequirements	dedicatedRequirements	=
+	{
+		VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS,		// VkStructureType			sType;
+		nullptr,												// const void*				pNext;
+		VK_FALSE,												// VkBool32					prefersDedicatedAllocation
+		VK_FALSE												// VkBool32					requiresDedicatedAllocation
+	};
+
+	VkMemoryRequirements2			desiredRequirements		=
+	{
+		VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,				// VkStructureType			sType
+		&dedicatedRequirements,									// void*					pNext
+		result													// VkMemoryRequirements		memoryRequirements
+	};
+
+	VkBufferMemoryRequirementsInfo2	requirementsInfo		=
+	{
+		VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,	// VkStructureType			sType
+		nullptr,												// const void*				pNext
+		buffer													// VkBuffer					buffer
+	};
+
+	vkd.getBufferMemoryRequirements2(device, &requirementsInfo, &desiredRequirements);
+
+	result = desiredRequirements.memoryRequirements;
+}
+
+void BufferMemoryRequirementsInstance::getBufferMemoryRequirements	(VkMemoryRequirements&	result,
+																	 const DeviceInterface&	vkd,
+																	 VkDevice				device,
+																	 VkBuffer				buffer) const
+{
+	vkd.getBufferMemoryRequirements(device, buffer, &result);
+}
+
+template<> void*
+BufferMemoryRequirementsInstance::chainVkStructure<VkExternalMemoryBufferCreateInfo> (void* pNext, const VkExternalMemoryHandleTypeFlags& handleTypes) const
+{
+	static VkExternalMemoryBufferCreateInfo	memInfo{};
+	memInfo.sType		= VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO;
+	memInfo.pNext		= pNext;
+	memInfo.handleTypes	= handleTypes;
+
+	return &memInfo;
+}
+
+template<> void* BufferMemoryRequirementsInstance::chainVkStructure<VkVideoProfilesKHR> (void* pNext) const
+{
+	static const VkVideoProfileKHR		videoProfile
+	{
+		VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR,					// VkStructureType					sType;
+		nullptr,												// void*							pNext;
+		VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR,				// VkVideoCodecOperationFlagBitsKHR	videoCodecOperation;
+		VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR,			// VkVideoChromaSubsamplingFlagsKHR	chromaSubsampling;
+		VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,					// VkVideoComponentBitDepthFlagsKHR	lumaBitDepth;
+		VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR					// VkVideoComponentBitDepthFlagsKHR	chromaBitDepth;
+	};
+
+	 static VkVideoProfilesKHR	profiles;
+	 profiles.sType			= VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR;
+	 profiles.pNext			= pNext;
+	 profiles.profileCount	= 1u;
+	 profiles.pProfiles		= &videoProfile;
+
+	 return &profiles;
+}
+
+TestStatus	BufferMemoryRequirementsInstance::iterate (void)
+{
+	const DeviceInterface&							vkd					= m_context.getDeviceInterface();
+	const VkDevice									device				= m_context.getDevice();
+	const deUint32									queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	const Method									method				= m_config.useMethod2
+																			? &BufferMemoryRequirementsInstance::getBufferMemoryRequirements2
+																			: &BufferMemoryRequirementsInstance::getBufferMemoryRequirements;
+
+	deUint32										passCount			= 0;
+	deUint32										failCount			= 0;
+	std::vector<BufferCreateBitsPtr>				failCreateBits;
+	std::vector<BufferUsageBitsPtr>					failUsageBits;
+	std::vector<ExternalMemoryHandleBitsPtr>		failExtMemHandleBits;
+
+	DE_ASSERT(!m_config.createBits->empty());
+	const VkBufferCreateFlags infoCreateFlags = *m_config.createBits;
+	{
+		DE_ASSERT(!m_config.usageFlags->empty());
+		for (auto u = m_config.usageFlags->cbegin(); u != m_config.usageFlags->cend(); ++u)
+		{
+			const VkBufferUsageFlags infoUsageFlags = *u;
+
+			DE_ASSERT(!m_config.extMemHandleFlags->empty());
+			for (auto m = m_config.extMemHandleFlags->cbegin(); m != m_config.extMemHandleFlags->cend(); ++m)
+			{
+				const VkExternalMemoryHandleTypeFlags handleFlags = *m;
+
+				void* pNext = nullptr;
+
+				if (m_config.fateBits->contains(BufferFateFlagBits::Video))
+				{
+					pNext = chainVkStructure<VkVideoProfilesKHR>(pNext);
+				}
+				if (m_config.incExtMemTypeFlags)
+				{
+					pNext = chainVkStructure<VkExternalMemoryBufferCreateInfo>(pNext, handleFlags);
+				}
+				const VkBufferCreateInfo	createInfo
+				{
+					VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,					// VkStructureType					sType;
+					pNext,													// const void*						pNext;
+					infoCreateFlags,										// VkBufferCreateFlags				flags;
+					4096u,													// VkDeviceSize						size;
+					infoUsageFlags,											// VkBufferUsageFlags				usage;
+					VK_SHARING_MODE_EXCLUSIVE,								// VkSharingMode					sharingMode;
+					1u,														// uint32_t							queueFamilyIndexCount;
+					&queueFamilyIndex,										// const uint32_t*					pQueueFamilyIndices;
+				};
+
+				Move<VkBuffer> buffer = createBuffer(vkd, device, &createInfo);
+
+				VkMemoryRequirements		reqs{};
+				(this->*method)(reqs, vkd, device, *buffer);
+				if (reqs.memoryTypeBits)
+					++passCount;
+				else
+				{
+					++failCount;
+					failCreateBits.emplace_back(m_config.createBits);
+					failUsageBits.emplace_back(*u);
+					failExtMemHandleBits.emplace_back(*m);
+				}
+			}
+		}
+	}
+
+	if (failCount)
+	{
+		logFailedSubtests(failCreateBits, failUsageBits, failExtMemHandleBits);
+		return TestStatus::fail(std::to_string(failCount));
+	}
+
+	return TestStatus::pass(std::to_string(passCount));
+}
+
+} // unnamed namespace
+
+tcu::TestCaseGroup* createBufferMemoryRequirementsTests (tcu::TestContext& testCtx)
+{
+	cstr nilstr = "";
+
+	struct
+	{
+		bool		include;
+		cstr		name;
+	} const extMemTypeFlags[] { { false, "ext_mem_flags_excluded" }, { true, "ext_mem_flags_included" } };
+
+	struct
+	{
+		bool		method;
+		cstr		name;
+	} const methods[] { { false, "method1" }, { true, "mothod2" } };
+
+	std::vector<SharedPtr<BufferCreateBits>>	createBitPtrs;
+	{
+		std::vector<VkBufferCreateFlags>		hints;
+		std::vector<BufferCreateBits>			createFlags;
+		u::combine(createFlags,	AvailableBufferCreateBits, hints);
+		updateBufferCreateFlags(createFlags);
+		createBitPtrs.resize(createFlags.size());
+		std::transform(createFlags.begin(), createFlags.end(), createBitPtrs.begin(),
+					   [](BufferCreateBits& bits) { return BufferCreateBits::makeShared(std::move(bits)); });
+	}
+
+	std::vector<SharedPtr<BufferFateBits>>	fateBitPtrs;
+	{
+		// An excerpt above has been disabled consciously for the sake of computational complexity.
+		// Enabled block does the same things sequentially, it doesn't create cartesian product of combination of bits.
+#if 0
+		std::vector<BufferFateFlags>	hints;
+		std::vector<BufferFateBits>		bufferFateFlags;
+		u::combine(bufferFateFlags, AvailableBufferFateBits, hints);
+		fateBitPtrs.resize(bufferFateFlags.size());
+		std::transform(bufferFateFlags.begin(), bufferFateFlags.end(), fateBitPtrs.begin(),
+					   [](BufferFateBits& bits) { return BufferFateBits::makeShared(std::move(bits)); });
+#else
+		fateBitPtrs.resize(AvailableBufferFateBits.size());
+		std::transform(AvailableBufferFateBits.begin(), AvailableBufferFateBits.end(), fateBitPtrs.begin(),
+					   [](const typename BufferFateBits::value_type& bit) { return BufferFateBits::makeShared(bit); });
+#endif
+	}
+
+	auto groupRoot = new TestCaseGroup(testCtx, "buffer_memory_requirements", "vkGetBufferMemoryRequirements*(...) routines tests.");
+	for (const auto& createBits : createBitPtrs)
+	{
+		auto groupCreate = new TestCaseGroup(testCtx, bitsToString(*createBits, "create_").c_str(), nilstr);
+		for (const auto& extMemTypeFlag : extMemTypeFlags)
+		{
+			auto groupExtMemTypeFlags = new TestCaseGroup(testCtx, extMemTypeFlag.name, nilstr);
+			for (const auto& method : methods)
+			{
+				auto groupMethod = new TestCaseGroup(testCtx, method.name, nilstr);
+				for (const auto& fateBits : fateBitPtrs)
+				{
+					TestConfig	config;
+					config.fateBits				= fateBits;
+					config.incExtMemTypeFlags	= extMemTypeFlag.include;
+					config.createBits			= createBits;
+					config.useMethod2			= method.method;
+					groupMethod->addChild(new MemoryRequirementsTest(testCtx, bitsToString(*fateBits).c_str(), config));
+				}
+				groupExtMemTypeFlags->addChild(groupMethod);
+			}
+			groupCreate->addChild(groupExtMemTypeFlags);
+		}
+		groupRoot->addChild(groupCreate);
+	}
+
+	return groupRoot;
+}
+} // api
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTests.hpp b/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTests.hpp
new file mode 100644
index 0000000..ddac12b
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTests.hpp
@@ -0,0 +1,43 @@
+#ifndef _VKTAPIBUFFERMEMORYREQUIREMENTSTESTS_HPP
+#define _VKTAPIBUFFERMEMORYREQUIREMENTSTESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *	  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Cover for non-zero of memoryTypeBits from vkGetBufferMemoryRequirements*() tests.
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuVectorType.hpp"
+#include "vkRef.hpp"
+#include "vkMemUtil.hpp"
+#include "vktTestCase.hpp"
+
+namespace vkt
+{
+namespace api
+{
+
+tcu::TestCaseGroup* createBufferMemoryRequirementsTests (tcu::TestContext& testCtx);
+
+} // api
+} // vkt
+
+#endif // _VKTAPIBUFFERMEMORYREQUIREMENTSTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTestsUtils.hpp b/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTestsUtils.hpp
new file mode 100644
index 0000000..a253e2a
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/api/vktApiBufferMemoryRequirementsTestsUtils.hpp
@@ -0,0 +1,204 @@
+#ifndef _VKTAPIBUFFERMEMORYREQUIREMENTSTESTSUTILS_HPP
+#define _VKTAPIBUFFERMEMORYREQUIREMENTSTESTSUTILS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *	  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Utilities for vktApiMemoryRequirementsTests.
+ *//*--------------------------------------------------------------------*/
+
+#include "deDefs.h"
+#include "deSharedPtr.hpp"
+
+#include <initializer_list>
+#include <set>
+#include <tuple>
+#include <type_traits>
+#include <utility>
+#include <vector>
+
+namespace vkt
+{
+namespace api
+{
+namespace u
+{
+
+template<class> struct tc;
+template<class Key, class... Ignored>
+struct tc<std::tuple<Key, Ignored...>> {
+	typedef std::tuple<Key, Ignored...> T;
+	bool operator()(const T& l, const T& r) const
+		{ return std::get<0>(l) < std::get<0>(r); }
+};
+
+template<class Flag, class Bit, class... Ignored>
+struct BitsSet : public std::set<std::tuple<Bit, Ignored...>, tc<std::tuple<Bit, Ignored...>>>
+{
+	typedef Bit	bit_type;
+	typedef Flag flag_type;
+	typedef std::tuple<Bit, Ignored...> value_type;
+	typedef std::set<value_type, tc<value_type>> base;
+	typedef typename base::const_iterator const_iterator;
+	BitsSet(std::initializer_list<value_type> list) : base(list) {}
+	BitsSet(BitsSet&& other) : base(std::forward<BitsSet>(other)) {}
+	BitsSet(const BitsSet& other) : base(other) {}
+	BitsSet() = default;
+	BitsSet& operator=(const BitsSet& other) {
+		base::operator=(other);
+		return *this;
+	}
+	BitsSet& operator=(BitsSet&& other) {
+		base::operator=(std::forward<BitsSet>(other));
+		return *this;
+	}
+	operator Flag() const {
+		Flag flag = static_cast<Flag>(0);
+		for (const auto& bit : *this)
+			flag |= std::get<0>(bit);
+		return flag;
+	}
+	Flag operator()() const {
+		return static_cast<Flag>(*this);
+	}
+	bool contains(const Bit& bit) const {
+		for (const auto& myBit : *this)
+			if (bit == std::get<0>(myBit)) return true;
+		return false;
+	}
+	bool any(std::initializer_list<Bit> bits) const {
+		for (auto i = bits.begin(); i != bits.end(); ++i)
+			if (contains(*i)) return true;
+		return false;
+	}
+	bool all(std::initializer_list<Bit> bits) const {
+		for (auto i = bits.begin(); i != bits.end(); ++i)
+			if (!contains(*i)) return false;
+		return true;
+	}
+	bool contains(const value_type& bit) const {
+		return contains(std::get<0>(bit));
+	}
+	const_iterator find(const Bit& bit) const {
+		auto end = std::end(*this);
+		for (auto i = std::begin(*this); i != end; ++i)
+			if (bit == std::get<0>(*i))
+				return i;
+		return end;
+	}
+	const_iterator find(const value_type& bit) const {
+		return find(std::get<0>(bit));
+	}
+	const value_type& get(const Bit& bit) const {
+		auto search = find(bit);
+		DE_ASSERT(search != std::end(*this));
+		return *search;
+	}
+	static Bit extract(const value_type& bit) {
+		return std::get<0>(bit);
+	}
+	template<size_t Index, class TypeAt>
+	BitsSet select(const TypeAt& typeAtIndex) const {
+		static_assert(std::is_same<TypeAt, typename std::tuple_element<Index, value_type>::type>::value, "");
+		BitsSet result;
+		for (const auto& bit : *this) {
+			if (typeAtIndex == std::get<Index>(bit))
+					result.insert(bit);
+		}
+		return result;
+	}
+	de::SharedPtr<BitsSet> makeShared() const {
+		return de::SharedPtr<BitsSet>(new BitsSet(*this));
+	}
+	static de::SharedPtr<BitsSet> makeShared(const value_type& bit) {
+		return de::SharedPtr<BitsSet>(new BitsSet({bit}));
+	}
+	static de::SharedPtr<BitsSet> makeShared(BitsSet&& src) {
+		return de::SharedPtr<BitsSet>(new BitsSet(std::move(src)));
+	}
+};
+
+template<class Flag, class Bits, class... Ignored>
+std::vector<Flag> mergeFlags
+(
+	const std::vector<Flag>&							flags1,
+	const std::vector<BitsSet<Flag, Bits, Ignored...>>&	flags2
+)
+{
+	std::vector<Flag>	result;
+	if (!flags1.empty() && !flags2.empty()) {
+		for (const auto& flag1 : flags1) {
+			for (const auto& flag2 : flags2)
+				result.emplace_back(flag1 | flag2);
+		}
+	}
+	else if (flags2.empty()) {
+		result = flags1;
+	}
+	else if (flags1.empty()) {
+		for (const auto& flag2 : flags2)
+			result.emplace_back(flag2);
+	}
+	return result;
+}
+
+template<class Flag, class Bits, class... Ignored>
+void mergeFlags
+(
+	std::vector<BitsSet<Flag, Bits, Ignored...>>&		inout,
+	const std::vector<BitsSet<Flag, Bits, Ignored...>>&	flags
+)
+{
+	if (inout.empty())
+		inout.insert(inout.end(), flags.begin(), flags.end());
+	else {
+		for (auto& bits1: inout) {
+			for (const auto& bits2 : flags)
+				bits1.insert(bits2.begin(), bits2.end());
+		}
+	}
+}
+
+template<class Flag, class Bit, class... Ignored>
+void combine
+(
+	std::vector<BitsSet<Flag, Bit, Ignored...>>&	result,
+	const BitsSet<Flag, Bit, Ignored...>&			bits,
+	std::vector<Flag>&								hints
+)
+{
+	const Flag flag = bits();
+	if (bits.empty() || hints.end() != std::find(hints.begin(), hints.end(), flag)) return;
+	hints.emplace_back(flag);
+	result.emplace_back(bits);
+	for (deUint32 b = 0; b < bits.size(); ++b) {
+		BitsSet<Flag, Bit, Ignored...>	tmp(bits);
+		tmp.erase(std::next(tmp.begin(), b));
+		combine(result, tmp, hints);
+	}
+
+	return ::vkt::api::u::combine<Flag>(result, bits, hints);
+}
+
+} // u
+} // api
+} // vkt
+
+#endif // _VKTAPIBUFFERMEMORYREQUIREMENTSTESTSUTILS_HPP
diff --git a/external/vulkancts/modules/vulkan/api/vktApiTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiTests.cpp
index f64f84f..e9becf6 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiTests.cpp
@@ -50,6 +50,7 @@
 #include "vktApiMemoryRequirementInvarianceTests.hpp"
 #include "vktApiToolingInfoTests.hpp"
 #include "vktApiFormatPropertiesExtendedKHRtests.hpp"
+#include "vktApiBufferMemoryRequirementsTests.hpp"
 
 namespace vkt
 {
@@ -96,6 +97,7 @@
 	apiTests->addChild(createMemoryRequirementInvarianceTests	(testCtx));
 	apiTests->addChild(createToolingInfoTests					(testCtx));
 	apiTests->addChild(createFormatPropertiesExtendedKHRTests	(testCtx));
+	apiTests->addChild(createBufferMemoryRequirementsTests		(testCtx));
 }
 
 } // anonymous
diff --git a/external/vulkancts/mustpass/master/vk-default/api.txt b/external/vulkancts/mustpass/master/vk-default/api.txt
index 87debc1..ccf50d6 100644
--- a/external/vulkancts/mustpass/master/vk-default/api.txt
+++ b/external/vulkancts/mustpass/master/vk-default/api.txt
@@ -224995,3 +224995,123 @@
 dEQP-VK.api.format_feature_flags2.astc_12x10_srgb_block
 dEQP-VK.api.format_feature_flags2.astc_12x12_unorm_block
 dEQP-VK.api.format_feature_flags2.astc_12x12_srgb_block
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_protected.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_aliased.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding_sparse_residency_sparse_aliased.ext_mem_flags_included.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_excluded.mothod2.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method1.video_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.transfer_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.storage_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.other_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.acc_struct_usage_bits
+dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.mothod2.video_usage_bits