From 8a724d8c8f0fc69457d10cd32dca7f0478c66ce9 Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Mon, 7 Sep 2015 15:16:39 -0600 Subject: demos: Fix demos to correctly query physicalDevice count --- demos/cube.c | 13 ++++++++++--- demos/tri.c | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/demos/cube.c b/demos/cube.c index 10cd1239..272ef0ae 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -2207,6 +2207,7 @@ static void demo_init_vk(struct demo *demo) VkResult err; char *extension_names[64]; VkExtensionProperties *instance_extensions; + VkPhysicalDevice *physical_devices; VkLayerProperties *instance_layers; VkLayerProperties *device_layers; uint32_t instance_extension_count = 0; @@ -2328,9 +2329,15 @@ static void demo_init_vk(struct demo *demo) free(instance_layers); free(instance_extensions); - gpu_count = 1; - err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, &demo->gpu); - assert(!err && gpu_count == 1); + /* Make initial call to query gpu_count, then second call for gpu info*/ + err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, NULL); + assert(!err && gpu_count > 0); + physical_devices = malloc(sizeof(VkPhysicalDevice) * gpu_count); + err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, physical_devices); + assert(!err); + /* For cube demo we just grab the first physical device */ + demo->gpu = physical_devices[0]; + free(physical_devices); /* Look for validation layers */ validation_found = 0; diff --git a/demos/tri.c b/demos/tri.c index 95066338..0f3bcc38 100644 --- a/demos/tri.c +++ b/demos/tri.c @@ -1727,6 +1727,7 @@ static void demo_init_vk(struct demo *demo) char *extension_names[64]; char *layer_names[64]; VkExtensionProperties *instance_extensions; + VkPhysicalDevice *physical_devices; VkLayerProperties *instance_layers; VkLayerProperties *device_layers; uint32_t instance_extension_count = 0; @@ -1842,9 +1843,15 @@ static void demo_init_vk(struct demo *demo) free(instance_layers); free(instance_extensions); - gpu_count = 1; - err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, &demo->gpu); - assert(!err && gpu_count == 1); + /* Make initial call to query gpu_count, then second call for gpu info*/ + err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, NULL); + assert(!err && gpu_count > 0); + physical_devices = malloc(sizeof(VkPhysicalDevice) * gpu_count); + err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, physical_devices); + assert(!err); + /* For tri demo we just grab the first physical device */ + demo->gpu = physical_devices[0]; + free(physical_devices); /* Look for validation layers */ validation_found = 0; -- cgit v1.2.3