Test contradictory parameters on swapchain creation
authorRicardo Garcia <rgarcia@igalia.com>
Tue, 26 Oct 2021 11:30:52 +0000 (13:30 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 29 Oct 2021 19:19:43 +0000 (19:19 +0000)
This commit adds new tests that check the implementation properly
ignores queueFamilyIndexCount and pQueueFamilyIndices on swapchain
creation when imageSharingMode is set to VK_SHARING_MODE_EXCLUSIVE, by
providing a null pointer in pQueueFamilyIndices and a nonzero
queueFamilyIndexCount.

In addition, swapchain creation tests using VK_SHARING_MODE_EXCLUSIVE
will no longer pass 1 in queueFamilyIndexCount and a list of
surface-compatible queues in pQueueFamilyIndices, setting
queueFamilyIndexCount to 0 and passing a null pointer instead.

Finally, the commit adds de::arrayLength as a more modern and constexpr
way of obtaining the size of statically-sized arrays, similar to
DE_LENGTH_OF_ARRAY, which can be used with static_assert.

New tests:
dEQP-VK.*exclusive_nonzero_queues

Affected tests:
dEQP-VK.*.swapchain.create.*

Components: Framework, Vulkan
VK-GL-CTS issue: 3244

Change-Id: I631aba22ac18d1fe6a2fcc8bf41890b2e8a2cc91

android/cts/master/vk-master-2021-03-01/wsi.txt
android/cts/master/vk-master/wsi.txt
external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
external/vulkancts/mustpass/master/vk-default/wsi.txt
framework/delibs/decpp/deDefs.hpp

index 8e94c48..79a97fa 100644 (file)
@@ -1,3 +1,5 @@
+dEQP-VK.wsi.android.swapchain.create.exclusive_nonzero_queues
+dEQP-VK.wsi.android.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.android.swapchain.destroy.old_swapchain
 dEQP-VK.wsi.android.swapchain.acquire.too_many
 dEQP-VK.wsi.android.swapchain.acquire.too_many_timeout
@@ -10,6 +12,7 @@ dEQP-VK.wsi.android.swapchain.private_data.pre_transform
 dEQP-VK.wsi.android.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.android.swapchain.private_data.present_mode
 dEQP-VK.wsi.android.swapchain.private_data.clipped
+dEQP-VK.wsi.android.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.android.colorspace_compare.b8g8r8a8_unorm
 dEQP-VK.wsi.android.colorspace_compare.r8g8b8a8_unorm
 dEQP-VK.wsi.android.colorspace_compare.r8g8b8a8_srgb
@@ -29,6 +32,8 @@ dEQP-VK.wsi.android.present_id_wait.wait.no_frames
 dEQP-VK.wsi.android.present_id_wait.wait.no_frame_id
 dEQP-VK.wsi.android.present_id_wait.wait.future_frame
 dEQP-VK.wsi.android.present_id_wait.wait.two_swapchains
+dEQP-VK.wsi.macos.swapchain.create.exclusive_nonzero_queues
+dEQP-VK.wsi.macos.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.macos.swapchain.destroy.old_swapchain
 dEQP-VK.wsi.macos.swapchain.acquire.too_many
 dEQP-VK.wsi.macos.swapchain.acquire.too_many_timeout
@@ -41,6 +46,7 @@ dEQP-VK.wsi.macos.swapchain.private_data.pre_transform
 dEQP-VK.wsi.macos.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.macos.swapchain.private_data.present_mode
 dEQP-VK.wsi.macos.swapchain.private_data.clipped
+dEQP-VK.wsi.macos.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.macos.colorspace_compare.b8g8r8a8_unorm
 dEQP-VK.wsi.macos.colorspace_compare.r8g8b8a8_unorm
 dEQP-VK.wsi.macos.colorspace_compare.r8g8b8a8_srgb
@@ -85,6 +91,7 @@ dEQP-VK.wsi.headless.swapchain.create.pre_transform
 dEQP-VK.wsi.headless.swapchain.create.composite_alpha
 dEQP-VK.wsi.headless.swapchain.create.present_mode
 dEQP-VK.wsi.headless.swapchain.create.clipped
+dEQP-VK.wsi.headless.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.headless.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.headless.swapchain.simulate_oom.image_format
@@ -96,6 +103,7 @@ dEQP-VK.wsi.headless.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.headless.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.headless.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.headless.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.headless.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.headless.swapchain.render.basic
 dEQP-VK.wsi.headless.swapchain.render.basic2
@@ -121,6 +129,7 @@ dEQP-VK.wsi.headless.swapchain.private_data.pre_transform
 dEQP-VK.wsi.headless.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.headless.swapchain.private_data.present_mode
 dEQP-VK.wsi.headless.swapchain.private_data.clipped
+dEQP-VK.wsi.headless.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
index 592e562..d6a0795 100644 (file)
@@ -22,6 +22,7 @@ dEQP-VK.wsi.android.swapchain.create.pre_transform
 dEQP-VK.wsi.android.swapchain.create.composite_alpha
 dEQP-VK.wsi.android.swapchain.create.present_mode
 dEQP-VK.wsi.android.swapchain.create.clipped
+dEQP-VK.wsi.android.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.android.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.android.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.android.swapchain.simulate_oom.image_format
@@ -33,6 +34,7 @@ dEQP-VK.wsi.android.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.android.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.android.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.android.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.android.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.android.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.android.swapchain.render.basic
 dEQP-VK.wsi.android.swapchain.render.basic2
@@ -58,6 +60,7 @@ dEQP-VK.wsi.android.swapchain.private_data.pre_transform
 dEQP-VK.wsi.android.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.android.swapchain.private_data.present_mode
 dEQP-VK.wsi.android.swapchain.private_data.clipped
+dEQP-VK.wsi.android.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
@@ -835,6 +838,7 @@ dEQP-VK.wsi.macos.swapchain.create.pre_transform
 dEQP-VK.wsi.macos.swapchain.create.composite_alpha
 dEQP-VK.wsi.macos.swapchain.create.present_mode
 dEQP-VK.wsi.macos.swapchain.create.clipped
+dEQP-VK.wsi.macos.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.macos.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.macos.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.macos.swapchain.simulate_oom.image_format
@@ -846,6 +850,7 @@ dEQP-VK.wsi.macos.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.macos.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.macos.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.macos.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.macos.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.macos.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.macos.swapchain.render.basic
 dEQP-VK.wsi.macos.swapchain.render.basic2
@@ -870,6 +875,7 @@ dEQP-VK.wsi.macos.swapchain.private_data.pre_transform
 dEQP-VK.wsi.macos.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.macos.swapchain.private_data.present_mode
 dEQP-VK.wsi.macos.swapchain.private_data.clipped
+dEQP-VK.wsi.macos.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
@@ -1285,6 +1291,7 @@ dEQP-VK.wsi.headless.swapchain.create.pre_transform
 dEQP-VK.wsi.headless.swapchain.create.composite_alpha
 dEQP-VK.wsi.headless.swapchain.create.present_mode
 dEQP-VK.wsi.headless.swapchain.create.clipped
+dEQP-VK.wsi.headless.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.headless.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.headless.swapchain.simulate_oom.image_format
@@ -1296,6 +1303,7 @@ dEQP-VK.wsi.headless.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.headless.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.headless.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.headless.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.headless.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.headless.swapchain.render.basic
 dEQP-VK.wsi.headless.swapchain.render.basic2
@@ -1321,6 +1329,7 @@ dEQP-VK.wsi.headless.swapchain.private_data.pre_transform
 dEQP-VK.wsi.headless.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.headless.swapchain.private_data.present_mode
 dEQP-VK.wsi.headless.swapchain.private_data.clipped
+dEQP-VK.wsi.headless.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
index 0535bb3..3292657 100644 (file)
@@ -346,6 +346,7 @@ enum TestDimension
        TEST_DIMENSION_COMPOSITE_ALPHA,
        TEST_DIMENSION_PRESENT_MODE,
        TEST_DIMENSION_CLIPPED,
+       TEST_DIMENSION_EXCLUSIVE_NONZERO,       //!< Test VK_SHARING_MODE_EXCLUSIVE and a nonzero queue count.
 
        TEST_DIMENSION_LAST
 };
