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@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
079d2ec40d
commit
29d49fb8a3
|
@ -232,6 +232,45 @@ static void test_physical_device_groups(void)
|
||||||
vkDestroyInstance(vk_instance, NULL);
|
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))
|
static void for_each_device(void (*test_func)(VkPhysicalDevice))
|
||||||
{
|
{
|
||||||
VkPhysicalDevice *vk_physical_devices;
|
VkPhysicalDevice *vk_physical_devices;
|
||||||
|
@ -272,4 +311,5 @@ START_TEST(vulkan)
|
||||||
for_each_device(enumerate_physical_device);
|
for_each_device(enumerate_physical_device);
|
||||||
for_each_device(enumerate_device_queues);
|
for_each_device(enumerate_device_queues);
|
||||||
test_physical_device_groups();
|
test_physical_device_groups();
|
||||||
|
for_each_device(test_destroy_command_pool);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue