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