VK_EXT_pageable_device_local_memory test coverage
authorPiers Daniell <pdaniell@nvidia.com>
Mon, 9 Aug 2021 15:50:12 +0000 (09:50 -0600)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 4 Feb 2022 20:27:27 +0000 (20:27 +0000)
This CL adds basic support for the pageableDeviceLocalMemory feature. Normally
CTS enables all known features by default, but in this case we don't
enable pageableDeviceLocalMemory by default and just to targetting
testing with a variant of the extisting dEQP-VK.memory.allocation.*
tests.

This CL also adds coverage for vkSetDeviceMemoryPriorityEXT() by
extending the existing static VK_EXT_memory_priority test with a
dynamic variant that changes the memory priority after it has
been allocated.

New tests:

dEQP-VK.memory.pageable_allocation.*
dEQP-VK.memory.binding.priority_dynamic.*

Affects:

dEQP-VK.memory.allocation.*
dEQP-VK.memory.device_group_allocation.*
dEQP-VK.memory.binding.*

Components: Vulkan

VK-GL-CTS issue: 3060

Change-Id: Idb4e63556c8807ba2f636c90dab397f4d116223d
(cherry picked from commit f8b56ca1effc62c885bec677ba0ee55e2e43142a)

12 files changed:
android/cts/master/vk-master-2021-03-01/memory.txt
android/cts/master/vk-master/memory.txt
external/vulkancts/framework/vulkan/vkDeviceExtensions.inl
external/vulkancts/framework/vulkan/vkDeviceFeatures.cpp
external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp
external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.hpp
external/vulkancts/modules/vulkan/memory/vktMemoryBindingTests.cpp
external/vulkancts/modules/vulkan/memory/vktMemoryTests.cpp
external/vulkancts/mustpass/master/vk-default/memory.txt
external/vulkancts/scripts/src/extensions_data.txt
external/vulkancts/scripts/src/mandatory_features.txt

index 7495230..1dc7aad 100644 (file)
@@ -1,3 +1,205 @@
+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
@@ -25,6 +227,48 @@ dEQP-VK.memory.requirements.create_info.multiplane_image.sparse_optimal
 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
index dd52303..fc1b8fc 100644 (file)
@@ -402,6 +402,208 @@ dEQP-VK.memory.device_group_allocation.random.96
 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
@@ -2900,6 +3102,48 @@ dEQP-VK.memory.binding.priority.aliasing.suballocated.image_33_257
 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
index b6161df..9a771a6 100644 (file)
@@ -102,5 +102,6 @@ static const char* s_allowedDeviceKhrExtensions[] =
        "VK_KHR_global_priority",
        "VK_NV_mesh_shader",
        "VK_KHR_portability_subset",
+       "VK_EXT_pageable_device_local_memory",
 };
 
index e0187f7..bac8958 100644 (file)
@@ -33,11 +33,12 @@ DeviceFeatures::DeviceFeatures      (const InstanceInterface&                       vki,
                                                                 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();
@@ -103,6 +104,8 @@ DeviceFeatures::DeviceFeatures      (const InstanceInterface&                       vki,
                                                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;
@@ -161,6 +164,12 @@ DeviceFeatures::DeviceFeatures     (const InstanceInterface&                       vki,
                                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)
index 9855756..9666eed 100644 (file)
@@ -257,6 +257,16 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                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));
 
@@ -2108,6 +2118,15 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                }
        }
 
+       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;
 }
 
index 09b54e2..7bd983b 100644 (file)
@@ -72,6 +72,13 @@ enum
        MAX_ALLOCATION_COUNT = 4000
 };
 
+enum AllocationMode
+{
+       ALLOCATION_MODE_DEFAULT,
+       ALLOCATION_MODE_DEVICE_GROUP,
+       ALLOCATION_MODE_PAGEABLE
+};
+
 struct TestConfig
 {
        enum Order
@@ -86,24 +93,24 @@ struct TestConfig
        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)
        {
        }
 };
@@ -120,14 +127,14 @@ T roundUpToNextMultiple (T value, T multiple)
 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();
@@ -140,11 +147,11 @@ public:
 
        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;
@@ -164,12 +171,23 @@ void BaseAllocateTestInstance::createTestDevice (void)
        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;
@@ -184,10 +202,19 @@ void BaseAllocateTestInstance::createTestDevice (void)
 
        // 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;
@@ -200,16 +227,16 @@ void BaseAllocateTestInstance::createTestDevice (void)
 
        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);
@@ -241,7 +268,7 @@ void BaseAllocateTestInstance::createDeviceGroup (void)
                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]);
 
@@ -265,7 +292,7 @@ void BaseAllocateTestInstance::createDeviceGroup (void)
        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;
