From: John Tsiombikas Date: Thu, 23 Dec 2021 06:03:00 +0000 (+0200) Subject: what a tedious API... X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=vkray;a=commitdiff_plain;h=147c5d68777e7b72ca73c4c75890af95e2eb37d9 what a tedious API... --- diff --git a/src/vk.c b/src/vk.c index 101eaa8..cfe2668 100644 --- a/src/vk.c +++ b/src/vk.c @@ -27,7 +27,7 @@ static Window win; static VkInstance vk; static VkPhysicalDevice vkpdev; -static int vkqfam_idx = -1; +static int vkqfam_idx, vkqfam_maxq; static VkDevice vkdev; static VkQueue vkq; static VkSurfaceKHR vksurf; @@ -95,6 +95,15 @@ static struct { {"VK_KHR_debug_report", 0} }; +static struct { + const char *name; + int required; +} known_devext_list[] = { + {"VK_KHR_swapchain", 1}, + {"VK_KHR_acceleration_structure", 0}, + {"VK_KHR_ray_tracing_pipeline", 0} +}; + static int create_instance(void) { int i, nlayers = 0, next = 0; @@ -165,8 +174,6 @@ static int create_instance(void) static int create_surface(void) { - int res; - /* VkXlibSurfaceCreateInfoKHR xinf = {0}; xinf.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; @@ -183,8 +190,8 @@ static int create_surface(void) xinf.connection = XGetXCBConnection(dpy); xinf.window = (xcb_window_t)win; - if((res = vkCreateXcbSurfaceKHR(vk, &xinf, 0, &vksurf)) != 0) { - fprintf(stderr, "failed to create XCB window surface (%d)\n", res); + if(vkCreateXcbSurfaceKHR(vk, &xinf, 0, &vksurf) != 0) { + fprintf(stderr, "failed to create XCB window surface\n"); return -1; } return 0; @@ -192,9 +199,10 @@ static int create_surface(void) int choose_phys_dev(void) { - uint32_t i, num_pdev, score, best_score, best_dev; + uint32_t i, num_pdev, num_qfam, score, best_score, best_dev; VkPhysicalDevice *pdev; VkPhysicalDeviceProperties pdevprop; + VkQueueFamilyProperties *qfam; vkEnumeratePhysicalDevices(vk, &num_pdev, 0); if(!num_pdev) { @@ -222,9 +230,23 @@ int choose_phys_dev(void) free(pdev); return -1; } + vkpdev = pdev[best_dev]; + + vkGetPhysicalDeviceQueueFamilyProperties(dev, &num_qfam, 0); + qfam = malloc_nf(num_qfam * sizeof *qfam); + vkGetPhysicalDeviceQueueFamilyProperties(dev, &num_qfam, qfam); - vkpdev = pdev[i]; + vkqfam_idx = -1; + for(i=0; i