diff options
| author | Charles Giessen <charles@lunarg.com> | 2023-12-15 13:57:06 -0700 |
|---|---|---|
| committer | Charles Giessen <46324611+charles-lunarg@users.noreply.github.com> | 2023-12-15 14:14:04 -0700 |
| commit | ae1128a3ebae2356a6d00aaa1b8beac7ac99f91a (patch) | |
| tree | fa3b59f633f3059f48422cdd907755ac75c4e78b /cube | |
| parent | dd0968224ad0b206987f14e2c88a4fad0ae39aaa (diff) | |
| download | usermoji-ae1128a3ebae2356a6d00aaa1b8beac7ac99f91a.tar.xz | |
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.
Diffstat (limited to 'cube')
| -rw-r--r-- | cube/cube.c | 104 |
1 files changed, 19 insertions, 85 deletions
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; |