@@ -363,8 +364,11 @@ const char* getTestDimensionName (TestDimension dimension)
                "pre_transform",
                "composite_alpha",
                "present_mode",
-               "clipped"
+               "clipped",
+               "exclusive_nonzero_queues",
        };
+       static_assert(static_cast<int>(de::arrayLength(s_names)) == TEST_DIMENSION_LAST,
+               "Array of names does not provide a 1:1 mapping to TestDimension");
        return de::getSizedArrayElement<TEST_DIMENSION_LAST>(s_names, dimension);
 }
 
@@ -410,7 +414,7 @@ vector<VkSwapchainCreateInfoKHR> generateSwapchainParameterCases (const Instance
                VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
                VK_SHARING_MODE_EXCLUSIVE,
                0u,
-               (const deUint32*)DE_NULL,
+               nullptr,
                defaultTransform,
                VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
                VK_PRESENT_MODE_FIFO_KHR,
@@ -591,6 +595,15 @@ vector<VkSwapchainCreateInfoKHR> generateSwapchainParameterCases (const Instance
                        break;
                }
 
+               case TEST_DIMENSION_EXCLUSIVE_NONZERO:
+               {
+                       // Test the implementation doesn't attempt to do anything with the queue index array in exclusive sharing mode.
+                       cases.push_back(baseParameters);
+                       cases.back().queueFamilyIndexCount = 2u;
+
+                       break;
+               }
+
                default:
                        DE_FATAL("Impossible");
        }
