From 29d49fb8a3ee8a72310c0b4d1f314a11dc39efc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Thu, 30 Aug 2018 12:22:33 +0200 Subject: [PATCH] vulkan-1/tests: Add a test for destroying a command pool. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Alexandre Julliard --- 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 1d2f66f5f90..20a245238b0 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); }