VK_KHR_incremental_present: Trigger the fence off vkQueueSubmit
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 6 Oct 2017 23:10:26 +0000 (16:10 -0700)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 10 Oct 2017 07:11:07 +0000 (03:11 -0400)
Previously, the tests were using AcquireNextImage to trigger the fence
and using it to guard the vkFreeCommandBuffers call.  However, the
acquire fence tells you when the PE is done with an image and when you
can start rendering to it.  This meant that the test was waiting for the
start of the previous frame's rendering not the end before deleting the
previous frame's command buffer.  This meant that the previous frame's
rendering could still be active on the GPU when the command buffer was
freed.  By triggering the fence off of the vkQueueSubmit, we wait for
the end of the previous frame's rendering before freeing its command
buffer.

VK-GL-CTS issue: 756

Component: Vulkan

Affects:
dEQP-VK.wsi.*.incremental_present.*

Change-Id: I87b25eb2a25e4ae48c8c527d5d63c45d89a31a30
(cherry picked from commit db916576a76a17c02c14390fc5d5b3db1488d1d2)

external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp

index b72a910..1457146 100644 (file)
@@ -1190,7 +1190,7 @@ void IncrementalPresentTestInstance::render (void)
        deUint32                        imageIndex;
 
        // Acquire next image
-       VK_CHECK(m_vkd.acquireNextImageKHR(*m_device, *m_swapchain, foreverNs, currentAcquireSemaphore, fence, &imageIndex));
+       VK_CHECK(m_vkd.acquireNextImageKHR(*m_device, *m_swapchain, foreverNs, currentAcquireSemaphore, (vk::VkFence)0, &imageIndex));
 
        // Create command buffer
        {
@@ -1216,7 +1216,7 @@ void IncrementalPresentTestInstance::render (void)
                        &currentRenderSemaphore
                };
 
-               VK_CHECK(m_vkd.queueSubmit(m_queue, 1u, &submitInfo, (vk::VkFence)0));
+               VK_CHECK(m_vkd.queueSubmit(m_queue, 1u, &submitInfo, fence));
        }
 
        // Present frame