+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_50
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_50
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_50
+dEQP-VK.memory.pageable_allocation.basic.percent_1.forward.count_12
+dEQP-VK.memory.pageable_allocation.basic.percent_1.reverse.count_12
+dEQP-VK.memory.pageable_allocation.basic.percent_1.mixed.count_12
+dEQP-VK.memory.pageable_allocation.random.0
+dEQP-VK.memory.pageable_allocation.random.1
+dEQP-VK.memory.pageable_allocation.random.2
+dEQP-VK.memory.pageable_allocation.random.3
+dEQP-VK.memory.pageable_allocation.random.4
+dEQP-VK.memory.pageable_allocation.random.5
+dEQP-VK.memory.pageable_allocation.random.6
+dEQP-VK.memory.pageable_allocation.random.7
+dEQP-VK.memory.pageable_allocation.random.8
+dEQP-VK.memory.pageable_allocation.random.9
+dEQP-VK.memory.pageable_allocation.random.10
+dEQP-VK.memory.pageable_allocation.random.11
+dEQP-VK.memory.pageable_allocation.random.12
+dEQP-VK.memory.pageable_allocation.random.13
+dEQP-VK.memory.pageable_allocation.random.14
+dEQP-VK.memory.pageable_allocation.random.15
+dEQP-VK.memory.pageable_allocation.random.16
+dEQP-VK.memory.pageable_allocation.random.17
+dEQP-VK.memory.pageable_allocation.random.18
+dEQP-VK.memory.pageable_allocation.random.19
+dEQP-VK.memory.pageable_allocation.random.20
+dEQP-VK.memory.pageable_allocation.random.21
+dEQP-VK.memory.pageable_allocation.random.22
+dEQP-VK.memory.pageable_allocation.random.23
+dEQP-VK.memory.pageable_allocation.random.24
+dEQP-VK.memory.pageable_allocation.random.25
+dEQP-VK.memory.pageable_allocation.random.26
+dEQP-VK.memory.pageable_allocation.random.27
+dEQP-VK.memory.pageable_allocation.random.28
+dEQP-VK.memory.pageable_allocation.random.29
+dEQP-VK.memory.pageable_allocation.random.30
+dEQP-VK.memory.pageable_allocation.random.31
+dEQP-VK.memory.pageable_allocation.random.32
+dEQP-VK.memory.pageable_allocation.random.33
+dEQP-VK.memory.pageable_allocation.random.34
+dEQP-VK.memory.pageable_allocation.random.35
+dEQP-VK.memory.pageable_allocation.random.36
+dEQP-VK.memory.pageable_allocation.random.37
+dEQP-VK.memory.pageable_allocation.random.38
+dEQP-VK.memory.pageable_allocation.random.39
+dEQP-VK.memory.pageable_allocation.random.40
+dEQP-VK.memory.pageable_allocation.random.41
+dEQP-VK.memory.pageable_allocation.random.42
+dEQP-VK.memory.pageable_allocation.random.43
+dEQP-VK.memory.pageable_allocation.random.44
+dEQP-VK.memory.pageable_allocation.random.45
+dEQP-VK.memory.pageable_allocation.random.46
+dEQP-VK.memory.pageable_allocation.random.47
+dEQP-VK.memory.pageable_allocation.random.48
+dEQP-VK.memory.pageable_allocation.random.49
+dEQP-VK.memory.pageable_allocation.random.50
+dEQP-VK.memory.pageable_allocation.random.51
+dEQP-VK.memory.pageable_allocation.random.52
+dEQP-VK.memory.pageable_allocation.random.53
+dEQP-VK.memory.pageable_allocation.random.54
+dEQP-VK.memory.pageable_allocation.random.55
+dEQP-VK.memory.pageable_allocation.random.56
+dEQP-VK.memory.pageable_allocation.random.57
+dEQP-VK.memory.pageable_allocation.random.58
+dEQP-VK.memory.pageable_allocation.random.59
+dEQP-VK.memory.pageable_allocation.random.60
+dEQP-VK.memory.pageable_allocation.random.61
+dEQP-VK.memory.pageable_allocation.random.62
+dEQP-VK.memory.pageable_allocation.random.63
+dEQP-VK.memory.pageable_allocation.random.64
+dEQP-VK.memory.pageable_allocation.random.65
+dEQP-VK.memory.pageable_allocation.random.66
+dEQP-VK.memory.pageable_allocation.random.67
+dEQP-VK.memory.pageable_allocation.random.68
+dEQP-VK.memory.pageable_allocation.random.69
+dEQP-VK.memory.pageable_allocation.random.70
+dEQP-VK.memory.pageable_allocation.random.71
+dEQP-VK.memory.pageable_allocation.random.72
+dEQP-VK.memory.pageable_allocation.random.73
+dEQP-VK.memory.pageable_allocation.random.74
+dEQP-VK.memory.pageable_allocation.random.75
+dEQP-VK.memory.pageable_allocation.random.76
+dEQP-VK.memory.pageable_allocation.random.77
+dEQP-VK.memory.pageable_allocation.random.78
+dEQP-VK.memory.pageable_allocation.random.79
+dEQP-VK.memory.pageable_allocation.random.80
+dEQP-VK.memory.pageable_allocation.random.81
+dEQP-VK.memory.pageable_allocation.random.82
+dEQP-VK.memory.pageable_allocation.random.83
+dEQP-VK.memory.pageable_allocation.random.84
+dEQP-VK.memory.pageable_allocation.random.85
+dEQP-VK.memory.pageable_allocation.random.86
+dEQP-VK.memory.pageable_allocation.random.87
+dEQP-VK.memory.pageable_allocation.random.88
+dEQP-VK.memory.pageable_allocation.random.89
+dEQP-VK.memory.pageable_allocation.random.90
+dEQP-VK.memory.pageable_allocation.random.91
+dEQP-VK.memory.pageable_allocation.random.92
+dEQP-VK.memory.pageable_allocation.random.93
+dEQP-VK.memory.pageable_allocation.random.94
+dEQP-VK.memory.pageable_allocation.random.95
+dEQP-VK.memory.pageable_allocation.random.96
+dEQP-VK.memory.pageable_allocation.random.97
+dEQP-VK.memory.pageable_allocation.random.98
+dEQP-VK.memory.pageable_allocation.random.99
dEQP-VK.memory.mapping.suballocation.full.variable.implicit_unmap
dEQP-VK.memory.mapping.dedicated_alloc.buffer.full.variable.implicit_unmap
dEQP-VK.memory.mapping.dedicated_alloc.image.full.variable.implicit_unmap
dEQP-VK.memory.requirements.create_info.multiplane_image.sparse_residency_optimal
dEQP-VK.memory.requirements.create_info.multiplane_image.sparse_aliased_optimal
dEQP-VK.memory.requirements.create_info.multiplane_image.sparse_residency_aliased_optimal
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_257
dEQP-VK.memory.device_memory_report.create_and_destroy_object.device
dEQP-VK.memory.device_memory_report.create_and_destroy_object.device_memory_small
dEQP-VK.memory.device_memory_report.create_and_destroy_object.buffer_uniform_small
dEQP-VK.memory.device_group_allocation.random.97
dEQP-VK.memory.device_group_allocation.random.98
dEQP-VK.memory.device_group_allocation.random.99
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_50
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_50
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_50
+dEQP-VK.memory.pageable_allocation.basic.percent_1.forward.count_12
+dEQP-VK.memory.pageable_allocation.basic.percent_1.reverse.count_12
+dEQP-VK.memory.pageable_allocation.basic.percent_1.mixed.count_12
+dEQP-VK.memory.pageable_allocation.random.0
+dEQP-VK.memory.pageable_allocation.random.1
+dEQP-VK.memory.pageable_allocation.random.2
+dEQP-VK.memory.pageable_allocation.random.3
+dEQP-VK.memory.pageable_allocation.random.4
+dEQP-VK.memory.pageable_allocation.random.5
+dEQP-VK.memory.pageable_allocation.random.6
+dEQP-VK.memory.pageable_allocation.random.7
+dEQP-VK.memory.pageable_allocation.random.8
+dEQP-VK.memory.pageable_allocation.random.9
+dEQP-VK.memory.pageable_allocation.random.10
+dEQP-VK.memory.pageable_allocation.random.11
+dEQP-VK.memory.pageable_allocation.random.12
+dEQP-VK.memory.pageable_allocation.random.13
+dEQP-VK.memory.pageable_allocation.random.14
+dEQP-VK.memory.pageable_allocation.random.15
+dEQP-VK.memory.pageable_allocation.random.16
+dEQP-VK.memory.pageable_allocation.random.17
+dEQP-VK.memory.pageable_allocation.random.18
+dEQP-VK.memory.pageable_allocation.random.19
+dEQP-VK.memory.pageable_allocation.random.20
+dEQP-VK.memory.pageable_allocation.random.21
+dEQP-VK.memory.pageable_allocation.random.22
+dEQP-VK.memory.pageable_allocation.random.23
+dEQP-VK.memory.pageable_allocation.random.24
+dEQP-VK.memory.pageable_allocation.random.25
+dEQP-VK.memory.pageable_allocation.random.26
+dEQP-VK.memory.pageable_allocation.random.27
+dEQP-VK.memory.pageable_allocation.random.28
+dEQP-VK.memory.pageable_allocation.random.29
+dEQP-VK.memory.pageable_allocation.random.30
+dEQP-VK.memory.pageable_allocation.random.31
+dEQP-VK.memory.pageable_allocation.random.32
+dEQP-VK.memory.pageable_allocation.random.33
+dEQP-VK.memory.pageable_allocation.random.34
+dEQP-VK.memory.pageable_allocation.random.35
+dEQP-VK.memory.pageable_allocation.random.36
+dEQP-VK.memory.pageable_allocation.random.37
+dEQP-VK.memory.pageable_allocation.random.38
+dEQP-VK.memory.pageable_allocation.random.39
+dEQP-VK.memory.pageable_allocation.random.40
+dEQP-VK.memory.pageable_allocation.random.41
+dEQP-VK.memory.pageable_allocation.random.42
+dEQP-VK.memory.pageable_allocation.random.43
+dEQP-VK.memory.pageable_allocation.random.44
+dEQP-VK.memory.pageable_allocation.random.45
+dEQP-VK.memory.pageable_allocation.random.46
+dEQP-VK.memory.pageable_allocation.random.47
+dEQP-VK.memory.pageable_allocation.random.48
+dEQP-VK.memory.pageable_allocation.random.49
+dEQP-VK.memory.pageable_allocation.random.50
+dEQP-VK.memory.pageable_allocation.random.51
+dEQP-VK.memory.pageable_allocation.random.52
+dEQP-VK.memory.pageable_allocation.random.53
+dEQP-VK.memory.pageable_allocation.random.54
+dEQP-VK.memory.pageable_allocation.random.55
+dEQP-VK.memory.pageable_allocation.random.56
+dEQP-VK.memory.pageable_allocation.random.57
+dEQP-VK.memory.pageable_allocation.random.58
+dEQP-VK.memory.pageable_allocation.random.59
+dEQP-VK.memory.pageable_allocation.random.60
+dEQP-VK.memory.pageable_allocation.random.61
+dEQP-VK.memory.pageable_allocation.random.62
+dEQP-VK.memory.pageable_allocation.random.63
+dEQP-VK.memory.pageable_allocation.random.64
+dEQP-VK.memory.pageable_allocation.random.65
+dEQP-VK.memory.pageable_allocation.random.66
+dEQP-VK.memory.pageable_allocation.random.67
+dEQP-VK.memory.pageable_allocation.random.68
+dEQP-VK.memory.pageable_allocation.random.69
+dEQP-VK.memory.pageable_allocation.random.70
+dEQP-VK.memory.pageable_allocation.random.71
+dEQP-VK.memory.pageable_allocation.random.72
+dEQP-VK.memory.pageable_allocation.random.73
+dEQP-VK.memory.pageable_allocation.random.74
+dEQP-VK.memory.pageable_allocation.random.75
+dEQP-VK.memory.pageable_allocation.random.76
+dEQP-VK.memory.pageable_allocation.random.77
+dEQP-VK.memory.pageable_allocation.random.78
+dEQP-VK.memory.pageable_allocation.random.79
+dEQP-VK.memory.pageable_allocation.random.80
+dEQP-VK.memory.pageable_allocation.random.81
+dEQP-VK.memory.pageable_allocation.random.82
+dEQP-VK.memory.pageable_allocation.random.83
+dEQP-VK.memory.pageable_allocation.random.84
+dEQP-VK.memory.pageable_allocation.random.85
+dEQP-VK.memory.pageable_allocation.random.86
+dEQP-VK.memory.pageable_allocation.random.87
+dEQP-VK.memory.pageable_allocation.random.88
+dEQP-VK.memory.pageable_allocation.random.89
+dEQP-VK.memory.pageable_allocation.random.90
+dEQP-VK.memory.pageable_allocation.random.91
+dEQP-VK.memory.pageable_allocation.random.92
+dEQP-VK.memory.pageable_allocation.random.93
+dEQP-VK.memory.pageable_allocation.random.94
+dEQP-VK.memory.pageable_allocation.random.95
+dEQP-VK.memory.pageable_allocation.random.96
+dEQP-VK.memory.pageable_allocation.random.97
+dEQP-VK.memory.pageable_allocation.random.98
+dEQP-VK.memory.pageable_allocation.random.99
dEQP-VK.memory.mapping.suballocation.full.variable.implicit_unmap
dEQP-VK.memory.mapping.suballocation.full.33.simple
dEQP-VK.memory.mapping.suballocation.full.33.remap
dEQP-VK.memory.binding.priority.aliasing.suballocated.image_257_8
dEQP-VK.memory.binding.priority.aliasing.suballocated.image_257_33
dEQP-VK.memory.binding.priority.aliasing.suballocated.image_257_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_257
dEQP-VK.memory.external_memory_host.simple_allocation.minImportedHostPointerAlignment_x1
dEQP-VK.memory.external_memory_host.simple_allocation.minImportedHostPointerAlignment_x3
dEQP-VK.memory.external_memory_host.bind_image_memory_and_render.with_zero_offset.r8g8b8a8_unorm
"VK_KHR_global_priority",
"VK_NV_mesh_shader",
"VK_KHR_portability_subset",
+ "VK_EXT_pageable_device_local_memory",
};
const std::vector<std::string>& deviceExtensions,
const deBool enableAllFeatures)
{
- VkPhysicalDeviceRobustness2FeaturesEXT* robustness2Features = nullptr;
- VkPhysicalDeviceImageRobustnessFeaturesEXT* imageRobustnessFeatures = nullptr;
- VkPhysicalDeviceFragmentShadingRateFeaturesKHR* fragmentShadingRateFeatures = nullptr;
- VkPhysicalDeviceShadingRateImageFeaturesNV* shadingRateImageFeatures = nullptr;
- VkPhysicalDeviceFragmentDensityMapFeaturesEXT* fragmentDensityMapFeatures = nullptr;
+ VkPhysicalDeviceRobustness2FeaturesEXT* robustness2Features = nullptr;
+ VkPhysicalDeviceImageRobustnessFeaturesEXT* imageRobustnessFeatures = nullptr;
+ VkPhysicalDeviceFragmentShadingRateFeaturesKHR* fragmentShadingRateFeatures = nullptr;
+ VkPhysicalDeviceShadingRateImageFeaturesNV* shadingRateImageFeatures = nullptr;
+ VkPhysicalDeviceFragmentDensityMapFeaturesEXT* fragmentDensityMapFeatures = nullptr;
+ VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* pageableDeviceLocalMemoryFeatures = nullptr;
m_coreFeatures2 = initVulkanStructure();
m_vulkan11Features = initVulkanStructure();
shadingRateImageFeatures = reinterpret_cast<VkPhysicalDeviceShadingRateImageFeaturesNV*>(rawStructPtr);
else if (structType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT)
fragmentDensityMapFeatures = reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(rawStructPtr);
+ else if (structType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT)
+ pageableDeviceLocalMemoryFeatures = reinterpret_cast<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT*>(rawStructPtr);
// add to chain
*nextPtr = rawStructPtr;
fragmentDensityMapFeatures->fragmentDensityMap = false;
}
}
+
+ // Disable pageableDeviceLocalMemory by default since it may modify the behavior
+ // of device-local, and even host-local, memory allocations for all tests.
+ // pageableDeviceLocalMemory will use targetted testing on a custom device.
+ if (pageableDeviceLocalMemoryFeatures)
+ pageableDeviceLocalMemoryFeatures->pageableDeviceLocalMemory = false;
}
bool DeviceFeatures::verifyFeatureAddCriteria (const FeatureStructCreationData& item, const std::vector<VkExtensionProperties>& properties)
nextPtr = &physicalDeviceMutableDescriptorTypeFeaturesVALVE.pNext;
}
+ vk::VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT physicalDevicePageableDeviceLocalMemoryFeaturesEXT;
+ deMemset(&physicalDevicePageableDeviceLocalMemoryFeaturesEXT, 0, sizeof(physicalDevicePageableDeviceLocalMemoryFeaturesEXT));
+
+ if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_pageable_device_local_memory")) )
+ {
+ physicalDevicePageableDeviceLocalMemoryFeaturesEXT.sType = getStructureType<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>();
+ *nextPtr = &physicalDevicePageableDeviceLocalMemoryFeaturesEXT;
+ nextPtr = &physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pNext;
+ }
+
vk::VkPhysicalDevicePerformanceQueryFeaturesKHR physicalDevicePerformanceQueryFeaturesKHR;
deMemset(&physicalDevicePerformanceQueryFeaturesKHR, 0, sizeof(physicalDevicePerformanceQueryFeaturesKHR));
}
}
+ if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_pageable_device_local_memory")) )
+ {
+ if ( physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pageableDeviceLocalMemory == VK_FALSE )
+ {
+ log << tcu::TestLog::Message << "Mandatory feature pageableDeviceLocalMemory not supported" << tcu::TestLog::EndMessage;
+ result = false;
+ }
+ }
+
return result;
}
MAX_ALLOCATION_COUNT = 4000
};
+enum AllocationMode
+{
+ ALLOCATION_MODE_DEFAULT,
+ ALLOCATION_MODE_DEVICE_GROUP,
+ ALLOCATION_MODE_PAGEABLE
+};
+
struct TestConfig
{
enum Order
Maybe<float> memoryPercentage;
deUint32 memoryAllocationCount;
Order order;
- bool useDeviceGroups;
+ AllocationMode allocationMode;
TestConfig (void)
: memoryAllocationCount ((deUint32)-1)
, order (ORDER_LAST)
- , useDeviceGroups (false)
+ , allocationMode (ALLOCATION_MODE_DEFAULT)
{
}
};
struct TestConfigRandom
{
- const deUint32 seed;
- const bool useDeviceGroups;
+ const deUint32 seed;
+ const AllocationMode allocationMode;
- TestConfigRandom (const deUint32 _seed, const bool _useDeviceGroups)
+ TestConfigRandom (const deUint32 _seed, const AllocationMode _allocationMode)
: seed (_seed)
- , useDeviceGroups (_useDeviceGroups)
+ , allocationMode (_allocationMode)
{
}
};
class BaseAllocateTestInstance : public TestInstance
{
public:
- BaseAllocateTestInstance (Context& context, bool useDeviceGroups)
+ BaseAllocateTestInstance (Context& context, AllocationMode allocationMode)
: TestInstance (context)
- , m_useDeviceGroups (useDeviceGroups)
+ , m_allocationMode (allocationMode)
, m_subsetAllocationAllowed (false)
, m_numPhysDevices (1)
, m_memoryProperties (getPhysicalDeviceMemoryProperties(context.getInstanceInterface(), context.getPhysicalDevice()))
{
- if (m_useDeviceGroups)
+ if (m_allocationMode == ALLOCATION_MODE_DEVICE_GROUP)
createDeviceGroup();
else
createTestDevice();
void createTestDevice (void);
void createDeviceGroup (void);
- const vk::DeviceInterface& getDeviceInterface (void) { return m_useDeviceGroups ? *m_deviceDriver : m_context.getDeviceInterface(); }
+ const vk::DeviceInterface& getDeviceInterface (void) { return (m_allocationMode == ALLOCATION_MODE_DEVICE_GROUP) ? *m_deviceDriver : m_context.getDeviceInterface(); }
vk::VkDevice getDevice (void) { return m_logicalDevice.get();}
protected:
- bool m_useDeviceGroups;
+ AllocationMode m_allocationMode;
bool m_subsetAllocationAllowed;
VkMemoryAllocateFlagsInfo m_allocFlagsInfo;
deUint32 m_numPhysDevices;
const float queuePriority = 1.0f;
deUint32 queueFamilyIndex = 0;
bool protMemSupported = false;
+ const bool usePageable = m_allocationMode == ALLOCATION_MODE_PAGEABLE;
+
+ if (usePageable && !m_context.isDeviceFunctionalitySupported("VK_EXT_pageable_device_local_memory"))
+ TCU_THROW(NotSupportedError, "VK_EXT_pageable_device_local_memory is not supported");
+
+ VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT pageableDeviceLocalMemoryFeature =
+ {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ VK_FALSE, // VkBool32 pageableDeviceLocalMemory;
+ };
VkPhysicalDeviceProtectedMemoryFeatures protectedMemoryFeature =
{
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES,// VkStructureType sType
- DE_NULL, // const void* pNext
- VK_FALSE // VkBool32 protectedMemory;
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, // VkStructureType sType
+ (usePageable) ? &pageableDeviceLocalMemoryFeature : DE_NULL, // const void* pNext
+ VK_FALSE // VkBool32 protectedMemory;
};
VkPhysicalDeviceFeatures features;
// Check if the physical device supports the protected memory feature
instanceDriver.getPhysicalDeviceFeatures2(m_context.getPhysicalDevice(), &features2);
- protMemSupported = ((VkPhysicalDeviceProtectedMemoryFeatures*)(features2.pNext))->protectedMemory;
+ protMemSupported = protectedMemoryFeature.protectedMemory;
VkDeviceQueueCreateFlags queueCreateFlags = protMemSupported ? (vk::VkDeviceQueueCreateFlags)vk::VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT : 0u;
+ if (usePageable && !pageableDeviceLocalMemoryFeature.pageableDeviceLocalMemory)
+ TCU_FAIL("pageableDeviceLocalMemory feature not supported but VK_EXT_pageable_device_local_memory advertised");
+
+ pageableDeviceLocalMemoryFeature.pageableDeviceLocalMemory = usePageable;
+
+ std::vector<const char*> deviceExtensions;
+ if (usePageable)
+ deviceExtensions.push_back("VK_EXT_pageable_device_local_memory");
+
VkDeviceQueueCreateInfo queueInfo =
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // VkStructureType sType;
const VkDeviceCreateInfo deviceInfo =
{
- VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // VkStructureType sType;
- protMemSupported ? &features2 : DE_NULL, // const void* pNext;
- (VkDeviceCreateFlags)0, // VkDeviceCreateFlags flags;
- 1u, // uint32_t queueCreateInfoCount;
- &queueInfo, // const VkDeviceQueueCreateInfo* pQueueCreateInfos;
- 0u, // uint32_t enabledLayerCount;
- DE_NULL, // const char* const* ppEnabledLayerNames;
- 0u, // uint32_t enabledExtensionCount;
- DE_NULL, // const char* const* ppEnabledExtensionNames;
- protMemSupported ? DE_NULL : &deviceFeatures // const VkPhysicalDeviceFeatures* pEnabledFeatures;
+ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // VkStructureType sType;
+ (protMemSupported || usePageable) ? &features2 : DE_NULL, // const void* pNext;
+ (VkDeviceCreateFlags)0, // VkDeviceCreateFlags flags;
+ 1u, // uint32_t queueCreateInfoCount;
+ &queueInfo, // const VkDeviceQueueCreateInfo* pQueueCreateInfos;
+ 0u, // uint32_t enabledLayerCount;
+ DE_NULL, // const char* const* ppEnabledLayerNames;
+ deUint32(deviceExtensions.size()), // uint32_t enabledExtensionCount;
+ (deviceExtensions.empty()) ? DE_NULL : deviceExtensions.data(), // const char* const* ppEnabledExtensionNames;
+ (protMemSupported || usePageable) ? DE_NULL : &deviceFeatures // const VkPhysicalDeviceFeatures* pEnabledFeatures;
};
m_logicalDevice = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), instance, instanceDriver, m_context.getPhysicalDevice(), &deviceInfo);
devGroupProperties[devGroupIdx].physicalDeviceCount, //physicalDeviceCount
devGroupProperties[devGroupIdx].physicalDevices //physicalDevices
};
- VkInstance instance (m_useDeviceGroups ? m_deviceGroupInstance : m_context.getInstance());
+ VkInstance instance (m_deviceGroupInstance);
InstanceDriver instanceDriver (m_context.getPlatformInterface(), instance);
const VkPhysicalDeviceFeatures deviceFeatures = getPhysicalDeviceFeatures(instanceDriver, deviceGroupInfo.pPhysicalDevices[physDeviceIdx]);
const VkDeviceCreateInfo deviceInfo =
{
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // VkStructureType sType;
- m_useDeviceGroups ? &deviceGroupInfo : DE_NULL, // const void* pNext;
+ &deviceGroupInfo, // const void* pNext;
(VkDeviceCreateFlags)0, // VkDeviceCreateFlags flags;
1u , // uint32_t queueCreateInfoCount;
&queueInfo, // const VkDeviceQueueCreateInfo* pQueueCreateInfos;
class AllocateFreeTestInstance : public BaseAllocateTestInstance
{
public:
- AllocateFreeTestInstance (Context& context, const TestConfig config)
- : BaseAllocateTestInstance (context, config.useDeviceGroups)
- , m_config (config)
- , m_result (m_context.getTestContext().getLog())
- , m_memoryTypeIndex (0)
- , m_memoryLimits (getMemoryLimits(context.getTestContext().getPlatform().getVulkanPlatform()))
+ AllocateFreeTestInstance (Context& context, const TestConfig config)
+ : BaseAllocateTestInstance (context, config.allocationMode)
+ , m_config (config)
+ , m_result (m_context.getTestContext().getLog())
+ , m_memoryTypeIndex (0)
+ , m_memoryLimits (getMemoryLimits(context.getTestContext().getPlatform().getVulkanPlatform()))
{
DE_ASSERT(!!m_config.memorySize != !!m_config.memoryPercentage);
}
{
VkMemoryAllocateInfo alloc =
{
- VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // sType
- m_useDeviceGroups ? &m_allocFlagsInfo : DE_NULL, // pNext
- allocationSize, // allocationSize
- m_memoryTypeIndex // memoryTypeIndex;
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // sType
+ (m_allocationMode == ALLOCATION_MODE_DEVICE_GROUP) ? &m_allocFlagsInfo : DE_NULL, // pNext
+ allocationSize, // allocationSize
+ m_memoryTypeIndex // memoryTypeIndex;
};
VkResult res = vkd.allocateMemory(device, &alloc, (const VkAllocationCallbacks*)DE_NULL, &memoryObjects[ndx]);
{
const VkMemoryAllocateInfo alloc =
{
- VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // sType
- m_useDeviceGroups ? &m_allocFlagsInfo : DE_NULL, // pNext
- allocationSize, // allocationSize
- m_memoryTypeIndex // memoryTypeIndex;
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // sType
+ (m_allocationMode == ALLOCATION_MODE_DEVICE_GROUP) ? &m_allocFlagsInfo : DE_NULL, // pNext
+ allocationSize, // allocationSize
+ m_memoryTypeIndex // memoryTypeIndex;
};
VK_CHECK(vkd.allocateMemory(device, &alloc, (const VkAllocationCallbacks*)DE_NULL, &memoryObjects[ndx]));
};
RandomAllocFreeTestInstance::RandomAllocFreeTestInstance (Context& context, TestConfigRandom config)
- : BaseAllocateTestInstance (context, config.useDeviceGroups)
+ : BaseAllocateTestInstance (context, config.allocationMode)
, m_opCount (128)
, m_allocSysMemSize (computeDeviceMemorySystemMemFootprint(getDeviceInterface(), context.getDevice())
+ sizeof(MemoryObject))
m_allocFlagsInfo.deviceMask = m_currentDeviceMask;
const VkMemoryAllocateInfo alloc =
{
- VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // sType
- m_useDeviceGroups ? &m_allocFlagsInfo : DE_NULL, // pNext
- object.size, // allocationSize
- memoryType.index // memoryTypeIndex;
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // sType
+ (m_allocationMode == ALLOCATION_MODE_DEVICE_GROUP) ? &m_allocFlagsInfo : DE_NULL, // pNext
+ object.size, // allocationSize
+ memoryType.index // memoryTypeIndex;
};
VkResult res = vkd.allocateMemory(device, &alloc, (const VkAllocationCallbacks*)DE_NULL, &heap.objects.back().memory);
} // anonymous
-tcu::TestCaseGroup* createAllocationTestsCommon (tcu::TestContext& testCtx, bool useDeviceGroups)
+tcu::TestCaseGroup* createAllocationTestsCommon (tcu::TestContext& testCtx, AllocationMode allocationMode)
{
- const char* name = useDeviceGroups ? "device_group_allocation" : "allocation";
+ const char* name = [&]{
+ switch (allocationMode)
+ {
+ case ALLOCATION_MODE_DEFAULT:
+ return "allocation";
+ case ALLOCATION_MODE_DEVICE_GROUP:
+ return "device_group_allocation";
+ case ALLOCATION_MODE_PAGEABLE:
+ return "pageable_allocation";
+ default:
+ TCU_THROW(InternalError, "Unknown allocation mode");
+ }
+ } ();
de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, name, "Memory allocation tests."));
const VkDeviceSize KiB = 1024;
config.memorySize = allocationSize;
config.order = order;
- config.useDeviceGroups = useDeviceGroups;
+ config.allocationMode = allocationMode;
if (allocationCount == -1)
{
if (allocationSize < 4096)
config.memoryPercentage = (float)allocationPercent / 100.0f;
config.order = order;
- config.useDeviceGroups = useDeviceGroups;
+ config.allocationMode = allocationMode;
if (allocationCount == -1)
{
for (deUint32 caseNdx = 0; caseNdx < caseCount; caseNdx++)
{
- TestConfigRandom config(deInt32Hash(caseNdx ^ 32480), useDeviceGroups);
+ TestConfigRandom config(deInt32Hash(caseNdx ^ 32480), allocationMode);
randomGroup->addChild(new InstanceFactory1<RandomAllocFreeTestInstance, TestConfigRandom>(testCtx, tcu::NODETYPE_SELF_VALIDATE, de::toString(caseNdx), "Random case", config));
}
tcu::TestCaseGroup* createAllocationTests (tcu::TestContext& testCtx)
{
- return createAllocationTestsCommon(testCtx, false);
+ return createAllocationTestsCommon(testCtx, ALLOCATION_MODE_DEFAULT);
}
tcu::TestCaseGroup* createDeviceGroupAllocationTests (tcu::TestContext& testCtx)
{
- return createAllocationTestsCommon(testCtx, true);
+ return createAllocationTestsCommon(testCtx, ALLOCATION_MODE_DEVICE_GROUP);
+}
+
+tcu::TestCaseGroup* createPageableAllocationTests (tcu::TestContext& testCtx)
+{
+ return createAllocationTestsCommon(testCtx, ALLOCATION_MODE_PAGEABLE);
}
} // memory
tcu::TestCaseGroup* createAllocationTests (tcu::TestContext& testCtx);
tcu::TestCaseGroup* createDeviceGroupAllocationTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createPageableAllocationTests (tcu::TestContext& testCtx);
} // memory
} // vkt
#include "vktTestCase.hpp"
#include "tcuTestLog.hpp"
+#include "vktCustomInstancesDevices.hpp"
#include "vkPlatform.hpp"
+#include "tcuCommandLine.hpp"
#include "gluVarType.hpp"
#include "deStringUtil.hpp"
#include "vkPrograms.hpp"
deUint32 value;
};
+enum PriorityMode
+{
+ PRIORITY_MODE_DEFAULT,
+ PRIORITY_MODE_STATIC,
+ PRIORITY_MODE_DYNAMIC,
+};
+
struct BindingCaseParameters
{
VkBufferCreateFlags flags;
VkExtent3D imageSize;
deUint32 targetsCount;
VkImageCreateFlags imageCreateFlags;
- bool usePriority;
+ PriorityMode priorityMode;
};
BindingCaseParameters makeBindingCaseParameters (deUint32 targetsCount,
deUint32 width,
deUint32 height,
VkImageCreateFlags imageCreateFlags,
- bool usePriority)
+ PriorityMode priorityMode)
{
BindingCaseParameters params;
deMemset(¶ms, 0, sizeof(BindingCaseParameters));
params.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
params.targetsCount = targetsCount;
params.imageCreateFlags = imageCreateFlags;
- params.usePriority = usePriority;
+ params.priorityMode = priorityMode;
return params;
}
VkSharingMode sharing,
VkDeviceSize bufferSize,
VkImageCreateFlags imageCreateFlags,
- bool usePriority)
+ PriorityMode priorityMode)
{
BindingCaseParameters params =
{
{0u, 0u, 0u}, // VkExtent3D imageSize;
targetsCount, // deUint32 targetsCount;
imageCreateFlags, // VkImageCreateFlags imageCreateFlags
- usePriority, // bool usePriority
+ priorityMode, // PriorityMode priorityMode
};
return params;
}
return allocateCommandBuffer(vk, device, &allocInfo);
}
+class BaseTestInstance : public TestInstance
+{
+public:
+ BaseTestInstance (Context& ctx,
+ BindingCaseParameters params)
+ : TestInstance (ctx)
+ , m_params (params)
+ {
+ if (m_params.priorityMode == PRIORITY_MODE_DYNAMIC)
+ {
+ VkInstance instance (m_context.getInstance());
+ InstanceDriver instanceDriver (m_context.getPlatformInterface(), instance);
+ const float queuePriority = 1.0f;
+
+ VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT pageableDeviceLocalMemoryFeature =
+ {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ VK_FALSE, // VkBool32 pageableDeviceLocalMemory;
+ };
+
+ VkPhysicalDeviceFeatures features;
+ deMemset(&features, 0, sizeof(vk::VkPhysicalDeviceFeatures));
+
+ VkPhysicalDeviceFeatures2 features2 =
+ {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, // VkStructureType sType
+ &pageableDeviceLocalMemoryFeature, // const void* pNext
+ features // VkPhysicalDeviceFeatures features
+ };
+
+ instanceDriver.getPhysicalDeviceFeatures2(m_context.getPhysicalDevice(), &features2);
+
+ if (!pageableDeviceLocalMemoryFeature.pageableDeviceLocalMemory)
+ TCU_FAIL("pageableDeviceLocalMemory feature not supported but VK_EXT_pageable_device_local_memory advertised");
+
+ pageableDeviceLocalMemoryFeature.pageableDeviceLocalMemory = VK_TRUE;
+
+ std::vector<const char*> deviceExtensions;
+ deviceExtensions.push_back("VK_EXT_pageable_device_local_memory");
+
+ VkDeviceQueueCreateInfo queueInfo =
+ {
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ 0u, // VkDeviceQueueCreateFlags flags;
+ 0u, // deUint32 queueFamilyIndex;
+ 1u, // deUint32 queueCount;
+ &queuePriority // const float* pQueuePriorities;
+ };
+
+ const VkDeviceCreateInfo deviceInfo =
+ {
+ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // VkStructureType sType;
+ &features2, // const void* pNext;
+ (VkDeviceCreateFlags)0, // VkDeviceCreateFlags flags;
+ 1u, // uint32_t queueCreateInfoCount;
+ &queueInfo, // const VkDeviceQueueCreateInfo* pQueueCreateInfos;
+ 0u, // uint32_t enabledLayerCount;
+ DE_NULL, // const char* const* ppEnabledLayerNames;
+ deUint32(deviceExtensions.size()), // uint32_t enabledExtensionCount;
+ (deviceExtensions.empty()) ? DE_NULL : deviceExtensions.data(), // const char* const* ppEnabledExtensionNames;
+ DE_NULL // const VkPhysicalDeviceFeatures* pEnabledFeatures;
+ };
+
+ m_logicalDevice = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), instance, instanceDriver, m_context.getPhysicalDevice(), &deviceInfo);
+ }
+ };
+
+protected:
+ vk::VkDevice getDevice (void) { return (m_params.priorityMode == PRIORITY_MODE_DYNAMIC) ? m_logicalDevice.get() : m_context.getDevice(); }
+
+ template<typename TTarget>
+ void createBindingTargets (std::vector<de::SharedPtr<Move<TTarget> > >& targets);
+
+ template<typename TTarget, deBool TDedicated>
+ void createMemory (std::vector<de::SharedPtr<Move<TTarget> > >& targets,
+ MemoryRegionsList& memory);
+
+ template<typename TTarget>
+ void makeBinding (std::vector<de::SharedPtr<Move<TTarget> > >& targets,
+ MemoryRegionsList& memory);
+
+ template <typename TTarget>
+ void fillUpResource (Move<VkBuffer>& source,
+ Move<TTarget>& target);
-template<typename TTarget>
-void createBindingTargets (std::vector<de::SharedPtr<Move<TTarget> > >&
- targets,
- Context& ctx,
- BindingCaseParameters params);
+ template <typename TTarget>
+ void readUpResource (Move<TTarget>& source,
+ Move<VkBuffer>& target);
+
+ template <typename TTarget>
+ void layoutTransitionResource (Move<TTarget>& target);
+
+ void createBuffer (Move<VkBuffer>& buffer,
+ Move<VkDeviceMemory>& memory);
+
+ void pushData (VkDeviceMemory memory,
+ deUint32 dataSeed);
+
+ deBool checkData (VkDeviceMemory memory,
+ deUint32 dataSeed);
+
+ BindingCaseParameters m_params;
+
+private:
+ vk::Move<vk::VkDevice> m_logicalDevice;
+};
template<>
-void createBindingTargets<VkBuffer> (BuffersList& targets,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::createBindingTargets<VkBuffer> (BuffersList& targets)
{
- const deUint32 count = params.targetsCount;
- const VkDevice vkDevice = ctx.getDevice();
- const DeviceInterface& vk = ctx.getDeviceInterface();
+ const deUint32 count = m_params.targetsCount;
+ const VkDevice vkDevice = getDevice();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
targets.reserve(count);
for (deUint32 i = 0u; i < count; ++i)
{
- VkBufferCreateInfo bufferParams = makeBufferCreateInfo(ctx, params);
- targets.push_back(BufferPtr(new Move<VkBuffer>(createBuffer(vk, vkDevice, &bufferParams))));
+ VkBufferCreateInfo bufferParams = makeBufferCreateInfo(m_context, m_params);
+ targets.push_back(BufferPtr(new Move<VkBuffer>(vk::createBuffer(vk, vkDevice, &bufferParams))));
}
}
template<>
-void createBindingTargets<VkImage> (ImagesList& targets,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::createBindingTargets<VkImage> (ImagesList& targets)
{
- const deUint32 count = params.targetsCount;
- const VkDevice vkDevice = ctx.getDevice();
- const DeviceInterface& vk = ctx.getDeviceInterface();
+ const deUint32 count = m_params.targetsCount;
+ const VkDevice vkDevice = getDevice();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
targets.reserve(count);
for (deUint32 i = 0u; i < count; ++i)
{
- VkImageCreateInfo imageParams = makeImageCreateInfo(params);
+ VkImageCreateInfo imageParams = makeImageCreateInfo(m_params);
targets.push_back(ImagePtr(new Move<VkImage>(createImage(vk, vkDevice, &imageParams))));
}
}
-template<typename TTarget, deBool TDedicated>
-void createMemory (std::vector<de::SharedPtr<Move<TTarget> > >&
- targets,
- MemoryRegionsList& memory,
- Context& ctx,
- BindingCaseParameters params);
-
template<>
-void createMemory<VkBuffer, DE_FALSE> (BuffersList& targets,
- MemoryRegionsList& memory,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::createMemory<VkBuffer, DE_FALSE> (BuffersList& targets,
+ MemoryRegionsList& memory)
{
- DE_UNREF(params);
const deUint32 count = static_cast<deUint32>(targets.size());
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
memory.reserve(count);
for (deUint32 i = 0; i < count; ++i)
vk.getBufferMemoryRequirements(vkDevice, **targets[i], &memReqs);
VkMemoryPriorityAllocateInfoEXT priority = makeMemoryPriorityAllocateInfo(DE_NULL, ((float)i)/((float)count));
- const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(memReqs, params.usePriority ? &priority : DE_NULL);
+ const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(memReqs, (m_params.priorityMode == PRIORITY_MODE_STATIC) ? &priority : DE_NULL);
VkDeviceMemory rawMemory = DE_NULL;
vk.allocateMemory(vkDevice, &memAlloc, (VkAllocationCallbacks*)DE_NULL, &rawMemory);
+
+ if (m_params.priorityMode == PRIORITY_MODE_DYNAMIC)
+ vk.setDeviceMemoryPriorityEXT(vkDevice, rawMemory, priority.priority);
+
memory.push_back(MemoryRegionPtr(new Move<VkDeviceMemory>(check<VkDeviceMemory>(rawMemory), Deleter<VkDeviceMemory>(vk, vkDevice, DE_NULL))));
}
}
template<>
-void createMemory<VkImage, DE_FALSE> (ImagesList& targets,
- MemoryRegionsList& memory,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::createMemory<VkImage, DE_FALSE> (ImagesList& targets,
+ MemoryRegionsList& memory)
{
- DE_UNREF(params);
const deUint32 count = static_cast<deUint32>(targets.size());
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
memory.reserve(count);
for (deUint32 i = 0; i < count; ++i)
vk.getImageMemoryRequirements(vkDevice, **targets[i], &memReqs);
VkMemoryPriorityAllocateInfoEXT priority = makeMemoryPriorityAllocateInfo(DE_NULL, ((float)i)/((float)count));
- const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(memReqs, params.usePriority ? &priority : DE_NULL);
+ const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(memReqs, (m_params.priorityMode == PRIORITY_MODE_STATIC) ? &priority : DE_NULL);
VkDeviceMemory rawMemory = DE_NULL;
vk.allocateMemory(vkDevice, &memAlloc, (VkAllocationCallbacks*)DE_NULL, &rawMemory);
+
+ if (m_params.priorityMode == PRIORITY_MODE_DYNAMIC)
+ vk.setDeviceMemoryPriorityEXT(vkDevice, rawMemory, priority.priority);
+
memory.push_back(de::SharedPtr<Move<VkDeviceMemory> >(new Move<VkDeviceMemory>(check<VkDeviceMemory>(rawMemory), Deleter<VkDeviceMemory>(vk, vkDevice, DE_NULL))));
}
}
template<>
-void createMemory<VkBuffer, DE_TRUE> (BuffersList& targets,
- MemoryRegionsList& memory,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::createMemory<VkBuffer, DE_TRUE> (BuffersList& targets,
+ MemoryRegionsList& memory)
{
- DE_UNREF(params);
const deUint32 count = static_cast<deUint32>(targets.size());
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
memory.reserve(count);
for (deUint32 i = 0; i < count; ++i)
ConstDedicatedInfo dedicatedAllocationInfo = makeDedicatedAllocationInfo(**targets[i]);
VkMemoryPriorityAllocateInfoEXT priority = makeMemoryPriorityAllocateInfo(&dedicatedAllocationInfo, ((float)i)/((float)count));
- const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(memReqs, params.usePriority ? &priority : (const void *)&dedicatedAllocationInfo);
+ const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(memReqs, (m_params.priorityMode == PRIORITY_MODE_STATIC) ? &priority : (const void *)&dedicatedAllocationInfo);
VkDeviceMemory rawMemory = DE_NULL;
vk.allocateMemory(vkDevice, &memAlloc, static_cast<VkAllocationCallbacks*>(DE_NULL), &rawMemory);
+
+ if (m_params.priorityMode == PRIORITY_MODE_DYNAMIC)
+ vk.setDeviceMemoryPriorityEXT(vkDevice, rawMemory, priority.priority);
+
memory.push_back(MemoryRegionPtr(new Move<VkDeviceMemory>(check<VkDeviceMemory>(rawMemory), Deleter<VkDeviceMemory>(vk, vkDevice, DE_NULL))));
}
}
template<>
-void createMemory<VkImage, DE_TRUE> (ImagesList& targets,
- MemoryRegionsList& memory,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::createMemory<VkImage, DE_TRUE> (ImagesList& targets,
+ MemoryRegionsList& memory)
{
- DE_UNREF(params);
const deUint32 count = static_cast<deUint32>(targets.size());
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
memory.reserve(count);
for (deUint32 i = 0; i < count; ++i)
ConstDedicatedInfo dedicatedAllocationInfo = makeDedicatedAllocationInfo(**targets[i]);
VkMemoryPriorityAllocateInfoEXT priority = makeMemoryPriorityAllocateInfo(&dedicatedAllocationInfo, ((float)i)/((float)count));
- const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(memReqs, params.usePriority ? &priority : (const void *)&dedicatedAllocationInfo);
+ const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(memReqs, (m_params.priorityMode == PRIORITY_MODE_STATIC) ? &priority : (const void *)&dedicatedAllocationInfo);
VkDeviceMemory rawMemory = DE_NULL;
vk.allocateMemory(vkDevice, &memAlloc, static_cast<VkAllocationCallbacks*>(DE_NULL), &rawMemory);
+
+ if (m_params.priorityMode == PRIORITY_MODE_DYNAMIC)
+ vk.setDeviceMemoryPriorityEXT(vkDevice, rawMemory, priority.priority);
+
memory.push_back(MemoryRegionPtr(new Move<VkDeviceMemory>(check<VkDeviceMemory>(rawMemory), Deleter<VkDeviceMemory>(vk, vkDevice, DE_NULL))));
}
}
-template<typename TTarget>
-void makeBinding (std::vector<de::SharedPtr<Move<TTarget> > >&
- targets,
- MemoryRegionsList& memory,
- Context& ctx,
- BindingCaseParameters params);
-
template<>
-void makeBinding<VkBuffer> (BuffersList& targets,
- MemoryRegionsList& memory,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::makeBinding<VkBuffer> (BuffersList& targets,
+ MemoryRegionsList& memory)
{
- DE_UNREF(params);
const deUint32 count = static_cast<deUint32>(targets.size());
- const VkDevice vkDevice = ctx.getDevice();
- const DeviceInterface& vk = ctx.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
BindBufferMemoryInfosList bindMemoryInfos;
for (deUint32 i = 0; i < count; ++i)
}
template<>
-void makeBinding<VkImage> (ImagesList& targets,
- MemoryRegionsList& memory,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::makeBinding<VkImage> (ImagesList& targets,
+ MemoryRegionsList& memory)
{
- DE_UNREF(params);
const deUint32 count = static_cast<deUint32>(targets.size());
- const VkDevice vkDevice = ctx.getDevice();
- const DeviceInterface& vk = ctx.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
BindImageMemoryInfosList bindMemoryInfos;
for (deUint32 i = 0; i < count; ++i)
VK_CHECK(vk.bindImageMemory2(vkDevice, count, &bindMemoryInfos.front()));
}
-template <typename TTarget>
-void fillUpResource (Move<VkBuffer>& source,
- Move<TTarget>& target,
- Context& ctx,
- BindingCaseParameters params);
-
template <>
-void fillUpResource<VkBuffer> (Move<VkBuffer>& source,
- Move<VkBuffer>& target,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::fillUpResource<VkBuffer> (Move<VkBuffer>& source,
+ Move<VkBuffer>& target)
{
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
- const VkQueue queue = ctx.getUniversalQueue();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ const VkQueue queue = m_context.getUniversalQueue();
- const VkBufferMemoryBarrier srcBufferBarrier = makeMemoryBarrierInfo(*source, params.bufferSize, TransferFromResource);
- const VkBufferMemoryBarrier dstBufferBarrier = makeMemoryBarrierInfo(*target, params.bufferSize, TransferToResource);
+ const VkBufferMemoryBarrier srcBufferBarrier = makeMemoryBarrierInfo(*source, m_params.bufferSize, TransferFromResource);
+ const VkBufferMemoryBarrier dstBufferBarrier = makeMemoryBarrierInfo(*target, m_params.bufferSize, TransferToResource);
Move<VkCommandPool> commandPool = createCommandPool(vk, vkDevice, VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, 0);
Move<VkCommandBuffer> cmdBuffer = createCommandBuffer(vk, vkDevice, *commandPool);
- VkBufferCopy bufferCopy = { 0u, 0u, params.bufferSize };
+ VkBufferCopy bufferCopy = { 0u, 0u, m_params.bufferSize };
beginCommandBuffer(vk, *cmdBuffer);
vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &srcBufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
}
template <>
-void fillUpResource<VkImage> (Move<VkBuffer>& source,
- Move<VkImage>& target,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::fillUpResource<VkImage> (Move<VkBuffer>& source,
+ Move<VkImage>& target)
{
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
- const VkQueue queue = ctx.getUniversalQueue();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ const VkQueue queue = m_context.getUniversalQueue();
- const VkBufferMemoryBarrier srcBufferBarrier = makeMemoryBarrierInfo(*source, params.bufferSize, TransferFromResource);
+ const VkBufferMemoryBarrier srcBufferBarrier = makeMemoryBarrierInfo(*source, m_params.bufferSize, TransferFromResource);
const VkImageMemoryBarrier preImageBarrier = makeMemoryBarrierInfo(*target, 0u, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
const VkImageMemoryBarrier dstImageBarrier = makeMemoryBarrierInfo(*target, VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
const VkBufferImageCopy copyRegion =
{
0u, // VkDeviceSize bufferOffset;
- params.imageSize.width, // deUint32 bufferRowLength;
- params.imageSize.height, // deUint32 bufferImageHeight;
+ m_params.imageSize.width, // deUint32 bufferRowLength;
+ m_params.imageSize.height, // deUint32 bufferImageHeight;
{
VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspect;
0u, // deUint32 mipLevel;
1u, // deUint32 layerCount;
}, // VkImageSubresourceLayers imageSubresource;
{ 0, 0, 0 }, // VkOffset3D imageOffset;
- params.imageSize // VkExtent3D imageExtent;
+ m_params.imageSize // VkExtent3D imageExtent;
};
beginCommandBuffer(vk, *cmdBuffer);
submitCommandsAndWait(vk, vkDevice, queue, *cmdBuffer);
}
-template <typename TTarget>
-void readUpResource (Move<TTarget>& source,
- Move<VkBuffer>& target,
- Context& ctx,
- BindingCaseParameters params);
-
template <>
-void readUpResource (Move<VkBuffer>& source,
- Move<VkBuffer>& target,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::readUpResource (Move<VkBuffer>& source,
+ Move<VkBuffer>& target)
{
- fillUpResource(source, target, ctx, params);
+ fillUpResource(source, target);
}
template <>
-void readUpResource (Move<VkImage>& source,
- Move<VkBuffer>& target,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::readUpResource (Move<VkImage>& source,
+ Move<VkBuffer>& target)
{
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
- const VkQueue queue = ctx.getUniversalQueue();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ const VkQueue queue = m_context.getUniversalQueue();
Move<VkCommandPool> commandPool = createCommandPool(vk, vkDevice, VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, 0);
Move<VkCommandBuffer> cmdBuffer = createCommandBuffer(vk, vkDevice, *commandPool);
beginCommandBuffer(vk, *cmdBuffer);
- copyImageToBuffer(vk, *cmdBuffer, *source, *target, tcu::IVec2(params.imageSize.width, params.imageSize.height), VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
+ copyImageToBuffer(vk, *cmdBuffer, *source, *target, tcu::IVec2(m_params.imageSize.width, m_params.imageSize.height), VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
endCommandBuffer(vk, *cmdBuffer);
submitCommandsAndWait(vk, vkDevice, queue, *cmdBuffer);
}
-
-template <typename TTarget>
-void layoutTransitionResource (Move<TTarget>& target,
- Context& ctx);
-
template <>
-void layoutTransitionResource (Move<VkBuffer>& target,
- Context& ctx)
+void BaseTestInstance::layoutTransitionResource (Move<VkBuffer>& target)
{
DE_UNREF(target);
- DE_UNREF(ctx);
}
template <>
-void layoutTransitionResource<VkImage> (Move<VkImage>& target,
- Context& ctx)
+void BaseTestInstance::layoutTransitionResource<VkImage> (Move<VkImage>& target)
{
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
- const VkQueue queue = ctx.getUniversalQueue();
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ const VkQueue queue = m_context.getUniversalQueue();
const VkImageMemoryBarrier preImageBarrier = makeMemoryBarrierInfo(*target, 0u, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
}
-void createBuffer (Move<VkBuffer>& buffer,
- Move<VkDeviceMemory>& memory,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::createBuffer (Move<VkBuffer>& buffer,
+ Move<VkDeviceMemory>& memory)
{
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
- VkBufferCreateInfo bufferParams = makeBufferCreateInfo(ctx, params);
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ VkBufferCreateInfo bufferParams = makeBufferCreateInfo(m_context, m_params);
VkMemoryRequirements memReqs;
- buffer = createBuffer(vk, vkDevice, &bufferParams);
+ buffer = vk::createBuffer(vk, vkDevice, &bufferParams);
vk.getBufferMemoryRequirements(vkDevice, *buffer, &memReqs);
- const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(ctx, memReqs, MemoryHostVisible);
+ const VkMemoryAllocateInfo memAlloc = makeMemoryAllocateInfo(m_context, memReqs, MemoryHostVisible);
VkDeviceMemory rawMemory = DE_NULL;
vk.allocateMemory(vkDevice, &memAlloc, static_cast<VkAllocationCallbacks*>(DE_NULL), &rawMemory);
VK_CHECK(vk.bindBufferMemory(vkDevice, *buffer, *memory, 0u));
}
-void pushData (VkDeviceMemory memory,
- deUint32 dataSeed,
- Context& ctx,
- BindingCaseParameters params)
+void BaseTestInstance::pushData (VkDeviceMemory memory,
+ deUint32 dataSeed)
{
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
- MemoryMappingRAII hostMemory (vk, vkDevice, memory, 0u, params.bufferSize, 0u);
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ MemoryMappingRAII hostMemory (vk, vkDevice, memory, 0u, m_params.bufferSize, 0u);
deUint8* hostBuffer = static_cast<deUint8*>(hostMemory.ptr());
SimpleRandomGenerator random (dataSeed);
- for (deUint32 i = 0u; i < params.bufferSize; ++i)
+ for (deUint32 i = 0u; i < m_params.bufferSize; ++i)
{
hostBuffer[i] = static_cast<deUint8>(random.getNext() & 0xFFu);
}
hostMemory.flush();
}
-deBool checkData (VkDeviceMemory memory,
- deUint32 dataSeed,
- Context& ctx,
- BindingCaseParameters params)
+deBool BaseTestInstance::checkData (VkDeviceMemory memory,
+ deUint32 dataSeed)
{
- const DeviceInterface& vk = ctx.getDeviceInterface();
- const VkDevice vkDevice = ctx.getDevice();
- MemoryMappingRAII hostMemory (vk, vkDevice, memory, 0u, params.bufferSize, 0u);
+ const DeviceInterface& vk = m_context.getDeviceInterface();
+ const VkDevice vkDevice = getDevice();
+ MemoryMappingRAII hostMemory (vk, vkDevice, memory, 0u, m_params.bufferSize, 0u);
deUint8* hostBuffer = static_cast<deUint8*>(hostMemory.ptr());
SimpleRandomGenerator random (dataSeed);
hostMemory.invalidate();
- for (deUint32 i = 0u; i < params.bufferSize; ++i)
+ for (deUint32 i = 0u; i < m_params.bufferSize; ++i)
{
if (hostBuffer[i] != static_cast<deUint8>(random.getNext() & 0xFFu) )
return DE_FALSE;
}
template<typename TTarget, deBool TDedicated>
-class MemoryBindingInstance : public TestInstance
+class MemoryBindingInstance : public BaseTestInstance
{
public:
MemoryBindingInstance (Context& ctx,
BindingCaseParameters params)
- : TestInstance (ctx)
- , m_params (params)
+ : BaseTestInstance (ctx, params)
{
}
targets;
MemoryRegionsList memory;
- createBindingTargets<TTarget>(targets, m_context, m_params);
- createMemory<TTarget, TDedicated>(targets, memory, m_context, m_params);
- makeBinding<TTarget>(targets, memory, m_context, m_params);
+ createBindingTargets<TTarget>(targets);
+ createMemory<TTarget, TDedicated>(targets, memory);
+ makeBinding<TTarget>(targets, memory);
Move<VkBuffer> srcBuffer;
Move<VkDeviceMemory> srcMemory;
- createBuffer(srcBuffer, srcMemory, m_context, m_params);
- pushData(*srcMemory, 1, m_context, m_params);
+ createBuffer(srcBuffer, srcMemory);
+ pushData(*srcMemory, 1);
Move<VkBuffer> dstBuffer;
Move<VkDeviceMemory> dstMemory;
- createBuffer(dstBuffer, dstMemory, m_context, m_params);
+ createBuffer(dstBuffer, dstMemory);
deBool passed = DE_TRUE;
for (deUint32 i = 0; passed && i < m_params.targetsCount; ++i)
{
- fillUpResource(srcBuffer, *targets[i], m_context, m_params);
- readUpResource(*targets[i], dstBuffer, m_context, m_params);
- passed = checkData(*dstMemory, 1, m_context, m_params);
+ fillUpResource(srcBuffer, *targets[i]);
+ readUpResource(*targets[i], dstBuffer);
+ passed = checkData(*dstMemory, 1);
}
return passed ? tcu::TestStatus::pass("Pass") : tcu::TestStatus::fail("Failed");
}
-private:
- BindingCaseParameters m_params;
};
template<typename TTarget, deBool TDedicated>
-class AliasedMemoryBindingInstance : public TestInstance
+class AliasedMemoryBindingInstance : public BaseTestInstance
{
public:
AliasedMemoryBindingInstance (Context& ctx,
BindingCaseParameters params)
- : TestInstance (ctx)
- , m_params (params)
+ : BaseTestInstance (ctx, params)
{
}
MemoryRegionsList memory;
for (deUint32 i = 0; i < DE_LENGTH_OF_ARRAY(targets); ++i)
- createBindingTargets<TTarget>(targets[i], m_context, m_params);
- createMemory<TTarget, TDedicated>(targets[0], memory, m_context, m_params);
+ createBindingTargets<TTarget>(targets[i]);
+ createMemory<TTarget, TDedicated>(targets[0], memory);
for (deUint32 i = 0; i < DE_LENGTH_OF_ARRAY(targets); ++i)
- makeBinding<TTarget>(targets[i], memory, m_context, m_params);
+ makeBinding<TTarget>(targets[i], memory);
Move<VkBuffer> srcBuffer;
Move<VkDeviceMemory> srcMemory;
- createBuffer(srcBuffer, srcMemory, m_context, m_params);
- pushData(*srcMemory, 2, m_context, m_params);
+ createBuffer(srcBuffer, srcMemory);
+ pushData(*srcMemory, 2);
Move<VkBuffer> dstBuffer;
Move<VkDeviceMemory> dstMemory;
- createBuffer(dstBuffer, dstMemory, m_context, m_params);
+ createBuffer(dstBuffer, dstMemory);
deBool passed = DE_TRUE;
for (deUint32 i = 0; passed && i < m_params.targetsCount; ++i)
{
// Do a layout transition on alias 1 before we transition and write to alias 0
- layoutTransitionResource(*(targets[1][i]), m_context);
- fillUpResource(srcBuffer, *(targets[0][i]), m_context, m_params);
- readUpResource(*(targets[1][i]), dstBuffer, m_context, m_params);
- passed = checkData(*dstMemory, 2, m_context, m_params);
+ layoutTransitionResource(*(targets[1][i]));
+ fillUpResource(srcBuffer, *(targets[0][i]));
+ readUpResource(*(targets[1][i]), dstBuffer);
+ passed = checkData(*dstMemory, 2);
}
return passed ? tcu::TestStatus::pass("Pass") : tcu::TestStatus::fail("Failed");
}
-private:
- BindingCaseParameters m_params;
};
template<typename TInstance>
{
ctx.requireDeviceFunctionality("VK_KHR_bind_memory2");
- if (m_params.usePriority && !ctx.getMemoryPriorityFeaturesEXT().memoryPriority)
+ if ((m_params.priorityMode != PRIORITY_MODE_DEFAULT) && !ctx.getMemoryPriorityFeaturesEXT().memoryPriority)
TCU_THROW(NotSupportedError, "VK_EXT_memory_priority Not supported");
+ if ((m_params.priorityMode == PRIORITY_MODE_DYNAMIC) && !ctx.isDeviceFunctionalitySupported("VK_EXT_pageable_device_local_memory"))
+ TCU_THROW(NotSupportedError, "VK_EXT_pageable_device_local_memory Not supported");
}
private:
{
de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "binding", "Memory binding tests."));
- for (int i = 0; i < 2; ++i)
+ for (int i = 0; i < 3; ++i)
{
- bool usePriority = i != 0;
+ PriorityMode priorityMode = PriorityMode(i);
de::MovePtr<tcu::TestCaseGroup> regular (new tcu::TestCaseGroup(testCtx, "regular", "Basic memory binding tests."));
de::MovePtr<tcu::TestCaseGroup> aliasing (new tcu::TestCaseGroup(testCtx, "aliasing", "Memory binding tests with aliasing of two resources."));
for (deUint32 sizeNdx = 0u; sizeNdx < DE_LENGTH_OF_ARRAY(allocationSizes); ++sizeNdx )
{
const VkDeviceSize bufferSize = allocationSizes[sizeNdx];
- const BindingCaseParameters params = makeBindingCaseParameters(10, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_SHARING_MODE_EXCLUSIVE, bufferSize, 0u, usePriority);
- const BindingCaseParameters aliasparams = makeBindingCaseParameters(10, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_SHARING_MODE_EXCLUSIVE, bufferSize, VK_IMAGE_CREATE_ALIAS_BIT, usePriority);
+ const BindingCaseParameters params = makeBindingCaseParameters(10, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_SHARING_MODE_EXCLUSIVE, bufferSize, 0u, priorityMode);
+ const BindingCaseParameters aliasparams = makeBindingCaseParameters(10, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_SHARING_MODE_EXCLUSIVE, bufferSize, VK_IMAGE_CREATE_ALIAS_BIT, priorityMode);
std::ostringstream testName;
testName << "buffer_" << bufferSize;
{
const deUint32 width = imageSizes[widthNdx];
const deUint32 height = imageSizes[heightNdx];
- const BindingCaseParameters regularparams = makeBindingCaseParameters(10, width, height, 0u, usePriority);
- const BindingCaseParameters aliasparams = makeBindingCaseParameters(10, width, height, VK_IMAGE_CREATE_ALIAS_BIT, usePriority);
+ const BindingCaseParameters regularparams = makeBindingCaseParameters(10, width, height, 0u, priorityMode);
+ const BindingCaseParameters aliasparams = makeBindingCaseParameters(10, width, height, VK_IMAGE_CREATE_ALIAS_BIT, priorityMode);
std::ostringstream testName;
testName << "image_" << width << '_' << height;
regular->addChild(regular_dedicated.release());
aliasing->addChild(aliasing_suballocated.release());
- if (usePriority) {
- de::MovePtr<tcu::TestCaseGroup> priority (new tcu::TestCaseGroup(testCtx, "priority", "Using VK_EXT_memory_priority."));
+ if (priorityMode != PRIORITY_MODE_DEFAULT) {
+ de::MovePtr<tcu::TestCaseGroup> priority (new tcu::TestCaseGroup(testCtx, (priorityMode == PRIORITY_MODE_DYNAMIC) ? "priority_dynamic" : "priority", (priorityMode == PRIORITY_MODE_DYNAMIC) ? "Using VK_EXT_pageable_device_local_memory" : "Using VK_EXT_memory_priority."));
priority->addChild(regular.release());
priority->addChild(aliasing.release());
group->addChild(priority.release());
memoryTests->addChild(createAllocationTests (testCtx));
memoryTests->addChild(createDeviceGroupAllocationTests (testCtx));
+ memoryTests->addChild(createPageableAllocationTests (testCtx));
memoryTests->addChild(createMappingTests (testCtx));
memoryTests->addChild(createPipelineBarrierTests (testCtx));
memoryTests->addChild(createRequirementsTests (testCtx));
dEQP-VK.memory.device_group_allocation.random.97
dEQP-VK.memory.device_group_allocation.random.98
dEQP-VK.memory.device_group_allocation.random.99
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_64.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_128.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_256.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_512.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_1KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.forward.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.reverse.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_4KiB.mixed.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.forward.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.reverse.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_100
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_1000
+dEQP-VK.memory.pageable_allocation.basic.size_8KiB.mixed.count_4000
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.forward.count_50
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.reverse.count_50
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_1
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_10
+dEQP-VK.memory.pageable_allocation.basic.size_1MiB.mixed.count_50
+dEQP-VK.memory.pageable_allocation.basic.percent_1.forward.count_12
+dEQP-VK.memory.pageable_allocation.basic.percent_1.reverse.count_12
+dEQP-VK.memory.pageable_allocation.basic.percent_1.mixed.count_12
+dEQP-VK.memory.pageable_allocation.random.0
+dEQP-VK.memory.pageable_allocation.random.1
+dEQP-VK.memory.pageable_allocation.random.2
+dEQP-VK.memory.pageable_allocation.random.3
+dEQP-VK.memory.pageable_allocation.random.4
+dEQP-VK.memory.pageable_allocation.random.5
+dEQP-VK.memory.pageable_allocation.random.6
+dEQP-VK.memory.pageable_allocation.random.7
+dEQP-VK.memory.pageable_allocation.random.8
+dEQP-VK.memory.pageable_allocation.random.9
+dEQP-VK.memory.pageable_allocation.random.10
+dEQP-VK.memory.pageable_allocation.random.11
+dEQP-VK.memory.pageable_allocation.random.12
+dEQP-VK.memory.pageable_allocation.random.13
+dEQP-VK.memory.pageable_allocation.random.14
+dEQP-VK.memory.pageable_allocation.random.15
+dEQP-VK.memory.pageable_allocation.random.16
+dEQP-VK.memory.pageable_allocation.random.17
+dEQP-VK.memory.pageable_allocation.random.18
+dEQP-VK.memory.pageable_allocation.random.19
+dEQP-VK.memory.pageable_allocation.random.20
+dEQP-VK.memory.pageable_allocation.random.21
+dEQP-VK.memory.pageable_allocation.random.22
+dEQP-VK.memory.pageable_allocation.random.23
+dEQP-VK.memory.pageable_allocation.random.24
+dEQP-VK.memory.pageable_allocation.random.25
+dEQP-VK.memory.pageable_allocation.random.26
+dEQP-VK.memory.pageable_allocation.random.27
+dEQP-VK.memory.pageable_allocation.random.28
+dEQP-VK.memory.pageable_allocation.random.29
+dEQP-VK.memory.pageable_allocation.random.30
+dEQP-VK.memory.pageable_allocation.random.31
+dEQP-VK.memory.pageable_allocation.random.32
+dEQP-VK.memory.pageable_allocation.random.33
+dEQP-VK.memory.pageable_allocation.random.34
+dEQP-VK.memory.pageable_allocation.random.35
+dEQP-VK.memory.pageable_allocation.random.36
+dEQP-VK.memory.pageable_allocation.random.37
+dEQP-VK.memory.pageable_allocation.random.38
+dEQP-VK.memory.pageable_allocation.random.39
+dEQP-VK.memory.pageable_allocation.random.40
+dEQP-VK.memory.pageable_allocation.random.41
+dEQP-VK.memory.pageable_allocation.random.42
+dEQP-VK.memory.pageable_allocation.random.43
+dEQP-VK.memory.pageable_allocation.random.44
+dEQP-VK.memory.pageable_allocation.random.45
+dEQP-VK.memory.pageable_allocation.random.46
+dEQP-VK.memory.pageable_allocation.random.47
+dEQP-VK.memory.pageable_allocation.random.48
+dEQP-VK.memory.pageable_allocation.random.49
+dEQP-VK.memory.pageable_allocation.random.50
+dEQP-VK.memory.pageable_allocation.random.51
+dEQP-VK.memory.pageable_allocation.random.52
+dEQP-VK.memory.pageable_allocation.random.53
+dEQP-VK.memory.pageable_allocation.random.54
+dEQP-VK.memory.pageable_allocation.random.55
+dEQP-VK.memory.pageable_allocation.random.56
+dEQP-VK.memory.pageable_allocation.random.57
+dEQP-VK.memory.pageable_allocation.random.58
+dEQP-VK.memory.pageable_allocation.random.59
+dEQP-VK.memory.pageable_allocation.random.60
+dEQP-VK.memory.pageable_allocation.random.61
+dEQP-VK.memory.pageable_allocation.random.62
+dEQP-VK.memory.pageable_allocation.random.63
+dEQP-VK.memory.pageable_allocation.random.64
+dEQP-VK.memory.pageable_allocation.random.65
+dEQP-VK.memory.pageable_allocation.random.66
+dEQP-VK.memory.pageable_allocation.random.67
+dEQP-VK.memory.pageable_allocation.random.68
+dEQP-VK.memory.pageable_allocation.random.69
+dEQP-VK.memory.pageable_allocation.random.70
+dEQP-VK.memory.pageable_allocation.random.71
+dEQP-VK.memory.pageable_allocation.random.72
+dEQP-VK.memory.pageable_allocation.random.73
+dEQP-VK.memory.pageable_allocation.random.74
+dEQP-VK.memory.pageable_allocation.random.75
+dEQP-VK.memory.pageable_allocation.random.76
+dEQP-VK.memory.pageable_allocation.random.77
+dEQP-VK.memory.pageable_allocation.random.78
+dEQP-VK.memory.pageable_allocation.random.79
+dEQP-VK.memory.pageable_allocation.random.80
+dEQP-VK.memory.pageable_allocation.random.81
+dEQP-VK.memory.pageable_allocation.random.82
+dEQP-VK.memory.pageable_allocation.random.83
+dEQP-VK.memory.pageable_allocation.random.84
+dEQP-VK.memory.pageable_allocation.random.85
+dEQP-VK.memory.pageable_allocation.random.86
+dEQP-VK.memory.pageable_allocation.random.87
+dEQP-VK.memory.pageable_allocation.random.88
+dEQP-VK.memory.pageable_allocation.random.89
+dEQP-VK.memory.pageable_allocation.random.90
+dEQP-VK.memory.pageable_allocation.random.91
+dEQP-VK.memory.pageable_allocation.random.92
+dEQP-VK.memory.pageable_allocation.random.93
+dEQP-VK.memory.pageable_allocation.random.94
+dEQP-VK.memory.pageable_allocation.random.95
+dEQP-VK.memory.pageable_allocation.random.96
+dEQP-VK.memory.pageable_allocation.random.97
+dEQP-VK.memory.pageable_allocation.random.98
+dEQP-VK.memory.pageable_allocation.random.99
dEQP-VK.memory.mapping.suballocation.full.variable.implicit_unmap
dEQP-VK.memory.mapping.suballocation.full.33.simple
dEQP-VK.memory.mapping.suballocation.full.33.remap
dEQP-VK.memory.binding.priority.aliasing.suballocated.image_257_8
dEQP-VK.memory.binding.priority.aliasing.suballocated.image_257_33
dEQP-VK.memory.binding.priority.aliasing.suballocated.image_257_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.regular.suballocated.image_257_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.regular.dedicated.image_257_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_4087
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_8095
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.buffer_1048577
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_8_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_33_257
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_8
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_33
+dEQP-VK.memory.binding.priority_dynamic.aliasing.suballocated.image_257_257
dEQP-VK.memory.external_memory_host.simple_allocation.minImportedHostPointerAlignment_x1
dEQP-VK.memory.external_memory_host.simple_allocation.minImportedHostPointerAlignment_x3
dEQP-VK.memory.external_memory_host.bind_image_memory_and_render.with_zero_offset.r8g8b8a8_unorm
VK_KHR_global_priority DEVICE
VK_NV_mesh_shader DEVICE
VK_KHR_portability_subset DEVICE
+VK_EXT_pageable_device_local_memory DEVICE
VkPhysicalDeviceVulkan13Features FEATURES ( dynamicRendering ) REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
VkPhysicalDeviceVulkan13Features FEATURES ( shaderIntegerDotProduct ) REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
VkPhysicalDeviceVulkan13Features FEATURES ( maintenance4 ) REQUIREMENTS ( "ApiVersion(1, 3, 0)" )
+VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT FEATURES ( pageableDeviceLocalMemory ) REQUIREMENTS ( VK_EXT_pageable_device_local_memory )