Add test veryifying if proper 'count' is written in wsi getters
authorSlawomir Cygan <slawomir.cygan@intel.com>
Tue, 23 Oct 2018 15:06:34 +0000 (17:06 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 30 Nov 2018 11:16:07 +0000 (06:16 -0500)
Some functions returning arbitrary number of elements were not tested to update
'count', if the return array was given (not null).

Components: vulkan.h.in

VK-GL-CTS Issue: 1449

New Tests:
dEQP-VK.wsi.*.swapchain.get_images.count

Affects:
dEQP-VK.wsi.*.surface.query_formats
dEQP-VK.wsi.*.surface.query_formats2
dEQP-VK.wsi.*.surface.query_present_modes

Change-Id: Ic21e11110f420ecbc3785a43cff705ddcab512b4

android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp
external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
external/vulkancts/mustpass/1.1.3/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.1.3/vk-default.txt

index 5c5c3c7..0b8a022 100755 (executable)
@@ -327929,6 +327929,7 @@ dEQP-VK.wsi.android.swapchain.render.basic
 dEQP-VK.wsi.android.swapchain.modify.resize
 dEQP-VK.wsi.android.swapchain.destroy.null_handle
 dEQP-VK.wsi.android.swapchain.get_images.incomplete
+dEQP-VK.wsi.android.swapchain.get_images.count
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.android.incremental_present.scale_none.mailbox.reference
@@ -327997,6 +327998,7 @@ dEQP-VK.wsi.macos.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.macos.swapchain.render.basic
 dEQP-VK.wsi.macos.swapchain.destroy.null_handle
 dEQP-VK.wsi.macos.swapchain.get_images.incomplete
+dEQP-VK.wsi.macos.swapchain.get_images.count
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.reference
index d978573..046b2c0 100644 (file)
@@ -614,9 +614,26 @@ tcu::TestStatus querySurfaceFormatsTest (Context& context, Type wsiType)
        {
                if (isSupportedByAnyQueue(instHelper.vki, physicalDevices[deviceNdx], *surface))
                {
-                       const vector<VkSurfaceFormatKHR>        formats = getPhysicalDeviceSurfaceFormats(instHelper.vki,
-                                                                                                                                                                                 physicalDevices[deviceNdx],
-                                                                                                                                                                                 *surface);
+                       deUint32        numFormats = 0;
+
+                       VK_CHECK(instHelper.vki.getPhysicalDeviceSurfaceFormatsKHR(physicalDevices[deviceNdx], *surface, &numFormats, DE_NULL));
+
+                       std::vector<VkSurfaceFormatKHR> formats (numFormats + 1);
+
+                       if (numFormats > 0)
+                       {
+                               const deUint32 numFormatsOrig = numFormats;
+
+                               // check if below call properly overwrites formats count
+                               numFormats++;
+
+                               VK_CHECK(instHelper.vki.getPhysicalDeviceSurfaceFormatsKHR(physicalDevices[deviceNdx], *surface, &numFormats, &formats[0]));
+
+                               if (numFormats != numFormatsOrig)
+                                       results.fail("Format count changed between calls");
+                       }
+
+                       formats.pop_back();
 
                        log << TestLog::Message << "Device " << deviceNdx << ": " << tcu::formatArray(formats.begin(), formats.end()) << TestLog::EndMessage;
 
@@ -661,7 +678,7 @@ tcu::TestStatus querySurfaceFormats2Test (Context& context, Type wsiType)
 
                        if (numFormats > 0)
                        {
-                               vector<VkSurfaceFormat2KHR>     formats (numFormats);
+                               vector<VkSurfaceFormat2KHR>     formats (numFormats + 1);
 
                                for (size_t ndx = 0; ndx < formats.size(); ++ndx)
                                {
@@ -669,11 +686,18 @@ tcu::TestStatus querySurfaceFormats2Test (Context& context, Type wsiType)
                                        formats[ndx].pNext = DE_NULL;
                                }
 
+                               const deUint32 numFormatsOrig = numFormats;
+
+                               // check if below call properly overwrites formats count
+                               numFormats++;
+
                                VK_CHECK(instHelper.vki.getPhysicalDeviceSurfaceFormats2KHR(physicalDevices[deviceNdx], &surfaceInfo, &numFormats, &formats[0]));
 
-                               if ((size_t)numFormats != formats.size())
+                               if ((size_t)numFormats != numFormatsOrig)
                                        results.fail("Format count changed between calls");
 
+                               formats.pop_back();
+
                                {
                                        vector<VkSurfaceFormatKHR>      extFormats      (formats.size());
 
@@ -746,7 +770,26 @@ tcu::TestStatus querySurfacePresentModesTest (Context& context, Type wsiType)
        {
                if (isSupportedByAnyQueue(instHelper.vki, physicalDevices[deviceNdx], *surface))
                {
-                       const vector<VkPresentModeKHR>  modes   = getPhysicalDeviceSurfacePresentModes(instHelper.vki, physicalDevices[deviceNdx], *surface);
+                       deUint32        numModes = 0;
+
+                       VK_CHECK(instHelper.vki.getPhysicalDeviceSurfacePresentModesKHR(physicalDevices[deviceNdx], *surface, &numModes, DE_NULL));
+
+                       vector<VkPresentModeKHR>        modes   (numModes + 1);
+
+                       if (numModes > 0)
+                       {
+                               const deUint32 numModesOrig = numModes;
+
+                               // check if below call properly overwrites mode count
+                               numModes++;
+
+                               VK_CHECK(instHelper.vki.getPhysicalDeviceSurfacePresentModesKHR(physicalDevices[deviceNdx], *surface, &numModes, &modes[0]));
+
+                               if ((size_t)numModes != numModesOrig)
+                                       TCU_FAIL("Mode count changed between calls");
+                       }
+
+                       modes.pop_back();
 
                        log << TestLog::Message << "Device " << deviceNdx << ": " << tcu::formatArray(modes.begin(), modes.end()) << TestLog::EndMessage;
 
index 951aa25..318f9ab 100644 (file)
@@ -1471,6 +1471,36 @@ tcu::TestStatus getImagesIncompleteResultTest (Context& context, Type wsiType)
                return tcu::TestStatus::pass("Get swapchain images tests succeeded");
 }
 
+tcu::TestStatus getImagesResultsCountTest (Context& context, Type wsiType)
+{
+       const tcu::UVec2                                desiredSize(256, 256);
+       const InstanceHelper                    instHelper(context, wsiType);
+       const NativeObjects                             native(context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize));
+       const Unique<VkSurfaceKHR>              surface(createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window));
+       const DeviceHelper                              devHelper(context, instHelper.vki, *instHelper.instance, *surface);
+       const VkSwapchainCreateInfoKHR  swapchainInfo = getBasicSwapchainParameters(wsiType, instHelper.vki, devHelper.physicalDevice, *surface, desiredSize, 2);
+       const Unique<VkSwapchainKHR>    swapchain(createSwapchainKHR(devHelper.vkd, *devHelper.device, &swapchainInfo));
+
+       deUint32        numImages = 0;
+
+       VK_CHECK(devHelper.vkd.getSwapchainImagesKHR(*devHelper.device, *swapchain, &numImages, DE_NULL));
+
+       if (numImages > 0)
+       {
+               std::vector<VkImage>    images                  (numImages + 1);
+               const deUint32                  numImagesOrig   = numImages;
+
+               // check if below call properly overwrites formats count
+               numImages++;
+
+               VK_CHECK(devHelper.vkd.getSwapchainImagesKHR(*devHelper.device, *swapchain, &numImages, &images[0]));
+
+               if ((size_t)numImages != numImagesOrig)
+                       TCU_FAIL("Image count changed between calls");
+       }
+       return tcu::TestStatus::pass("Get swapchain images tests succeeded");
+}
+
 tcu::TestStatus destroyNullHandleSwapchainTest (Context& context, Type wsiType)
 {
        const InstanceHelper            instHelper      (context, wsiType);
@@ -1508,6 +1538,7 @@ void populateRenderGroup (tcu::TestCaseGroup* testGroup, Type wsiType)
 void populateGetImagesGroup (tcu::TestCaseGroup* testGroup, Type wsiType)
 {
        addFunctionCase(testGroup, "incomplete", "Test VK_INCOMPLETE return code", getImagesIncompleteResultTest, wsiType);
+       addFunctionCase(testGroup, "count",     "Test proper count of images", getImagesResultsCountTest, wsiType);
 }
 
 void populateModifyGroup (tcu::TestCaseGroup* testGroup, Type wsiType)
index db3701a..31c65cd 100644 (file)
@@ -328055,6 +328055,7 @@ dEQP-VK.wsi.xlib.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.xlib.swapchain.render.basic
 dEQP-VK.wsi.xlib.swapchain.destroy.null_handle
 dEQP-VK.wsi.xlib.swapchain.get_images.incomplete
+dEQP-VK.wsi.xlib.swapchain.get_images.count
 dEQP-VK.wsi.xlib.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.xlib.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.xlib.incremental_present.scale_none.mailbox.reference
@@ -328113,6 +328114,7 @@ dEQP-VK.wsi.xcb.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.xcb.swapchain.render.basic
 dEQP-VK.wsi.xcb.swapchain.destroy.null_handle
 dEQP-VK.wsi.xcb.swapchain.get_images.incomplete
+dEQP-VK.wsi.xcb.swapchain.get_images.count
 dEQP-VK.wsi.xcb.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.xcb.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.xcb.incremental_present.scale_none.mailbox.reference
@@ -328170,6 +328172,7 @@ dEQP-VK.wsi.wayland.swapchain.render.basic
 dEQP-VK.wsi.wayland.swapchain.modify.resize
 dEQP-VK.wsi.wayland.swapchain.destroy.null_handle
 dEQP-VK.wsi.wayland.swapchain.get_images.incomplete
+dEQP-VK.wsi.wayland.swapchain.get_images.count
 dEQP-VK.wsi.wayland.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.wayland.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.wayland.incremental_present.scale_none.mailbox.reference
@@ -328229,6 +328232,7 @@ dEQP-VK.wsi.mir.swapchain.render.basic
 dEQP-VK.wsi.mir.swapchain.modify.resize
 dEQP-VK.wsi.mir.swapchain.destroy.null_handle
 dEQP-VK.wsi.mir.swapchain.get_images.incomplete
+dEQP-VK.wsi.mir.swapchain.get_images.count
 dEQP-VK.wsi.mir.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.mir.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.mir.incremental_present.scale_none.mailbox.reference
@@ -328307,6 +328311,7 @@ dEQP-VK.wsi.android.swapchain.render.basic
 dEQP-VK.wsi.android.swapchain.modify.resize
 dEQP-VK.wsi.android.swapchain.destroy.null_handle
 dEQP-VK.wsi.android.swapchain.get_images.incomplete
+dEQP-VK.wsi.android.swapchain.get_images.count
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.android.incremental_present.scale_none.mailbox.reference
@@ -328385,6 +328390,7 @@ dEQP-VK.wsi.win32.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.win32.swapchain.render.basic
 dEQP-VK.wsi.win32.swapchain.destroy.null_handle
 dEQP-VK.wsi.win32.swapchain.get_images.incomplete
+dEQP-VK.wsi.win32.swapchain.get_images.count
 dEQP-VK.wsi.win32.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.win32.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.win32.incremental_present.scale_none.mailbox.reference
@@ -328443,6 +328449,7 @@ dEQP-VK.wsi.macos.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.macos.swapchain.render.basic
 dEQP-VK.wsi.macos.swapchain.destroy.null_handle
 dEQP-VK.wsi.macos.swapchain.get_images.incomplete
+dEQP-VK.wsi.macos.swapchain.get_images.count
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.reference
index fed9a0b..c38124d 100644 (file)
@@ -328016,6 +328016,7 @@ dEQP-VK.wsi.xlib.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.xlib.swapchain.render.basic
 dEQP-VK.wsi.xlib.swapchain.destroy.null_handle
 dEQP-VK.wsi.xlib.swapchain.get_images.incomplete
+dEQP-VK.wsi.xlib.swapchain.get_images.count
 dEQP-VK.wsi.xlib.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.xlib.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.xlib.incremental_present.scale_none.mailbox.reference
@@ -328074,6 +328075,7 @@ dEQP-VK.wsi.xcb.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.xcb.swapchain.render.basic
 dEQP-VK.wsi.xcb.swapchain.destroy.null_handle
 dEQP-VK.wsi.xcb.swapchain.get_images.incomplete
+dEQP-VK.wsi.xcb.swapchain.get_images.count
 dEQP-VK.wsi.xcb.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.xcb.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.xcb.incremental_present.scale_none.mailbox.reference
@@ -328131,6 +328133,7 @@ dEQP-VK.wsi.wayland.swapchain.render.basic
 dEQP-VK.wsi.wayland.swapchain.modify.resize
 dEQP-VK.wsi.wayland.swapchain.destroy.null_handle
 dEQP-VK.wsi.wayland.swapchain.get_images.incomplete
+dEQP-VK.wsi.wayland.swapchain.get_images.count
 dEQP-VK.wsi.wayland.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.wayland.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.wayland.incremental_present.scale_none.mailbox.reference
@@ -328190,6 +328193,7 @@ dEQP-VK.wsi.mir.swapchain.render.basic
 dEQP-VK.wsi.mir.swapchain.modify.resize
 dEQP-VK.wsi.mir.swapchain.destroy.null_handle
 dEQP-VK.wsi.mir.swapchain.get_images.incomplete
+dEQP-VK.wsi.mir.swapchain.get_images.count
 dEQP-VK.wsi.mir.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.mir.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.mir.incremental_present.scale_none.mailbox.reference
@@ -328268,6 +328272,7 @@ dEQP-VK.wsi.android.swapchain.render.basic
 dEQP-VK.wsi.android.swapchain.modify.resize
 dEQP-VK.wsi.android.swapchain.destroy.null_handle
 dEQP-VK.wsi.android.swapchain.get_images.incomplete
+dEQP-VK.wsi.android.swapchain.get_images.count
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.android.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.android.incremental_present.scale_none.mailbox.reference
@@ -328346,6 +328351,7 @@ dEQP-VK.wsi.win32.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.win32.swapchain.render.basic
 dEQP-VK.wsi.win32.swapchain.destroy.null_handle
 dEQP-VK.wsi.win32.swapchain.get_images.incomplete
+dEQP-VK.wsi.win32.swapchain.get_images.count
 dEQP-VK.wsi.win32.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.win32.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.win32.incremental_present.scale_none.mailbox.reference
@@ -328404,6 +328410,7 @@ dEQP-VK.wsi.macos.swapchain.simulate_oom.clipped
 dEQP-VK.wsi.macos.swapchain.render.basic
 dEQP-VK.wsi.macos.swapchain.destroy.null_handle
 dEQP-VK.wsi.macos.swapchain.get_images.incomplete
+dEQP-VK.wsi.macos.swapchain.get_images.count
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.reference
 dEQP-VK.wsi.macos.incremental_present.scale_none.immediate.incremental_present
 dEQP-VK.wsi.macos.incremental_present.scale_none.mailbox.reference