@@ -284,12 +311,12 @@ void BaseAllocateTestInstance::createDeviceGroup (void)
 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);
        }
@@ -408,10 +435,10 @@ tcu::TestStatus AllocateFreeTestInstance::iterate (void)
                                                        {
                                                                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]);
@@ -460,10 +487,10 @@ tcu::TestStatus AllocateFreeTestInstance::iterate (void)
                                                        {
                                                                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]));
@@ -578,7 +605,7 @@ private:
 };
 
 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))
@@ -743,10 +770,10 @@ tcu::TestStatus RandomAllocFreeTestInstance::iterate (void)
                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);
@@ -811,9 +838,21 @@ tcu::TestStatus RandomAllocFreeTestInstance::iterate (void)
 
 } // 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;
@@ -883,7 +922,7 @@ tcu::TestCaseGroup* createAllocationTestsCommon (tcu::TestContext& testCtx, bool
 
                                        config.memorySize                               = allocationSize;
                                        config.order                                    = order;
-                                       config.useDeviceGroups                  = useDeviceGroups;
+                                       config.allocationMode                   = allocationMode;
                                        if (allocationCount == -1)
                                        {
                                                if (allocationSize < 4096)
@@ -933,7 +972,7 @@ tcu::TestCaseGroup* createAllocationTestsCommon (tcu::TestContext& testCtx, bool
 
                                        config.memoryPercentage                 = (float)allocationPercent / 100.0f;
                                        config.order                                    = order;
-                                       config.useDeviceGroups                  = useDeviceGroups;
+                                       config.allocationMode                   = allocationMode;
 
                                        if (allocationCount == -1)
                                        {
@@ -967,7 +1006,7 @@ tcu::TestCaseGroup* createAllocationTestsCommon (tcu::TestContext& testCtx, bool
 
                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));
                }
@@ -980,12 +1019,17 @@ tcu::TestCaseGroup* createAllocationTestsCommon (tcu::TestContext& testCtx, bool
 
 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
index b8903b4..f4255a2 100644 (file)
@@ -33,6 +33,7 @@ namespace memory
 
 tcu::TestCaseGroup* createAllocationTests                              (tcu::TestContext& testCtx);
 tcu::TestCaseGroup* createDeviceGroupAllocationTests   (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createPageableAllocationTests              (tcu::TestContext& testCtx);
 
 } // memory
 } // vkt
index 6b36abb..76c3d81 100644 (file)
 
 #include "vktTestCase.hpp"
 #include "tcuTestLog.hpp"
+#include "vktCustomInstancesDevices.hpp"
 
 #include "vkPlatform.hpp"
+#include "tcuCommandLine.hpp"
 #include "gluVarType.hpp"
 #include "deStringUtil.hpp"
 #include "vkPrograms.hpp"
@@ -140,6 +142,13 @@ protected:
        deUint32                                                        value;
 };
 
+enum PriorityMode
+{
+       PRIORITY_MODE_DEFAULT,
+       PRIORITY_MODE_STATIC,
+       PRIORITY_MODE_DYNAMIC,
+};
+
 struct BindingCaseParameters
 {
        VkBufferCreateFlags                                     flags;
@@ -149,14 +158,14 @@ struct BindingCaseParameters
        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(&params, 0, sizeof(BindingCaseParameters));
@@ -167,7 +176,7 @@ BindingCaseParameters                                       makeBindingCaseParameters                       (deUint32                               targetsCount,
        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;
 }
 
@@ -176,7 +185,7 @@ BindingCaseParameters                                       makeBindingCaseParameters                       (deUint32                               targetsCount,
                                                                                                                                                         VkSharingMode                  sharing,
                                                                                                                                                         VkDeviceSize                   bufferSize,
                                                                                                                                                         VkImageCreateFlags             imageCreateFlags,
-                                                                                                                                                        bool                                   usePriority)
+                                                                                                                                                        PriorityMode                   priorityMode)
 {
        BindingCaseParameters                           params                                                          =
        {
@@ -187,7 +196,7 @@ BindingCaseParameters                                       makeBindingCaseParameters                       (deUint32                               targetsCount,
                {0u, 0u, 0u},                                                                                                           // VkExtent3D                   imageSize;
                targetsCount,                                                                                                           // deUint32                             targetsCount;
                imageCreateFlags,                                                                                                       // VkImageCreateFlags   imageCreateFlags
-               usePriority,                                                                                                            // bool                                 usePriority
+               priorityMode,                                                                                                           // PriorityMode                 priorityMode
        };
        return params;
 }
@@ -426,64 +435,152 @@ Move<VkCommandBuffer>                                    createCommandBuffer                                     (const DeviceInterface& vk,
        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)
@@ -493,24 +590,25 @@ void                                                                      createMemory<VkBuffer, DE_FALSE>        (BuffersList&                   targets,
                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)
@@ -519,24 +617,25 @@ void                                                                      createMemory<VkImage, DE_FALSE>         (ImagesList&                    targets,
                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)
@@ -547,24 +646,25 @@ void                                                                      createMemory<VkBuffer, DE_TRUE>         (BuffersList&                   targets,
 
                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)
@@ -574,31 +674,25 @@ void                                                                      createMemory<VkImage, DE_TRUE>          (ImagesList&                    targets,
 
                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)
@@ -610,15 +704,12 @@ void                                                                      makeBinding<VkBuffer>                           (BuffersList&                   targets,
 }
 
 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)
@@ -629,28 +720,20 @@ void                                                                      makeBinding<VkImage>                            (ImagesList&                    targets,
        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);
@@ -662,16 +745,14 @@ void                                                                      fillUpResource<VkBuffer>                        (Move<VkBuffer>&                source,
 }
 
 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);
 
