Add test: waitForFences with an empty queueSubmit
authorMaciej Jesionowski <maciej.jesionowski@mobica.com>
Tue, 27 Sep 2016 13:26:20 +0000 (15:26 +0200)
committerPyry Haulos <phaulos@google.com>
Thu, 13 Oct 2016 19:57:48 +0000 (12:57 -0700)
If submitCount is zero but fence is not VK_NULL_HANDLE, the fence will
still be submitted to the queue and will become signaled when all work
previously submitted to the queue has completed.

New test:
- dEQP-VK.synchronization.basic.fence.empty_submit

Fixes #501

Change-Id: Id5c8acf9ad719b64109c85f54c48b4117217452b

android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicFenceTests.cpp
external/vulkancts/mustpass/1.0.2/vk-default.txt

index 6232e3c..b357087 100644 (file)
@@ -104085,6 +104085,7 @@ dEQP-VK.synchronization.smoke.semaphores
 dEQP-VK.synchronization.smoke.events
 dEQP-VK.synchronization.basic.fence.one
 dEQP-VK.synchronization.basic.fence.multi
+dEQP-VK.synchronization.basic.fence.empty_submit
 dEQP-VK.synchronization.basic.semaphore.one_queue
 dEQP-VK.synchronization.basic.semaphore.multi_queue
 dEQP-VK.synchronization.basic.event.host_set_reset
index fbde395..b19b6ed 100644 (file)
@@ -27,7 +27,6 @@
 
 #include "vkDefs.hpp"
 #include "vkPlatform.hpp"
-
 #include "vkRef.hpp"
 
 namespace vkt
@@ -36,11 +35,10 @@ namespace synchronization
 {
 namespace
 {
-
 using namespace vk;
 
-#define SHORT_FENCE_WAIT       1000ull
-#define LONG_FENCE_WAIT                ~0ull
+static const deUint64  SHORT_FENCE_WAIT        = 1000ull;
+static const deUint64  LONG_FENCE_WAIT         = ~0ull;
 
 tcu::TestStatus basicOneFenceCase (Context& context)
 {
@@ -114,8 +112,8 @@ tcu::TestStatus basicMultiFenceCase (Context& context)
                                                                                                                        DE_NULL,                                                         // const void*                 pNext;
                                                                                                                        0u,                                                                      // VkFenceCreateFlags  flags;
                                                                                                                };
-       const Move<VkFence>                             ptrFence[2]                     = {createFence(vk, device, &fenceInfo),createFence(vk, device, &fenceInfo)};
-       const VkFence                                   fence[2]                        = {*ptrFence[FISRT_FENCE],*ptrFence[SECOND_FENCE]};
+       const Move<VkFence>                             ptrFence[2]                     = { createFence(vk, device, &fenceInfo), createFence(vk, device, &fenceInfo) };
+       const VkFence                                   fence[2]                        = { *ptrFence[FISRT_FENCE], *ptrFence[SECOND_FENCE] };
        const VkCommandBufferBeginInfo  info                            =
                                                                                                                {
                                                                                                                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                          sType;
@@ -161,13 +159,35 @@ tcu::TestStatus basicMultiFenceCase (Context& context)
        return tcu::TestStatus::pass("Basic multi fence tests passed");
 }
 
+tcu::TestStatus emptySubmitCase (Context& context)
+{
+       const DeviceInterface&                  vk                                      = context.getDeviceInterface();
+       const VkDevice                                  device                          = context.getDevice();
+       const VkQueue                                   queue                           = context.getUniversalQueue();
+       const VkFenceCreateInfo                 fenceCreateInfo         =
+                                                                                                               {
+                                                                                                                       VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,            // VkStructureType       sType;
+                                                                                                                       DE_NULL,                                                                        // const void*           pNext;
+                                                                                                                       (VkFenceCreateFlags)0,                                          // VkFenceCreateFlags    flags;
+                                                                                                               };
+       const Unique<VkFence>                   fence                           (createFence(vk, device, &fenceCreateInfo));
+
+       VK_CHECK(vk.queueSubmit(queue, 0u, DE_NULL, *fence));
+
+       if (VK_SUCCESS != vk.waitForFences(device, 1u, &fence.get(), DE_TRUE, LONG_FENCE_WAIT))
+               return tcu::TestStatus::fail("vkWaitForFences should return VK_SUCCESS");
+
+       return tcu::TestStatus::pass("OK");
+}
+
 } // anonymous
 
 tcu::TestCaseGroup* createBasicFenceTests (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> basicFenceTests(new tcu::TestCaseGroup(testCtx, "fence", "Basic fence tests"));
-       addFunctionCase(basicFenceTests.get(), "one",   "Basic one fence tests",   basicOneFenceCase);
-       addFunctionCase(basicFenceTests.get(), "multi", "Basic multi fence tests", basicMultiFenceCase);
+       addFunctionCase(basicFenceTests.get(),   "one",                         "Basic one fence tests",                                                        basicOneFenceCase);
+       addFunctionCase(basicFenceTests.get(),   "multi",                       "Basic multi fence tests",                                                      basicMultiFenceCase);
+       addFunctionCase(basicFenceTests.get(),   "empty_submit",        "Signal a fence after an empty queue submission",       emptySubmitCase);
 
        return basicFenceTests.release();
 }
index 627b5f0..72a2fa3 100644 (file)
@@ -97819,6 +97819,7 @@ dEQP-VK.synchronization.smoke.semaphores
 dEQP-VK.synchronization.smoke.events
 dEQP-VK.synchronization.basic.fence.one
 dEQP-VK.synchronization.basic.fence.multi
+dEQP-VK.synchronization.basic.fence.empty_submit
 dEQP-VK.synchronization.basic.semaphore.one_queue
 dEQP-VK.synchronization.basic.semaphore.multi_queue
 dEQP-VK.synchronization.basic.event.host_set_reset