@@ -637,20 +650,16 @@ tcu::TestStatus createSwapchainTest (Context& context, TestParameters params)
 
                if (curParams.imageSharingMode == VK_SHARING_MODE_CONCURRENT)
                {
-                       const deUint32 numFamilies = static_cast<deUint32>(devHelper.queueFamilyIndices.size());
+                       const auto numFamilies = static_cast<deUint32>(devHelper.queueFamilyIndices.size());
                        if (numFamilies < 2u)
                                TCU_THROW(NotSupportedError, "Only " + de::toString(numFamilies) + " queue families available for VK_SHARING_MODE_CONCURRENT");
+
                        curParams.queueFamilyIndexCount = numFamilies;
+                       curParams.pQueueFamilyIndices   = devHelper.queueFamilyIndices.data();
                }
-               else
-               {
-                       // Take only the first queue.
-                       if (devHelper.queueFamilyIndices.empty())
-                               TCU_THROW(NotSupportedError, "No queue families compatible with the given surface");
-                       curParams.queueFamilyIndexCount = 1u;
-               }
-               curParams.pQueueFamilyIndices   = devHelper.queueFamilyIndices.data();
-               curParams.surface                               = *surface;
+
+               // Overwrite surface.
+               curParams.surface = *surface;
 
                log << TestLog::Message << subcase.str() << curParams << TestLog::EndMessage;
 
index 5180656..5a98150 100644 (file)
@@ -25,6 +25,7 @@ dEQP-VK.wsi.xlib.swapchain.create.pre_transform
 dEQP-VK.wsi.xlib.swapchain.create.composite_alpha
 dEQP-VK.wsi.xlib.swapchain.create.present_mode
 dEQP-VK.wsi.xlib.swapchain.create.clipped
+dEQP-VK.wsi.xlib.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.xlib.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.xlib.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.xlib.swapchain.simulate_oom.image_format
@@ -36,6 +37,7 @@ dEQP-VK.wsi.xlib.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.xlib.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.xlib.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.xlib.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.xlib.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.xlib.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.xlib.swapchain.render.basic
 dEQP-VK.wsi.xlib.swapchain.render.basic2
