From 7bdd92e8ab7535d700c420fd1dfc305506aa0120 Mon Sep 17 00:00:00 2001 From: Maciej Jesionowski Date: Tue, 27 Sep 2016 15:26:20 +0200 Subject: [PATCH] Add test: waitForFences with an empty queueSubmit 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 | 1 + .../vktSynchronizationBasicFenceTests.cpp | 36 +++++++++++++++++----- external/vulkancts/mustpass/1.0.2/vk-default.txt | 1 + 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 6232e3c..b357087 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -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 diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicFenceTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicFenceTests.cpp index fbde395..b19b6ed 100644 --- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicFenceTests.cpp +++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicFenceTests.cpp @@ -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 ptrFence[2] = {createFence(vk, device, &fenceInfo),createFence(vk, device, &fenceInfo)}; - const VkFence fence[2] = {*ptrFence[FISRT_FENCE],*ptrFence[SECOND_FENCE]}; + const Move 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 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 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(); } diff --git a/external/vulkancts/mustpass/1.0.2/vk-default.txt b/external/vulkancts/mustpass/1.0.2/vk-default.txt index 627b5f0..72a2fa3 100644 --- a/external/vulkancts/mustpass/1.0.2/vk-default.txt +++ b/external/vulkancts/mustpass/1.0.2/vk-default.txt @@ -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 -- 2.7.4