#include #include #include int main() { printf("starting the portability test\n"); VkInstanceCreateInfo inst_info = {}; inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; VkInstance instance; VkResult res; res = vkCreateInstance(&inst_info, NULL, &instance); if (res == VK_ERROR_INCOMPATIBLE_DRIVER) { printf("cannot find a compatible Vulkan ICD\n"); return -1; } else if (res) { printf("unknown error\n"); return -1; } uint32_t adapter_count = 1; VkPhysicalDevice physical_devices[1] = {}; res = vkEnumeratePhysicalDevices(instance, &adapter_count, physical_devices); printf("\tvkEnumeratePhysicalDevices: res=%d count=%d\n", res, adapter_count); assert(!res && adapter_count); VkQueueFamilyProperties queue_family_properties[5]; uint32_t queue_family_count = sizeof(queue_family_properties) / sizeof(VkQueueFamilyProperties); vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[0], &queue_family_count, queue_family_properties); printf("\tvkGetPhysicalDeviceQueueFamilyProperties: count=%d\n", queue_family_count); assert(queue_family_count); int queue_family_index = -1; for (unsigned int i = 0; i < queue_family_count; i++) { if (queue_family_properties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) { queue_family_index = i; break; } } printf("\tusing queue family index %d\n", queue_family_index); assert(queue_family_index >= 0); VkDeviceQueueCreateInfo queue_info = {}; float queue_priorities[1] = {0.0}; queue_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; queue_info.queueCount = 1; queue_info.pQueuePriorities = queue_priorities; VkDeviceCreateInfo device_info = {}; device_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; device_info.queueCreateInfoCount = 1; device_info.pQueueCreateInfos = &queue_info; VkDevice device = 0; res = vkCreateDevice(physical_devices[0], &device_info, NULL, &device); printf("\tvkCreateDevice: res=%d\n", res); assert(!res); //TODO vkDestroyDevice(device, NULL); vkDestroyInstance(instance, NULL); printf("done.\n"); return 0; }