X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fvk.c;fp=src%2Fvk.c;h=82b1ccf751a228fbb109f680889176390f04038f;hb=8a6eea3132749f35860b2bc7c4434cde8955b3de;hp=ca03b35e7731c586065d98bdd12d8e47f9924605;hpb=296b4bf2b7c4fcc7d9c19381840c62e8b891934f;p=vktest3 diff --git a/src/vk.c b/src/vk.c index ca03b35..82b1ccf 100644 --- a/src/vk.c +++ b/src/vk.c @@ -65,9 +65,9 @@ static int initflags; static VkInstance vk; static VkPhysicalDevice vkpdev; -static int vkqfam_idx, vkqfam_maxq; +static VkQueueFamilyProperties *qfam; +static uint32_t num_qfam; static VkDevice vkdev; -static VkQueue vkq; static VkSurfaceKHR vksurf; static VkSurfaceCapabilitiesKHR vksurf_caps; static int vksurf_numfmt, vksurf_selfmt; @@ -176,6 +176,51 @@ int vk_reshape(int xsz, int ysz) return 0; } +int vk_find_qfamily(unsigned int flags) +{ + int i, famidx = -1; + VkBool32 can_pres; + + if(!qfam) return -1; /* not initialized I guess... */ + + for(i=0; i= qfam[fam].queueCount) { + fprintf(stderr, "vk_getq_fam: invalid index %d, family %d has %d queues\n", + n, fam, qfam[fam].queueCount); + return 0; + } + + vkGetDeviceQueue(vkdev, fam, n, &q); + return q; +} + +VkQueue vk_getq(unsigned int flags) +{ + return vk_getq_fam(vk_find_qfamily(flags), 0); +} int vk_create_rpass(void) { @@ -557,10 +602,9 @@ static int create_surface(void) int choose_phys_dev(void) { - uint32_t i, num_pdev, num_qfam, score, best_score, best_dev; + uint32_t i, num_pdev, score, best_score, best_dev; VkPhysicalDevice *pdev; VkPhysicalDeviceProperties pdevprop; - VkQueueFamilyProperties *qfam; VkBool32 can_pres; vkEnumeratePhysicalDevices(vk, &num_pdev, 0); @@ -591,21 +635,12 @@ int choose_phys_dev(void) } vkpdev = pdev[best_dev]; + if(qfam) free(qfam); + vkGetPhysicalDeviceQueueFamilyProperties(vkpdev, &num_qfam, 0); qfam = malloc_nf(num_qfam * sizeof *qfam); vkGetPhysicalDeviceQueueFamilyProperties(vkpdev, &num_qfam, qfam); - vkqfam_idx = -1; - for(i=0; i