From ae1128a3ebae2356a6d00aaa1b8beac7ac99f91a Mon Sep 17 00:00:00 2001 From: Charles Giessen Date: Fri, 15 Dec 2023 13:57:06 -0700 Subject: cube: Use volk for all function pointers Since volk will load all extension function pointers, we don't need to load functions manually and that code can be removed. --- cube/cube.c | 104 +++++++++++------------------------------------------------- 1 file changed, 19 insertions(+), 85 deletions(-) (limited to 'cube') diff --git a/cube/cube.c b/cube/cube.c index 18e390c0..d54dfe94 100644 --- a/cube/cube.c +++ b/cube/cube.c @@ -133,25 +133,6 @@ void DbgMsg(char *fmt, ...) { } #endif -#define GET_INSTANCE_PROC_ADDR(inst, entrypoint) \ - { \ - demo->fp##entrypoint = (PFN_vk##entrypoint)vkGetInstanceProcAddr(inst, "vk" #entrypoint); \ - if (demo->fp##entrypoint == NULL) { \ - ERR_EXIT("vkGetInstanceProcAddr failed to find vk" #entrypoint, "vkGetInstanceProcAddr Failure"); \ - } \ - } - -static PFN_vkGetDeviceProcAddr g_gdpa = NULL; - -#define GET_DEVICE_PROC_ADDR(dev, entrypoint) \ - { \ - if (!g_gdpa) g_gdpa = (PFN_vkGetDeviceProcAddr)vkGetInstanceProcAddr(demo->inst, "vkGetDeviceProcAddr"); \ - demo->fp##entrypoint = (PFN_vk##entrypoint)g_gdpa(dev, "vk" #entrypoint); \ - if (demo->fp##entrypoint == NULL) { \ - ERR_EXIT("vkGetDeviceProcAddr failed to find vk" #entrypoint, "vkGetDeviceProcAddr Failure"); \ - } \ - } - /* * structure to track all objects related to a texture. */ @@ -407,17 +388,6 @@ struct demo { VkFormat format; VkColorSpaceKHR color_space; - PFN_vkGetPhysicalDeviceSurfaceSupportKHR fpGetPhysicalDeviceSurfaceSupportKHR; - PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR fpGetPhysicalDeviceSurfaceCapabilitiesKHR; - PFN_vkGetPhysicalDeviceSurfaceFormatsKHR fpGetPhysicalDeviceSurfaceFormatsKHR; - PFN_vkGetPhysicalDeviceSurfacePresentModesKHR fpGetPhysicalDeviceSurfacePresentModesKHR; - PFN_vkCreateSwapchainKHR fpCreateSwapchainKHR; - PFN_vkDestroySwapchainKHR fpDestroySwapchainKHR; - PFN_vkGetSwapchainImagesKHR fpGetSwapchainImagesKHR; - PFN_vkAcquireNextImageKHR fpAcquireNextImageKHR; - PFN_vkQueuePresentKHR fpQueuePresentKHR; - PFN_vkGetRefreshCycleDurationGOOGLE fpGetRefreshCycleDurationGOOGLE; - PFN_vkGetPastPresentationTimingGOOGLE fpGetPastPresentationTimingGOOGLE; uint32_t swapchainImageCount; VkSwapchainKHR swapchain; SwapchainImageResources *swapchain_image_resources; @@ -958,12 +928,12 @@ void DemoUpdateTargetIPD(struct demo *demo) { VkPastPresentationTimingGOOGLE *past = NULL; uint32_t count = 0; - err = demo->fpGetPastPresentationTimingGOOGLE(demo->device, demo->swapchain, &count, NULL); + err = vkGetPastPresentationTimingGOOGLE(demo->device, demo->swapchain, &count, NULL); assert(!err); if (count) { past = (VkPastPresentationTimingGOOGLE *)malloc(sizeof(VkPastPresentationTimingGOOGLE) * count); assert(past); - err = demo->fpGetPastPresentationTimingGOOGLE(demo->device, demo->swapchain, &count, past); + err = vkGetPastPresentationTimingGOOGLE(demo->device, demo->swapchain, &count, past); assert(!err); bool early = false; @@ -1076,9 +1046,8 @@ static void demo_draw(struct demo *demo) { do { // Get the index of the next available swapchain image: - err = - demo->fpAcquireNextImageKHR(demo->device, demo->swapchain, UINT64_MAX, - demo->image_acquired_semaphores[demo->frame_index], VK_NULL_HANDLE, &demo->current_buffer); + err = vkAcquireNextImageKHR(demo->device, demo->swapchain, UINT64_MAX, demo->image_acquired_semaphores[demo->frame_index], + VK_NULL_HANDLE, &demo->current_buffer); if (err == VK_ERROR_OUT_OF_DATE_KHR) { // demo->swapchain is out of date (e.g. the window was resized) and @@ -1223,7 +1192,7 @@ static void demo_draw(struct demo *demo) { } } - err = demo->fpQueuePresentKHR(demo->present_queue, &present); + err = vkQueuePresentKHR(demo->present_queue, &present); demo->frame_index += 1; demo->frame_index %= FRAME_LAG; @@ -1234,7 +1203,7 @@ static void demo_draw(struct demo *demo) { } else if (err == VK_SUBOPTIMAL_KHR) { // SUBOPTIMAL could be due to a resize VkSurfaceCapabilitiesKHR surfCapabilities; - err = demo->fpGetPhysicalDeviceSurfaceCapabilitiesKHR(demo->gpu, demo->surface, &surfCapabilities); + err = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(demo->gpu, demo->surface, &surfCapabilities); assert(!err); if (surfCapabilities.currentExtent.width != (uint32_t)demo->width || surfCapabilities.currentExtent.height != (uint32_t)demo->height) { @@ -1255,15 +1224,15 @@ static void demo_prepare_buffers(struct demo *demo) { // Check the surface capabilities and formats VkSurfaceCapabilitiesKHR surfCapabilities; - err = demo->fpGetPhysicalDeviceSurfaceCapabilitiesKHR(demo->gpu, demo->surface, &surfCapabilities); + err = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(demo->gpu, demo->surface, &surfCapabilities); assert(!err); uint32_t presentModeCount; - err = demo->fpGetPhysicalDeviceSurfacePresentModesKHR(demo->gpu, demo->surface, &presentModeCount, NULL); + err = vkGetPhysicalDeviceSurfacePresentModesKHR(demo->gpu, demo->surface, &presentModeCount, NULL); assert(!err); VkPresentModeKHR *presentModes = (VkPresentModeKHR *)malloc(presentModeCount * sizeof(VkPresentModeKHR)); assert(presentModes); - err = demo->fpGetPhysicalDeviceSurfacePresentModesKHR(demo->gpu, demo->surface, &presentModeCount, presentModes); + err = vkGetPhysicalDeviceSurfacePresentModesKHR(demo->gpu, demo->surface, &presentModeCount, presentModes); assert(!err); VkExtent2D swapchainExtent; @@ -1403,7 +1372,7 @@ static void demo_prepare_buffers(struct demo *demo) { .clipped = true, }; uint32_t i; - err = demo->fpCreateSwapchainKHR(demo->device, &swapchain_ci, NULL, &demo->swapchain); + err = vkCreateSwapchainKHR(demo->device, &swapchain_ci, NULL, &demo->swapchain); assert(!err); // If we just re-created an existing swapchain, we should destroy the old @@ -1411,15 +1380,15 @@ static void demo_prepare_buffers(struct demo *demo) { // Note: destroying the swapchain also cleans up all its associated // presentable images once the platform is done with them. if (oldSwapchain != VK_NULL_HANDLE) { - demo->fpDestroySwapchainKHR(demo->device, oldSwapchain, NULL); + vkDestroySwapchainKHR(demo->device, oldSwapchain, NULL); } - err = demo->fpGetSwapchainImagesKHR(demo->device, demo->swapchain, &demo->swapchainImageCount, NULL); + err = vkGetSwapchainImagesKHR(demo->device, demo->swapchain, &demo->swapchainImageCount, NULL); assert(!err); VkImage *swapchainImages = (VkImage *)malloc(demo->swapchainImageCount * sizeof(VkImage)); assert(swapchainImages); - err = demo->fpGetSwapchainImagesKHR(demo->device, demo->swapchain, &demo->swapchainImageCount, swapchainImages); + err = vkGetSwapchainImagesKHR(demo->device, demo->swapchain, &demo->swapchainImageCount, swapchainImages); assert(!err); demo->swapchain_image_resources = @@ -1459,7 +1428,7 @@ static void demo_prepare_buffers(struct demo *demo) { if (demo->VK_GOOGLE_display_timing_enabled) { VkRefreshCycleDurationGOOGLE rc_dur; - err = demo->fpGetRefreshCycleDurationGOOGLE(demo->device, demo->swapchain, &rc_dur); + err = vkGetRefreshCycleDurationGOOGLE(demo->device, demo->swapchain, &rc_dur); assert(!err); demo->refresh_duration = rc_dur.refreshDuration; @@ -2435,7 +2404,7 @@ static void demo_cleanup(struct demo *demo) { vkFreeMemory(demo->device, demo->textures[i].mem, NULL); vkDestroySampler(demo->device, demo->textures[i].sampler, NULL); } - demo->fpDestroySwapchainKHR(demo->device, demo->swapchain, NULL); + vkDestroySwapchainKHR(demo->device, demo->swapchain, NULL); vkDestroyImageView(demo->device, demo->depth.view, NULL); vkDestroyImage(demo->device, demo->depth.image, NULL); @@ -3777,26 +3746,7 @@ static void demo_init_vk(struct demo *demo) { } if (demo->validate) { - // Setup VK_EXT_debug_utils function pointers always (we use them for - // debug labels and names). - demo->CreateDebugUtilsMessengerEXT = - (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(demo->inst, "vkCreateDebugUtilsMessengerEXT"); - demo->DestroyDebugUtilsMessengerEXT = - (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(demo->inst, "vkDestroyDebugUtilsMessengerEXT"); - demo->SubmitDebugUtilsMessageEXT = - (PFN_vkSubmitDebugUtilsMessageEXT)vkGetInstanceProcAddr(demo->inst, "vkSubmitDebugUtilsMessageEXT"); - demo->CmdBeginDebugUtilsLabelEXT = - (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(demo->inst, "vkCmdBeginDebugUtilsLabelEXT"); - demo->CmdEndDebugUtilsLabelEXT = - (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(demo->inst, "vkCmdEndDebugUtilsLabelEXT"); - demo->CmdInsertDebugUtilsLabelEXT = - (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetInstanceProcAddr(demo->inst, "vkCmdInsertDebugUtilsLabelEXT"); - demo->SetDebugUtilsObjectNameEXT = - (PFN_vkSetDebugUtilsObjectNameEXT)vkGetInstanceProcAddr(demo->inst, "vkSetDebugUtilsObjectNameEXT"); - if (NULL == demo->CreateDebugUtilsMessengerEXT || NULL == demo->DestroyDebugUtilsMessengerEXT || - NULL == demo->SubmitDebugUtilsMessageEXT || NULL == demo->CmdBeginDebugUtilsLabelEXT || - NULL == demo->CmdEndDebugUtilsLabelEXT || NULL == demo->CmdInsertDebugUtilsLabelEXT || - NULL == demo->SetDebugUtilsObjectNameEXT) { + if (NULL == demo->CreateDebugUtilsMessengerEXT) { ERR_EXIT("GetProcAddr: Failed to init VK_EXT_debug_utils\n", "GetProcAddr: Failure"); } @@ -3826,12 +3776,6 @@ static void demo_init_vk(struct demo *demo) { // features based on this query VkPhysicalDeviceFeatures physDevFeatures; vkGetPhysicalDeviceFeatures(demo->gpu, &physDevFeatures); - - GET_INSTANCE_PROC_ADDR(demo->inst, GetPhysicalDeviceSurfaceSupportKHR); - GET_INSTANCE_PROC_ADDR(demo->inst, GetPhysicalDeviceSurfaceCapabilitiesKHR); - GET_INSTANCE_PROC_ADDR(demo->inst, GetPhysicalDeviceSurfaceFormatsKHR); - GET_INSTANCE_PROC_ADDR(demo->inst, GetPhysicalDeviceSurfacePresentModesKHR); - GET_INSTANCE_PROC_ADDR(demo->inst, GetSwapchainImagesKHR); } static void demo_create_device(struct demo *demo) { @@ -3978,7 +3922,7 @@ static void demo_init_vk_swapchain(struct demo *demo) { // Iterate over each queue to learn whether it supports presenting: VkBool32 *supportsPresent = (VkBool32 *)malloc(demo->queue_family_count * sizeof(VkBool32)); for (uint32_t i = 0; i < demo->queue_family_count; i++) { - demo->fpGetPhysicalDeviceSurfaceSupportKHR(demo->gpu, i, demo->surface, &supportsPresent[i]); + vkGetPhysicalDeviceSurfaceSupportKHR(demo->gpu, i, demo->surface, &supportsPresent[i]); } // Search for a graphics and a present queue in the array of queue @@ -4022,16 +3966,6 @@ static void demo_init_vk_swapchain(struct demo *demo) { demo_create_device(demo); - GET_DEVICE_PROC_ADDR(demo->device, CreateSwapchainKHR); - GET_DEVICE_PROC_ADDR(demo->device, DestroySwapchainKHR); - GET_DEVICE_PROC_ADDR(demo->device, GetSwapchainImagesKHR); - GET_DEVICE_PROC_ADDR(demo->device, AcquireNextImageKHR); - GET_DEVICE_PROC_ADDR(demo->device, QueuePresentKHR); - if (demo->VK_GOOGLE_display_timing_enabled) { - GET_DEVICE_PROC_ADDR(demo->device, GetRefreshCycleDurationGOOGLE); - GET_DEVICE_PROC_ADDR(demo->device, GetPastPresentationTimingGOOGLE); - } - vkGetDeviceQueue(demo->device, demo->graphics_queue_family_index, 0, &demo->graphics_queue); if (!demo->separate_present_queue) { @@ -4042,10 +3976,10 @@ static void demo_init_vk_swapchain(struct demo *demo) { // Get the list of VkFormat's that are supported: uint32_t formatCount; - err = demo->fpGetPhysicalDeviceSurfaceFormatsKHR(demo->gpu, demo->surface, &formatCount, NULL); + err = vkGetPhysicalDeviceSurfaceFormatsKHR(demo->gpu, demo->surface, &formatCount, NULL); assert(!err); VkSurfaceFormatKHR *surfFormats = (VkSurfaceFormatKHR *)malloc(formatCount * sizeof(VkSurfaceFormatKHR)); - err = demo->fpGetPhysicalDeviceSurfaceFormatsKHR(demo->gpu, demo->surface, &formatCount, surfFormats); + err = vkGetPhysicalDeviceSurfaceFormatsKHR(demo->gpu, demo->surface, &formatCount, surfFormats); assert(!err); VkSurfaceFormatKHR surfaceFormat = pick_surface_format(surfFormats, formatCount); demo->format = surfaceFormat.format; -- cgit v1.2.3