diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2017-04-14 12:00:57 -0700 |
---|---|---|
committer | Jason Ekstrand <jason.ekstrand@intel.com> | 2017-04-14 12:29:46 -0700 |
commit | cb7eae747be81b4572d3980c953fea01462dd6de (patch) | |
tree | 759a451d0974918ccc46cdcb9dc7d93891895340 | |
parent | 3c3eb6175af13fb2efe2563cbc419d216b3291b9 (diff) |
framework: Record and enable all extensioins
Vulkan doesn't allow you to use features you haven't enabled. The easy
solution is to just enable everything.
-rw-r--r-- | src/framework/test/t_phase_setup.c | 48 | ||||
-rw-r--r-- | src/framework/test/test.h | 4 |
2 files changed, 51 insertions, 1 deletions
diff --git a/src/framework/test/t_phase_setup.c b/src/framework/test/t_phase_setup.c index b083b01..0ee4c0f 100644 --- a/src/framework/test/t_phase_setup.c +++ b/src/framework/test/t_phase_setup.c @@ -358,21 +358,64 @@ void t_setup_vulkan(void) { GET_CURRENT_TEST(t); + VkResult res; + const char **ext_names; - VkResult res = vkCreateInstance( + res = vkEnumerateInstanceExtensionProperties(NULL, + &t->vk.instance_extension_count, NULL); + t_assert(res == VK_SUCCESS); + + t->vk.instance_extension_props = + malloc(t->vk.instance_extension_count * sizeof(*t->vk.instance_extension_props)); + t_assert(t->vk.instance_extension_props); + t_cleanup_push_free(t->vk.instance_extension_props); + + res = vkEnumerateInstanceExtensionProperties(NULL, + &t->vk.instance_extension_count, t->vk.instance_extension_props); + t_assert(res == VK_SUCCESS); + + ext_names = malloc(t->vk.instance_extension_count * sizeof(*ext_names)); + t_assert(ext_names); + + for (uint32_t i = 0; i < t->vk.instance_extension_count; i++) + ext_names[i] = t->vk.instance_extension_props[i].extensionName; + + res = vkCreateInstance( &(VkInstanceCreateInfo) { .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, .pApplicationInfo = &(VkApplicationInfo) { .pApplicationName = "crucible", .apiVersion = VK_MAKE_VERSION(1, 0, 0), }, + .enabledExtensionCount = t->vk.instance_extension_count, + .ppEnabledExtensionNames = ext_names, }, &test_alloc_cb, &t->vk.instance); + free(ext_names); t_assert(res == VK_SUCCESS); t_cleanup_push_vk_instance(t->vk.instance, &test_alloc_cb); t_setup_phys_dev(); t_setup_phys_dev_mem_props(); + res = vkEnumerateDeviceExtensionProperties(t->vk.physical_dev, NULL, + &t->vk.device_extension_count, NULL); + t_assert(res == VK_SUCCESS); + + t->vk.device_extension_props = + malloc(t->vk.device_extension_count * sizeof(*t->vk.device_extension_props)); + t_assert(t->vk.device_extension_props); + t_cleanup_push_free(t->vk.device_extension_props); + + res = vkEnumerateDeviceExtensionProperties(t->vk.physical_dev, NULL, + &t->vk.device_extension_count, t->vk.device_extension_props); + t_assert(res == VK_SUCCESS); + + ext_names = malloc(t->vk.device_extension_count * sizeof(*ext_names)); + t_assert(ext_names); + + for (uint32_t i = 0; i < t->vk.device_extension_count; i++) + ext_names[i] = t->vk.device_extension_props[i].extensionName; + res = vkCreateDevice(t->vk.physical_dev, &(VkDeviceCreateInfo) { .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, @@ -383,7 +426,10 @@ t_setup_vulkan(void) .queueCount = 1, .pQueuePriorities = (float[]) {1.0f}, }, + .enabledExtensionCount = t->vk.device_extension_count, + .ppEnabledExtensionNames = ext_names, }, NULL, &t->vk.device); + free(ext_names); t_assert(res == VK_SUCCESS); t_cleanup_push_vk_device(t->vk.device, NULL); diff --git a/src/framework/test/test.h b/src/framework/test/test.h index a180632..cb874c0 100644 --- a/src/framework/test/test.h +++ b/src/framework/test/test.h @@ -139,10 +139,14 @@ struct test { /// Vulkan data struct { VkInstance instance; + uint32_t instance_extension_count; + VkExtensionProperties *instance_extension_props; VkPhysicalDevice physical_dev; VkPhysicalDeviceProperties physical_dev_props; VkPhysicalDeviceMemoryProperties physical_dev_mem_props; VkDevice device; + uint32_t device_extension_count; + VkExtensionProperties *device_extension_props; VkQueue queue; VkDescriptorPool descriptor_pool; VkPipelineCache pipeline_cache; |