@@ -60,6 +62,7 @@ dEQP-VK.wsi.xlib.swapchain.private_data.pre_transform
 dEQP-VK.wsi.xlib.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.xlib.swapchain.private_data.present_mode
 dEQP-VK.wsi.xlib.swapchain.private_data.clipped
+dEQP-VK.wsi.xlib.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.xlib.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.xlib.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.xlib.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
@@ -477,6 +480,7 @@ dEQP-VK.wsi.xcb.swapchain.create.pre_transform
 dEQP-VK.wsi.xcb.swapchain.create.composite_alpha
 dEQP-VK.wsi.xcb.swapchain.create.present_mode
 dEQP-VK.wsi.xcb.swapchain.create.clipped
+dEQP-VK.wsi.xcb.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.xcb.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.xcb.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.xcb.swapchain.simulate_oom.image_format
@@ -488,6 +492,7 @@ dEQP-VK.wsi.xcb.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.xcb.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.xcb.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.xcb.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.xcb.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.xcb.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.xcb.swapchain.render.basic
 dEQP-VK.wsi.xcb.swapchain.render.basic2
@@ -512,6 +517,7 @@ dEQP-VK.wsi.xcb.swapchain.private_data.pre_transform
 dEQP-VK.wsi.xcb.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.xcb.swapchain.private_data.present_mode
 dEQP-VK.wsi.xcb.swapchain.private_data.clipped
+dEQP-VK.wsi.xcb.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.xcb.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.xcb.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.xcb.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
@@ -927,6 +933,7 @@ dEQP-VK.wsi.wayland.swapchain.create.pre_transform
 dEQP-VK.wsi.wayland.swapchain.create.composite_alpha
 dEQP-VK.wsi.wayland.swapchain.create.present_mode
 dEQP-VK.wsi.wayland.swapchain.create.clipped
+dEQP-VK.wsi.wayland.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.wayland.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.wayland.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.wayland.swapchain.simulate_oom.image_format
@@ -938,6 +945,7 @@ dEQP-VK.wsi.wayland.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.wayland.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.wayland.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.wayland.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.wayland.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.wayland.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.wayland.swapchain.render.basic
 dEQP-VK.wsi.wayland.swapchain.render.basic2
@@ -963,6 +971,7 @@ dEQP-VK.wsi.wayland.swapchain.private_data.pre_transform
 dEQP-VK.wsi.wayland.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.wayland.swapchain.private_data.present_mode
 dEQP-VK.wsi.wayland.swapchain.private_data.clipped
+dEQP-VK.wsi.wayland.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.wayland.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.wayland.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.wayland.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
@@ -1379,6 +1388,7 @@ dEQP-VK.wsi.android.swapchain.create.pre_transform
 dEQP-VK.wsi.android.swapchain.create.composite_alpha
 dEQP-VK.wsi.android.swapchain.create.present_mode
 dEQP-VK.wsi.android.swapchain.create.clipped
+dEQP-VK.wsi.android.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.android.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.android.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.android.swapchain.simulate_oom.image_format
@@ -1390,6 +1400,7 @@ dEQP-VK.wsi.android.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.android.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.android.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.android.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.android.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.android.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.android.swapchain.render.basic
 dEQP-VK.wsi.android.swapchain.render.basic2
@@ -1415,6 +1426,7 @@ dEQP-VK.wsi.android.swapchain.private_data.pre_transform
 dEQP-VK.wsi.android.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.android.swapchain.private_data.present_mode
 dEQP-VK.wsi.android.swapchain.private_data.clipped
+dEQP-VK.wsi.android.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
@@ -2552,6 +2564,7 @@ dEQP-VK.wsi.win32.swapchain.create.pre_transform
 dEQP-VK.wsi.win32.swapchain.create.composite_alpha
 dEQP-VK.wsi.win32.swapchain.create.present_mode
 dEQP-VK.wsi.win32.swapchain.create.clipped
