=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vulkan-1/tests: Add a test for destroying a command pool.

Alexandre Julliard julliard at winehq.org
Thu Aug 30 16:34:42 CDT 2018


Module: wine
Branch: master
Commit: 29d49fb8a3ee8a72310c0b4d1f314a11dc39efc6
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=29d49fb8a3ee8a72310c0b4d1f314a11dc39efc6

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Thu Aug 30 12:22:33 2018 +0200

vulkan-1/tests: Add a test for destroying a command pool.

The Vulkan spec says:

  "When a pool is destroyed, all command buffers allocated from the pool
  are implicitly freed and become invalid. Command buffers allocated
  from a given pool do not need to be freed before destroying that
  command pool."

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/vulkan-1/tests/vulkan.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/dlls/vulkan-1/tests/vulkan.c b/dlls/vulkan-1/tests/vulkan.c
index 1d2f66f..20a2452 100644
--- a/dlls/vulkan-1/tests/vulkan.c
+++ b/dlls/vulkan-1/tests/vulkan.c
@@ -232,6 +232,45 @@ static void test_physical_device_groups(void)
     vkDestroyInstance(vk_instance, NULL);
 }
 
+static void test_destroy_command_pool(VkPhysicalDevice vk_physical_device)
+{
+    VkCommandBufferAllocateInfo allocate_info;
+    VkCommandPoolCreateInfo pool_info;
+    VkCommandBuffer vk_cmd_buffers[4];
+    uint32_t queue_family_index;
+    VkCommandPool vk_cmd_pool;
+    VkDevice vk_device;
+    VkResult vr;
+
+    if ((vr = create_device(vk_physical_device, 0, NULL, NULL, &vk_device)) < 0)
+    {
+        skip("Failed to create device, vr %d.\n", vr);
+        return;
+    }
+
+    find_queue_family(vk_physical_device, VK_QUEUE_GRAPHICS_BIT, &queue_family_index);
+
+    pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
+    pool_info.pNext = NULL;
+    pool_info.flags = 0;
+    pool_info.queueFamilyIndex = queue_family_index;
+    vr = vkCreateCommandPool(vk_device, &pool_info, NULL, &vk_cmd_pool);
+    ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
+
+    allocate_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
+    allocate_info.pNext = NULL;
+    allocate_info.commandPool = vk_cmd_pool;
+    allocate_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
+    allocate_info.commandBufferCount = ARRAY_SIZE(vk_cmd_buffers);
+    vr = vkAllocateCommandBuffers(vk_device, &allocate_info, vk_cmd_buffers);
+    ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
+
+    vkDestroyCommandPool(vk_device, vk_cmd_pool, NULL);
+    vkDestroyCommandPool(vk_device, VK_NULL_HANDLE, NULL);
+
+    vkDestroyDevice(vk_device, NULL);
+}
+
 static void for_each_device(void (*test_func)(VkPhysicalDevice))
 {
     VkPhysicalDevice *vk_physical_devices;
@@ -272,4 +311,5 @@ START_TEST(vulkan)
     for_each_device(enumerate_physical_device);
     for_each_device(enumerate_device_queues);
     test_physical_device_groups();
+    for_each_device(test_destroy_command_pool);
 }




More information about the wine-cvs mailing list