@@ -681,8 +762,8 @@ void                                                                        fillUpResource<VkImage>                         (Move<VkBuffer>&                source,
        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;
@@ -690,7 +771,7 @@ void                                                                        fillUpResource<VkImage>                         (Move<VkBuffer>&                source,
                        1u,                                                                                                                             // deUint32                             layerCount;
                },                                                                                                                                      // VkImageSubresourceLayers imageSubresource;
                { 0, 0, 0 },                                                                                                            // VkOffset3D                   imageOffset;
-               params.imageSize                                                                                                        // VkExtent3D                   imageExtent;
+               m_params.imageSize                                                                                                      // VkExtent3D                   imageExtent;
        };
 
        beginCommandBuffer(vk, *cmdBuffer);
@@ -702,61 +783,43 @@ void                                                                      fillUpResource<VkImage>                         (Move<VkBuffer>&                source,
        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);
 
@@ -771,20 +834,18 @@ void                                                                      layoutTransitionResource<VkImage>       (Move<VkImage>&                 target,
 }
 
 
-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);
@@ -792,38 +853,34 @@ void                                                                      createBuffer                                            (Move<VkBuffer>&                buffer,
        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;
@@ -832,13 +889,12 @@ deBool                                                                    checkData                                                       (VkDeviceMemory                 memory,
 }
 
 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)
        {
        }
 
@@ -848,43 +904,40 @@ public:
                                                                                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)
        {
        }
 
@@ -895,36 +948,34 @@ public:
                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>
@@ -953,8 +1004,10 @@ public:
        {
                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:
@@ -967,9 +1020,9 @@ tcu::TestCaseGroup* createMemoryBindingTests (tcu::TestContext& testCtx)
 {
        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."));
 
@@ -983,8 +1036,8 @@ tcu::TestCaseGroup* createMemoryBindingTests (tcu::TestContext& testCtx)
                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;
@@ -1000,8 +1053,8 @@ tcu::TestCaseGroup* createMemoryBindingTests (tcu::TestContext& testCtx)
                {
                        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;
@@ -1014,8 +1067,8 @@ tcu::TestCaseGroup* createMemoryBindingTests (tcu::TestContext& testCtx)
                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());
index 4a5e932..05d6cc7 100644 (file)
@@ -46,6 +46,7 @@ void createChildren (tcu::TestCaseGroup* memoryTests)
 
        memoryTests->addChild(createAllocationTests                                     (testCtx));
        memoryTests->addChild(createDeviceGroupAllocationTests          (testCtx));
+       memoryTests->addChild(createPageableAllocationTests                     (testCtx));
        memoryTests->addChild(createMappingTests                                        (testCtx));
        memoryTests->addChild(createPipelineBarrierTests                        (testCtx));
        memoryTests->addChild(createRequirementsTests                           (testCtx));
index dd52303..fc1b8fc 100644 (file)
@@ -402,6 +402,208 @@ dEQP-VK.memory.device_group_allocation.random.96
 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
@@ -2900,6 +3102,48 @@ dEQP-VK.memory.binding.priority.aliasing.suballocated.image_33_257
 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
index 196c686..36e1528 100644 (file)
@@ -120,3 +120,4 @@ VK_EXT_border_color_swizzle                                 DEVICE
 VK_KHR_global_priority                                 DEVICE
 VK_NV_mesh_shader                                                      DEVICE
 VK_KHR_portability_subset                                      DEVICE
+VK_EXT_pageable_device_local_memory                    DEVICE
index 456ceb9..8f047f6 100644 (file)
@@ -167,3 +167,4 @@ VkPhysicalDeviceVulkan13Features                                                    FEATURES ( shaderZeroInitializeWorkgroupM
 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 )