Fix the BindSparseMemory path to wait for a fence before destroying the buffer
authorJeannot Breton <jbreton@nvidia.com>
Fri, 22 Jan 2016 18:22:11 +0000 (12:22 -0600)
committerJeannot Breton <jbreton@nvidia.com>
Fri, 22 Jan 2016 20:17:10 +0000 (14:17 -0600)
external/vulkancts/modules/vulkan/api/vktApiBufferTests.cpp

index 55a2745..5cbae44 100644 (file)
@@ -200,8 +200,20 @@ private:
                                DE_NULL,                                                                // const VkSemaphore*                                           pSignalSemaphores;
                        };
 
-                       if (vk.queueBindSparse(queue, 1, &bindSparseInfo, DE_NULL) != VK_SUCCESS)
+                       const VkFenceCreateInfo fenceParams =
+                       {
+                               VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,    // VkStructureType              sType;
+                               DE_NULL,                                                                // const void*                  pNext;
+                               0u                                                                              // VkFenceCreateFlags   flags;
+                       };
+
+                       const vk::Unique<vk::VkFence> fence = vk::createFence(vk, vkDevice, &fenceParams);
+
+                       VK_CHECK(vk.resetFences(vkDevice, 1, &fence.get()));
+                       if (vk.queueBindSparse(queue, 1, &bindSparseInfo, *fence) != VK_SUCCESS)
                                return tcu::TestStatus::fail("Bind sparse buffer memory failed! (requested memory size: " + de::toString(size) + ")");
+
+                       VK_CHECK(vk.waitForFences(vkDevice, 1, &fence.get(), VK_TRUE, ~(0ull) /* infinity */));
                } else
                        if (vk.bindBufferMemory(vkDevice, *testBuffer, *memory, 0) != VK_SUCCESS)
                                return tcu::TestStatus::fail("Bind buffer memory failed! (requested memory size: " + de::toString(size) + ")");