summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2017-04-14 12:00:57 -0700
committerJason Ekstrand <jason.ekstrand@intel.com>2017-04-14 12:29:46 -0700
commitcb7eae747be81b4572d3980c953fea01462dd6de (patch)
tree759a451d0974918ccc46cdcb9dc7d93891895340
parent3c3eb6175af13fb2efe2563cbc419d216b3291b9 (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.c48
-rw-r--r--src/framework/test/test.h4
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;