dEQP-VK.synchronization2.cross_instance.dedicated.write_indirect_buffer_dispatch_read_indirect_buffer_dispatch.indirect_buffer_timeline_semaphore_zircon_handle
dEQP-VK.synchronization2.cross_instance.dedicated.write_update_index_buffer_read_index_input.buffer_20_binary_semaphore_zircon_handle
dEQP-VK.synchronization2.cross_instance.dedicated.write_update_index_buffer_read_index_input.buffer_20_timeline_semaphore_zircon_handle
+dEQP-VK.synchronization2.basic.event.none_set_reset
+dEQP-VK.synchronization2.basic.binary_semaphore.none_wait_submit
dEQP-VK.synchronization2.basic.event.single_submit_multi_command_buffer
dEQP-VK.synchronization2.basic.event.multi_submit_multi_command_buffer
dEQP-VK.synchronization2.basic.event.multi_secondary_command_buffer
+dEQP-VK.synchronization2.basic.event.none_set_reset
dEQP-VK.synchronization2.basic.event.single_submit_multi_command_buffer_device_only
dEQP-VK.synchronization2.basic.event.multi_submit_multi_command_buffer_device_only
dEQP-VK.synchronization2.basic.event.multi_secondary_command_buffer_device_only
dEQP-VK.synchronization2.basic.binary_semaphore.multi_queue
dEQP-VK.synchronization2.basic.binary_semaphore.one_queue_typed
dEQP-VK.synchronization2.basic.binary_semaphore.multi_queue_typed
+dEQP-VK.synchronization2.basic.binary_semaphore.none_wait_submit
dEQP-VK.synchronization2.basic.binary_semaphore.chain
dEQP-VK.synchronization2.basic.timeline_semaphore.one_queue
dEQP-VK.synchronization2.basic.timeline_semaphore.multi_queue
dEQP-VKSC.synchronization2.basic.event.single_submit_multi_command_buffer
dEQP-VKSC.synchronization2.basic.event.multi_submit_multi_command_buffer
dEQP-VKSC.synchronization2.basic.event.multi_secondary_command_buffer
+dEQP-VKSC.synchronization2.basic.event.none_set_reset
dEQP-VKSC.synchronization2.basic.event.single_submit_multi_command_buffer_device_only
dEQP-VKSC.synchronization2.basic.event.multi_submit_multi_command_buffer_device_only
dEQP-VKSC.synchronization2.basic.event.multi_secondary_command_buffer_device_only
dEQP-VKSC.synchronization2.basic.binary_semaphore.multi_queue
dEQP-VKSC.synchronization2.basic.binary_semaphore.one_queue_typed
dEQP-VKSC.synchronization2.basic.binary_semaphore.multi_queue_typed
+dEQP-VKSC.synchronization2.basic.binary_semaphore.none_wait_submit
dEQP-VKSC.synchronization2.basic.binary_semaphore.chain
dEQP-VKSC.synchronization2.basic.timeline_semaphore.one_queue
dEQP-VKSC.synchronization2.basic.timeline_semaphore.multi_queue
return tcu::TestStatus::pass("Device set and reset event tests pass");
}
+tcu::TestStatus eventSetResetNoneStage (Context& context, TestConfig)
+{
+ const DeviceInterface& vk = context.getDeviceInterface();
+ const VkDevice device = context.getDevice();
+ const VkQueue queue = context.getUniversalQueue();
+ const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex();
+ const Unique<VkCommandPool> cmdPool (makeCommandPool(vk, device, queueFamilyIndex));
+ const Unique<VkCommandBuffer> cmdBuffer (makeCommandBuffer(vk, device, *cmdPool));
+ const Unique<VkEvent> event (createEvent(vk, device));
+ const VkCommandBufferSubmitInfoKHR commandBufferSubmitInfo = makeCommonCommandBufferSubmitInfo(cmdBuffer.get());
+ const VkMemoryBarrier2KHR memoryBarrier2 =
+ {
+ VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, // VkStructureType sType
+ DE_NULL, // const void* pNext
+ VK_PIPELINE_STAGE_NONE_KHR, // VkPipelineStageFlags2KHR srcStageMask
+ VK_ACCESS_2_NONE_KHR, // VkAccessFlags2KHR srcAccessMask
+ VK_PIPELINE_STAGE_2_HOST_BIT_KHR, // VkPipelineStageFlags2KHR dstStageMask
+ VK_ACCESS_2_HOST_READ_BIT_KHR // VkAccessFlags2KHR dstAccessMask
+ };
+ const VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(&memoryBarrier2, DE_NULL, DE_NULL, DE_TRUE);
+
+ SynchronizationWrapperPtr synchronizationWrapper = getSynchronizationWrapper(SynchronizationType::SYNCHRONIZATION2, vk, DE_FALSE);
+
+ beginCommandBuffer(vk, *cmdBuffer, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
+ synchronizationWrapper->cmdSetEvent(*cmdBuffer, *event, &dependencyInfo);
+ endCommandBuffer(vk, *cmdBuffer);
+
+ synchronizationWrapper->addSubmitInfo(
+ 0u, // deUint32 waitSemaphoreInfoCount
+ DE_NULL, // const VkSemaphoreSubmitInfoKHR* pWaitSemaphoreInfos
+ 1u, // deUint32 commandBufferInfoCount
+ &commandBufferSubmitInfo, // const VkCommandBufferSubmitInfoKHR* pCommandBufferInfos
+ 0u, // deUint32 signalSemaphoreInfoCount
+ DE_NULL // const VkSemaphoreSubmitInfoKHR* pSignalSemaphoreInfos
+ );
+
+ VK_CHECK(synchronizationWrapper->queueSubmit(queue, DE_NULL));
+ VK_CHECK(vk.queueWaitIdle(queue));
+ context.resetCommandPoolForVKSC(device, *cmdPool);
+
+ if (VK_EVENT_SET != vk.getEventStatus(device, *event))
+ return tcu::TestStatus::fail("Event should be in signaled state after set");
+ {
+ // SynchronizationWrapperPtr synchronizationWrapper = getSynchronizationWrapper(SynchronizationType::SYNCHRONIZATION2, vk, DE_FALSE);
+ beginCommandBuffer(vk, *cmdBuffer, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
+ synchronizationWrapper->cmdResetEvent(*cmdBuffer, *event, VK_PIPELINE_STAGE_NONE_KHR);
+ endCommandBuffer(vk, *cmdBuffer);
+
+ synchronizationWrapper->addSubmitInfo(
+ 0u, // deUint32 waitSemaphoreInfoCount
+ DE_NULL, // const VkSemaphoreSubmitInfoKHR* pWaitSemaphoreInfos
+ 1u, // deUint32 commandBufferInfoCount
+ &commandBufferSubmitInfo, // const VkCommandBufferSubmitInfoKHR* pCommandBufferInfos
+ 0u, // deUint32 signalSemaphoreInfoCount
+ DE_NULL // const VkSemaphoreSubmitInfoKHR* pSignalSemaphoreInfos
+ );
+
+ VK_CHECK(synchronizationWrapper->queueSubmit(queue, DE_NULL));
+ }
+
+ VK_CHECK(vk.queueWaitIdle(queue));
+
+ if (VK_EVENT_RESET != vk.getEventStatus(device, *event))
+ return tcu::TestStatus::fail("Event should be in unsignaled state after reset");
+
+ return tcu::TestStatus::pass("Pass");
+}
+
tcu::TestStatus singleSubmissionCase (Context& context, TestConfig config)
{
enum {SET=0, WAIT, COUNT};
addFunctionCase(basicTests.get(), "single_submit_multi_command_buffer", "Wait and set event single submission on device", checkSupport, singleSubmissionCase, config);
addFunctionCase(basicTests.get(), "multi_submit_multi_command_buffer", "Wait and set event mutli submission on device", checkSupport, multiSubmissionCase, config);
addFunctionCase(basicTests.get(), "multi_secondary_command_buffer", "Event used on secondary command buffer ", checkSecondaryBufferSupport, secondaryCommandBufferCase, config);
+ addFunctionCase(basicTests.get(), "none_set_reset", "Event set and reset using the none pipeline stage ", checkSupport, eventSetResetNoneStage, config);
config.flags = VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR;
addFunctionCase(basicTests.get(), "single_submit_multi_command_buffer_device_only", "Wait and set GPU-only event single submission", checkSupport, singleSubmissionCase, config);
return tcu::TestStatus::pass("Basic semaphore tests with one queue passed");
}
+tcu::TestStatus noneWaitSubmitTest (Context& context, const TestConfig config)
+{
+ const DeviceInterface& vk = context.getDeviceInterface();
+ const VkDevice device = context.getDevice();
+ const VkQueue queue = context.getUniversalQueue();
+ const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex();
+
+ const Unique<VkSemaphore> semaphore (createTestSemaphore(context, vk, device, config));
+ const Unique<VkCommandPool> cmdPool (createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex));
+
+ const Unique<VkCommandBuffer> firstbuffer (makeCommandBuffer(vk, device, *cmdPool));
+ const Unique<VkCommandBuffer> secondBuffer (makeCommandBuffer(vk, device, *cmdPool));
+
+ const VkCommandBufferBeginInfo info {
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, // VkCommandBufferUsageFlags flags;
+ DE_NULL, // const VkCommandBufferInheritanceInfo* pInheritanceInfo;
+ };
+ const Unique<VkFence> fence1 (createFence(vk, device));
+ const Unique<VkFence> fence2 (createFence(vk, device));
+ const Unique<VkEvent> event (createEvent(vk, device));
+
+ VK_CHECK(vk.beginCommandBuffer(*firstbuffer, &info));
+ endCommandBuffer(vk, *firstbuffer);
+
+ const VkSubmitInfo firstSubmitInfo {
+ VK_STRUCTURE_TYPE_SUBMIT_INFO, //VkStructureType sType
+ DE_NULL, //const void* pNext
+ 0u, //uint32_t waitSemaphoreCount
+ DE_NULL, //const VkSemaphore* pWaitSemaphores
+ DE_NULL, //const VkPipelineStageFlags* pWaitDstStageMask
+ 1u, //uint32_t commandBufferCount
+ &firstbuffer.get(), //const VkCommandBuffer* pCommandBuffers
+ 1, //uint32_t signalSemaphoreCount
+ &semaphore.get() //const VkSemaphore* pSignalSemaphores
+ };
+
+ //check if waiting on an event in the none stage works as expected
+ VkPipelineStageFlags waitStages[] = {VK_PIPELINE_STAGE_NONE_KHR};
+
+ const VkSubmitInfo secondSubmitInfo {
+ VK_STRUCTURE_TYPE_SUBMIT_INFO, //VkStructureType sType
+ DE_NULL, //const void* pNext
+ 1u, //uint32_t waitSemaphoreCount
+ &semaphore.get(), //const VkSemaphore* pWaitSemaphores
+ waitStages, //const VkPipelineStageFlags* pWaitDstStageMask
+ 1u, //uint32_t commandBufferCount
+ &secondBuffer.get(), //const VkCommandBuffer* pCommandBuffers
+ 0, //uint32_t signalSemaphoreCount
+ DE_NULL //const VkSemaphore* pSignalSemaphores
+ };
+
+ VK_CHECK(vk.beginCommandBuffer(*secondBuffer, &info));
+ vk.cmdSetEvent(*secondBuffer, event.get(), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
+ endCommandBuffer(vk, *secondBuffer);
+
+ VK_CHECK(vk.queueSubmit(queue, 1, &firstSubmitInfo, fence1.get()));
+ VK_CHECK(vk.queueSubmit(queue, 1, &secondSubmitInfo, fence2.get()));
+ VK_CHECK(vk.queueWaitIdle(queue));
+
+ if (VK_SUCCESS != vk.waitForFences(device, 1u, &fence1.get(), DE_TRUE, FENCE_WAIT))
+ return tcu::TestStatus::fail("None stage test failed, failed to wait for fence");
+
+ if (VK_SUCCESS != vk.waitForFences(device, 1u, &fence2.get(), DE_TRUE, FENCE_WAIT))
+ return tcu::TestStatus::fail("None stage test failed, failed to wait for the second fence");
+
+ if (vk.getEventStatus(device, event.get()) != VK_EVENT_SET)
+ return tcu::TestStatus::fail("None stage test failed, event isn't set");
+
+ return tcu::TestStatus::pass("Pass");
+}
+
tcu::TestStatus basicChainCase(Context & context, TestConfig config)
{
VkResult err = VK_SUCCESS;
addFunctionCase(basicTests.get(), "multi_queue" + createName, "Basic binary semaphore tests with multi queue", checkCommandBufferSimultaneousUseSupport, basicMultiQueueCase, config);
}
+ if (type == SynchronizationType::SYNCHRONIZATION2)
+ addFunctionCase(basicTests.get(), "none_wait_submit", "Test waiting on the none pipeline stage", checkCommandBufferSimultaneousUseSupport, noneWaitSubmitTest, config);
+
addFunctionCase(basicTests.get(), "chain", "Binary semaphore chain test", checkSupport, basicChainCase, config);
return basicTests.release();
dEQP-VK.synchronization2.basic.event.single_submit_multi_command_buffer
dEQP-VK.synchronization2.basic.event.multi_submit_multi_command_buffer
dEQP-VK.synchronization2.basic.event.multi_secondary_command_buffer
+dEQP-VK.synchronization2.basic.event.none_set_reset
dEQP-VK.synchronization2.basic.event.single_submit_multi_command_buffer_device_only
dEQP-VK.synchronization2.basic.event.multi_submit_multi_command_buffer_device_only
dEQP-VK.synchronization2.basic.event.multi_secondary_command_buffer_device_only
dEQP-VK.synchronization2.basic.binary_semaphore.multi_queue
dEQP-VK.synchronization2.basic.binary_semaphore.one_queue_typed
dEQP-VK.synchronization2.basic.binary_semaphore.multi_queue_typed
+dEQP-VK.synchronization2.basic.binary_semaphore.none_wait_submit
dEQP-VK.synchronization2.basic.binary_semaphore.chain
dEQP-VK.synchronization2.basic.timeline_semaphore.one_queue
dEQP-VK.synchronization2.basic.timeline_semaphore.multi_queue
dEQP-VKSC.synchronization2.basic.event.single_submit_multi_command_buffer
dEQP-VKSC.synchronization2.basic.event.multi_submit_multi_command_buffer
dEQP-VKSC.synchronization2.basic.event.multi_secondary_command_buffer
+dEQP-VKSC.synchronization2.basic.event.none_set_reset
dEQP-VKSC.synchronization2.basic.event.single_submit_multi_command_buffer_device_only
dEQP-VKSC.synchronization2.basic.event.multi_submit_multi_command_buffer_device_only
dEQP-VKSC.synchronization2.basic.event.multi_secondary_command_buffer_device_only
dEQP-VKSC.synchronization2.basic.binary_semaphore.multi_queue
dEQP-VKSC.synchronization2.basic.binary_semaphore.one_queue_typed
dEQP-VKSC.synchronization2.basic.binary_semaphore.multi_queue_typed
+dEQP-VKSC.synchronization2.basic.binary_semaphore.none_wait_submit
dEQP-VKSC.synchronization2.basic.binary_semaphore.chain
dEQP-VKSC.synchronization2.basic.timeline_semaphore.one_queue
dEQP-VKSC.synchronization2.basic.timeline_semaphore.multi_queue