+dEQP-VK.wsi.win32.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.win32.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.win32.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.win32.swapchain.simulate_oom.image_format
@@ -2563,6 +2576,7 @@ dEQP-VK.wsi.win32.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.win32.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.win32.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.win32.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.win32.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.win32.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.win32.swapchain.render.basic
 dEQP-VK.wsi.win32.swapchain.render.basic2
@@ -2587,6 +2601,7 @@ dEQP-VK.wsi.win32.swapchain.private_data.pre_transform
 dEQP-VK.wsi.win32.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.win32.swapchain.private_data.present_mode
 dEQP-VK.wsi.win32.swapchain.private_data.clipped
+dEQP-VK.wsi.win32.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.win32.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.win32.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.win32.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
@@ -3004,6 +3019,7 @@ dEQP-VK.wsi.macos.swapchain.create.pre_transform
 dEQP-VK.wsi.macos.swapchain.create.composite_alpha
 dEQP-VK.wsi.macos.swapchain.create.present_mode
 dEQP-VK.wsi.macos.swapchain.create.clipped
+dEQP-VK.wsi.macos.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.macos.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.macos.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.macos.swapchain.simulate_oom.image_format
@@ -3015,6 +3031,7 @@ dEQP-VK.wsi.macos.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.macos.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.macos.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.macos.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.macos.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.macos.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.macos.swapchain.render.basic
 dEQP-VK.wsi.macos.swapchain.render.basic2
@@ -3039,6 +3056,7 @@ dEQP-VK.wsi.macos.swapchain.private_data.pre_transform
 dEQP-VK.wsi.macos.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.macos.swapchain.private_data.present_mode
 dEQP-VK.wsi.macos.swapchain.private_data.clipped
+dEQP-VK.wsi.macos.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
@@ -3454,6 +3472,7 @@ dEQP-VK.wsi.headless.swapchain.create.pre_transform
 dEQP-VK.wsi.headless.swapchain.create.composite_alpha
 dEQP-VK.wsi.headless.swapchain.create.present_mode
 dEQP-VK.wsi.headless.swapchain.create.clipped
+dEQP-VK.wsi.headless.swapchain.create.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.swapchain.create.image_swapchain_create_info
 dEQP-VK.wsi.headless.swapchain.simulate_oom.min_image_count
 dEQP-VK.wsi.headless.swapchain.simulate_oom.image_format
@@ -3465,6 +3484,7 @@ dEQP-VK.wsi.headless.swapchain.simulate_oom.pre_transform
 dEQP-VK.wsi.headless.swapchain.simulate_oom.composite_alpha
 dEQP-VK.wsi.headless.swapchain.simulate_oom.present_mode
 dEQP-VK.wsi.headless.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.headless.swapchain.simulate_oom.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.swapchain.simulate_oom.image_swapchain_create_info
 dEQP-VK.wsi.headless.swapchain.render.basic
 dEQP-VK.wsi.headless.swapchain.render.basic2
@@ -3490,6 +3510,7 @@ dEQP-VK.wsi.headless.swapchain.private_data.pre_transform
 dEQP-VK.wsi.headless.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.headless.swapchain.private_data.present_mode
 dEQP-VK.wsi.headless.swapchain.private_data.clipped
+dEQP-VK.wsi.headless.swapchain.private_data.exclusive_nonzero_queues
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.opaque.reference
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.opaque.incremental_present
 dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
index 62704f0..7b6dede 100644 (file)
@@ -127,6 +127,10 @@ size_t alignOf (void)
        return (size_t)DE_OFFSET_OF(PaddingCheck, t);
 }
 
+//! Similar to DE_LENGTH_OF_ARRAY but constexpr and without auxiliar helpers.
+template <typename T, size_t N>
+constexpr size_t arrayLength (const T (&)[N]) { return N; }
+
 } // de
 
 /*--------------------------------------------------------------------*//*!