From 373469f006399d6b5204ee05db3b56beb168b36f Mon Sep 17 00:00:00 2001 From: Mark Young Date: Tue, 5 Jul 2016 16:41:50 -0600 Subject: [PATCH] layers : gh682 move gipa dispatch table init Move the GIPA setup of the dispatch tables for layers into the layer_init_device_dispatch_table call since we're already doing a majority of it there. This removes the need to separately setup the WSI extension entry-points. Additionally, memset the table to 0, just to make sure anything that gets added in the future is obvoiusly not set. Change-Id: I63c7c107cd9f7957e2766fdbeb8a06bc1ae0eda6 --- layers/core_validation.cpp | 12 +---- layers/object_tracker.h | 64 +---------------------- layers/swapchain.cpp | 73 ++------------------------ layers/unique_objects.h | 56 +------------------- layers/vk_layer_logging.h | 9 +--- tests/layers/wrap_objects.cpp | 4 -- tests/layers/wrap_objects.h | 55 -------------------- vk-generate.py | 116 +++++++++++++++++++++++++++++++++++++----- vulkan.py | 10 ++++ 9 files changed, 124 insertions(+), 275 deletions(-) diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 87b47b0..980b92e 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -4038,21 +4038,13 @@ VKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocati layer_data_map.erase(key); } -static void createDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo, VkDevice device) { +static void checkDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo, VkDevice device) { uint32_t i; // TBD: Need any locking, in case this function is called at the same time // by more than one thread? layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); dev_data->device_extensions.wsi_enabled = false; - VkLayerDispatchTable *pDisp = dev_data->device_dispatch_table; - PFN_vkGetDeviceProcAddr gpa = pDisp->GetDeviceProcAddr; - pDisp->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gpa(device, "vkCreateSwapchainKHR"); - pDisp->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)gpa(device, "vkDestroySwapchainKHR"); - pDisp->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)gpa(device, "vkGetSwapchainImagesKHR"); - pDisp->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)gpa(device, "vkAcquireNextImageKHR"); - pDisp->QueuePresentKHR = (PFN_vkQueuePresentKHR)gpa(device, "vkQueuePresentKHR"); - for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) { if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) dev_data->device_extensions.wsi_enabled = true; @@ -4168,7 +4160,7 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice gpu, const VkDevice my_device_data->device = *pDevice; my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice); - createDeviceRegisterExtensions(pCreateInfo, *pDevice); + checkDeviceRegisterExtensions(pCreateInfo, *pDevice); // Get physical device limits for this device my_instance_data->instance_dispatch_table->GetPhysicalDeviceProperties(gpu, &(my_device_data->phys_dev_properties.properties)); uint32_t count; diff --git a/layers/object_tracker.h b/layers/object_tracker.h index 67361ed..18d2cb2 100644 --- a/layers/object_tracker.h +++ b/layers/object_tracker.h @@ -123,13 +123,7 @@ std::vector queue_family_properties; static void createDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo, VkDevice device) { layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); - VkLayerDispatchTable *pDisp = get_dispatch_table(object_tracker_device_table_map, device); - PFN_vkGetDeviceProcAddr gpa = pDisp->GetDeviceProcAddr; - pDisp->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gpa(device, "vkCreateSwapchainKHR"); - pDisp->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)gpa(device, "vkDestroySwapchainKHR"); - pDisp->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)gpa(device, "vkGetSwapchainImagesKHR"); - pDisp->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)gpa(device, "vkAcquireNextImageKHR"); - pDisp->QueuePresentKHR = (PFN_vkQueuePresentKHR)gpa(device, "vkQueuePresentKHR"); + my_device_data->wsi_enabled = false; for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) @@ -142,62 +136,6 @@ static void createDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { VkLayerInstanceDispatchTable *pDisp = get_dispatch_table(object_tracker_instance_table_map, instance); - PFN_vkGetInstanceProcAddr gpa = pDisp->GetInstanceProcAddr; - - pDisp->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)gpa(instance, "vkDestroySurfaceKHR"); - pDisp->GetPhysicalDeviceSurfaceSupportKHR = - (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"); - pDisp->GetPhysicalDeviceSurfaceCapabilitiesKHR = - (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); - pDisp->GetPhysicalDeviceSurfaceFormatsKHR = - (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"); - pDisp->GetPhysicalDeviceSurfacePresentModesKHR = - (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)gpa(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"); -#ifndef __ANDROID__ - pDisp->GetPhysicalDeviceDisplayPropertiesKHR = - (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)gpa(instance, "vkGetPhysicalDeviceDisplayPropertiesKHR"); - pDisp->GetPhysicalDeviceDisplayPlanePropertiesKHR = - (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)gpa(instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); - pDisp->GetDisplayPlaneSupportedDisplaysKHR = - (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)gpa(instance, "vkGetDisplayPlaneSupportedDisplaysKHR"); - pDisp->GetDisplayModePropertiesKHR = - (PFN_vkGetDisplayModePropertiesKHR)gpa(instance, "vkGetDisplayModePropertiesKHR"); - pDisp->CreateDisplayModeKHR = - (PFN_vkCreateDisplayModeKHR)gpa(instance, "vkCreateDisplayModeKHR"); - pDisp->GetDisplayPlaneCapabilitiesKHR = - (PFN_vkGetDisplayPlaneCapabilitiesKHR)gpa(instance, "vkGetDisplayPlaneCapabilitiesKHR"); - pDisp->CreateDisplayPlaneSurfaceKHR = - (PFN_vkCreateDisplayPlaneSurfaceKHR)gpa(instance, "vkCreateDisplayPlaneSurfaceKHR"); -#endif - -#if VK_USE_PLATFORM_WIN32_KHR - pDisp->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)gpa(instance, "vkCreateWin32SurfaceKHR"); - pDisp->GetPhysicalDeviceWin32PresentationSupportKHR = - (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); -#endif // VK_USE_PLATFORM_WIN32_KHR -#ifdef VK_USE_PLATFORM_XCB_KHR - pDisp->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)gpa(instance, "vkCreateXcbSurfaceKHR"); - pDisp->GetPhysicalDeviceXcbPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_XCB_KHR -#ifdef VK_USE_PLATFORM_XLIB_KHR - pDisp->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)gpa(instance, "vkCreateXlibSurfaceKHR"); - pDisp->GetPhysicalDeviceXlibPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_XLIB_KHR -#ifdef VK_USE_PLATFORM_MIR_KHR - pDisp->CreateMirSurfaceKHR = (PFN_vkCreateMirSurfaceKHR)gpa(instance, "vkCreateMirSurfaceKHR"); - pDisp->GetPhysicalDeviceMirPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceMirPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_MIR_KHR -#ifdef VK_USE_PLATFORM_WAYLAND_KHR - pDisp->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)gpa(instance, "vkCreateWaylandSurfaceKHR"); - pDisp->GetPhysicalDeviceWaylandPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_WAYLAND_KHR -#ifdef VK_USE_PLATFORM_ANDROID_KHR - pDisp->CreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)gpa(instance, "vkCreateAndroidSurfaceKHR"); -#endif // VK_USE_PLATFORM_ANDROID_KHR instanceExtMap[pDisp] = {}; diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp index 1f08e95..23b341c 100644 --- a/layers/swapchain.cpp +++ b/layers/swapchain.cpp @@ -42,22 +42,12 @@ static const VkLayerProperties swapchain_layer = { "VK_LAYER_LUNARG_swapchain", VK_LAYER_API_VERSION, 1, "LunarG Validation Layer", }; -static void createDeviceRegisterExtensions(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, - VkDevice device) { +static void checkDeviceRegisterExtensions(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, + VkDevice device) { uint32_t i; layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); - VkLayerDispatchTable *pDisp = my_device_data->device_dispatch_table; - PFN_vkGetDeviceProcAddr gpa = pDisp->GetDeviceProcAddr; - - pDisp->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gpa(device, "vkCreateSwapchainKHR"); - pDisp->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)gpa(device, "vkDestroySwapchainKHR"); - pDisp->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)gpa(device, "vkGetSwapchainImagesKHR"); - pDisp->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)gpa(device, "vkAcquireNextImageKHR"); - pDisp->QueuePresentKHR = (PFN_vkQueuePresentKHR)gpa(device, "vkQueuePresentKHR"); - pDisp->GetDeviceQueue = (PFN_vkGetDeviceQueue)gpa(device, "vkGetDeviceQueue"); - SwpPhysicalDevice *pPhysicalDevice = NULL; { auto it = my_instance_data->physicalDeviceMap.find(physicalDevice); @@ -87,62 +77,9 @@ static void createDeviceRegisterExtensions(VkPhysicalDevice physicalDevice, cons } } -static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { +static void checkInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { uint32_t i; layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); - VkLayerInstanceDispatchTable *pDisp = my_data->instance_dispatch_table; - PFN_vkGetInstanceProcAddr gpa = pDisp->GetInstanceProcAddr; -#ifdef VK_USE_PLATFORM_ANDROID_KHR - pDisp->CreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)gpa(instance, "vkCreateAndroidSurfaceKHR"); -#endif // VK_USE_PLATFORM_ANDROID_KHR -#ifdef VK_USE_PLATFORM_MIR_KHR - pDisp->CreateMirSurfaceKHR = (PFN_vkCreateMirSurfaceKHR)gpa(instance, "vkCreateMirSurfaceKHR"); - pDisp->GetPhysicalDeviceMirPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceMirPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_MIR_KHR -#ifdef VK_USE_PLATFORM_WAYLAND_KHR - pDisp->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)gpa(instance, "vkCreateWaylandSurfaceKHR"); - pDisp->GetPhysicalDeviceWaylandPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_WAYLAND_KHR -#ifdef VK_USE_PLATFORM_WIN32_KHR - pDisp->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)gpa(instance, "vkCreateWin32SurfaceKHR"); - pDisp->GetPhysicalDeviceWin32PresentationSupportKHR = - (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); -#endif // VK_USE_PLATFORM_WIN32_KHR -#ifdef VK_USE_PLATFORM_XCB_KHR - pDisp->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)gpa(instance, "vkCreateXcbSurfaceKHR"); - pDisp->GetPhysicalDeviceXcbPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_XCB_KHR -#ifdef VK_USE_PLATFORM_XLIB_KHR - pDisp->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)gpa(instance, "vkCreateXlibSurfaceKHR"); - pDisp->GetPhysicalDeviceXlibPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_XLIB_KHR - pDisp->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)gpa(instance, "vkDestroySurfaceKHR"); - pDisp->GetPhysicalDeviceSurfaceSupportKHR = - (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"); - pDisp->GetPhysicalDeviceSurfaceCapabilitiesKHR = - (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); - pDisp->GetPhysicalDeviceSurfaceFormatsKHR = - (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"); - pDisp->GetPhysicalDeviceSurfacePresentModesKHR = - (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)gpa(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"); - pDisp->CreateDisplayPlaneSurfaceKHR = - (PFN_vkCreateDisplayPlaneSurfaceKHR)gpa(instance, "vkCreateDisplayPlaneSurfaceKHR"); - pDisp->GetPhysicalDeviceDisplayPropertiesKHR = - (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)gpa(instance, "vkGetPhysicalDeviceDisplayPropertiesKHR"); - pDisp->GetPhysicalDeviceDisplayPlanePropertiesKHR = - (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)gpa(instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); - pDisp->GetDisplayPlaneSupportedDisplaysKHR = - (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)gpa(instance, "vkGetDisplayPlaneSupportedDisplaysKHR"); - pDisp->GetDisplayModePropertiesKHR = - (PFN_vkGetDisplayModePropertiesKHR)gpa(instance, "vkGetDisplayModePropertiesKHR"); - pDisp->CreateDisplayModeKHR = - (PFN_vkCreateDisplayModeKHR)gpa(instance, "vkCreateDisplayModeKHR"); - pDisp->GetDisplayPlaneCapabilitiesKHR = - (PFN_vkGetDisplayPlaneCapabilitiesKHR)gpa(instance, "vkGetDisplayPlaneCapabilitiesKHR"); // Remember this instance, and whether the VK_KHR_surface extension // was enabled for it: @@ -278,7 +215,7 @@ CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallba pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames); // Call the following function after my_data is initialized: - createInstanceRegisterExtensions(pCreateInfo, *pInstance); + checkInstanceRegisterExtensions(pCreateInfo, *pInstance); init_swapchain(my_data, pAllocator); return result; @@ -1356,7 +1293,7 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice physicalDevice, layer_init_device_dispatch_table(*pDevice, my_device_data->device_dispatch_table, fpGetDeviceProcAddr); my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice); - createDeviceRegisterExtensions(physicalDevice, pCreateInfo, *pDevice); + checkDeviceRegisterExtensions(physicalDevice, pCreateInfo, *pDevice); return result; } diff --git a/layers/unique_objects.h b/layers/unique_objects.h index 962985e..2c9eca0 100644 --- a/layers/unique_objects.h +++ b/layers/unique_objects.h @@ -94,61 +94,9 @@ template bool ContainsExtStruct(const T *target, VkStructureType ex } // Handle CreateInstance -static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { +static void checkInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { uint32_t i; VkLayerInstanceDispatchTable *pDisp = get_dispatch_table(unique_objects_instance_table_map, instance); - PFN_vkGetInstanceProcAddr gpa = pDisp->GetInstanceProcAddr; - - //KHR_surface - pDisp->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)gpa(instance, "vkDestroySurfaceKHR"); - pDisp->GetPhysicalDeviceSurfaceSupportKHR = - (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"); - pDisp->GetPhysicalDeviceSurfaceCapabilitiesKHR = - (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); - pDisp->GetPhysicalDeviceSurfaceFormatsKHR = - (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"); - pDisp->GetPhysicalDeviceSurfacePresentModesKHR = - (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)gpa(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"); - - // KHR_display -#ifndef __ANDROID__ - pDisp->GetPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)gpa(instance, "vkGetPhysicalDeviceDisplayPropertiesKHR"); - pDisp->GetPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)gpa(instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); - pDisp->GetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)gpa(instance, "vkGetDisplayPlaneSupportedDisplaysKHR"); - pDisp->GetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR)gpa(instance, "vkGetDisplayModePropertiesKHR"); - pDisp->CreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR)gpa(instance, "vkCreateDisplayModeKHR"); - pDisp->GetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR)gpa(instance, "vkGetDisplayPlaneCapabilitiesKHR"); - pDisp->CreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR)gpa(instance, "vkCreateDisplayPlaneSurfaceKHR"); -#endif - -#ifdef VK_USE_PLATFORM_WIN32_KHR - pDisp->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)gpa(instance, "vkCreateWin32SurfaceKHR"); - pDisp->GetPhysicalDeviceWin32PresentationSupportKHR = - (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); -#endif // VK_USE_PLATFORM_WIN32_KHR -#ifdef VK_USE_PLATFORM_XCB_KHR - pDisp->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)gpa(instance, "vkCreateXcbSurfaceKHR"); - pDisp->GetPhysicalDeviceXcbPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_XCB_KHR -#ifdef VK_USE_PLATFORM_XLIB_KHR - pDisp->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)gpa(instance, "vkCreateXlibSurfaceKHR"); - pDisp->GetPhysicalDeviceXlibPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_XLIB_KHR -#ifdef VK_USE_PLATFORM_MIR_KHR - pDisp->CreateMirSurfaceKHR = (PFN_vkCreateMirSurfaceKHR)gpa(instance, "vkCreateMirSurfaceKHR"); - pDisp->GetPhysicalDeviceMirPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceMirPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_MIR_KHR -#ifdef VK_USE_PLATFORM_WAYLAND_KHR - pDisp->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)gpa(instance, "vkCreateWaylandSurfaceKHR"); - pDisp->GetPhysicalDeviceWaylandPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_WAYLAND_KHR -#ifdef VK_USE_PLATFORM_ANDROID_KHR - pDisp->CreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)gpa(instance, "vkCreateAndroidSurfaceKHR"); -#endif // VK_USE_PLATFORM_ANDROID_KHR instanceExtMap[pDisp] = {}; @@ -207,7 +155,7 @@ VkResult explicit_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const my_data->instance = *pInstance; initInstanceTable(*pInstance, fpGetInstanceProcAddr, unique_objects_instance_table_map); - createInstanceRegisterExtensions(pCreateInfo, *pInstance); + checkInstanceRegisterExtensions(pCreateInfo, *pInstance); return result; } diff --git a/layers/vk_layer_logging.h b/layers/vk_layer_logging.h index 0328031..11405e3 100644 --- a/layers/vk_layer_logging.h +++ b/layers/vk_layer_logging.h @@ -133,14 +133,7 @@ static inline debug_report_data * debug_report_create_instance(VkLayerInstanceDispatchTable *table, VkInstance inst, uint32_t extension_count, const char *const *ppEnabledExtensions) // layer or extension name to be enabled { - debug_report_data *debug_data; - PFN_vkGetInstanceProcAddr gpa = table->GetInstanceProcAddr; - - table->CreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)gpa(inst, "vkCreateDebugReportCallbackEXT"); - table->DestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)gpa(inst, "vkDestroyDebugReportCallbackEXT"); - table->DebugReportMessageEXT = (PFN_vkDebugReportMessageEXT)gpa(inst, "vkDebugReportMessageEXT"); - - debug_data = (debug_report_data *)malloc(sizeof(debug_report_data)); + debug_report_data *debug_data = (debug_report_data *)malloc(sizeof(debug_report_data)); if (!debug_data) return NULL; diff --git a/tests/layers/wrap_objects.cpp b/tests/layers/wrap_objects.cpp index 63e56ad..9f7867c 100644 --- a/tests/layers/wrap_objects.cpp +++ b/tests/layers/wrap_objects.cpp @@ -69,8 +69,6 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo* pCre } layer_init_instance_dispatch_table(*pInstance, &inst->layer_disp, fpGetInstanceProcAddr); - create_instance_register_extensions(pCreateInfo, *pInstance, inst); - return result; } @@ -182,8 +180,6 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, c } initDeviceTable(*pDevice, fpGetDeviceProcAddr); - create_device_register_extensions(pCreateInfo, *pDevice); - #if 0 // TODO add once device is wrapped // store the loader callback for initializing created dispatchable objects chain_info = get_chain_info(pCreateInfo, VK_LOADER_DATA_CALLBACK); diff --git a/tests/layers/wrap_objects.h b/tests/layers/wrap_objects.h index 6c66078..9e42226 100644 --- a/tests/layers/wrap_objects.h +++ b/tests/layers/wrap_objects.h @@ -63,58 +63,3 @@ static void create_device_register_extensions(const VkDeviceCreateInfo *pCreateI pDisp->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)gpa(device, "vkAcquireNextImageKHR"); pDisp->QueuePresentKHR = (PFN_vkQueuePresentKHR)gpa(device, "vkQueuePresentKHR"); } - -static void create_instance_register_extensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance, struct wrapped_inst_obj *inst) { - VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; - PFN_vkGetInstanceProcAddr gpa = pDisp->GetInstanceProcAddr; - - // KHR_surface - pDisp->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)gpa(instance, "vkDestroySurfaceKHR"); - pDisp->GetPhysicalDeviceSurfaceSupportKHR = - (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"); - pDisp->GetPhysicalDeviceSurfaceCapabilitiesKHR = - (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); - pDisp->GetPhysicalDeviceSurfaceFormatsKHR = - (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"); - pDisp->GetPhysicalDeviceSurfacePresentModesKHR = - (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)gpa(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"); - - // KHR_XXX_surface -#ifdef VK_USE_PLATFORM_XCB_KHR - pDisp->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)gpa(instance, "vkCreateXcbSurfaceKHR"); - pDisp->GetPhysicalDeviceXcbPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_XCB_KHR - -#ifdef VK_USE_PLATFORM_XLIB_KHR - pDisp->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)gpa(instance, "vkCreateXlibSurfaceKHR"); - pDisp->GetPhysicalDeviceXlibPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_XLIB_KHR - -#ifdef VK_USE_PLATFORM_MIR_KHR - pDisp->CreateMirSurfaceKHR = (PFN_vkCreateMirSurfaceKHR)gpa(instance, "vkCreateMirSurfaceKHR"); - pDisp->GetPhysicalDeviceMirPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceMirPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_MIR_KHR - -#ifdef VK_USE_PLATFORM_WAYLAND_KHR - pDisp->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)gpa(instance, "vkCreateWaylandSurfaceKHR"); - pDisp->GetPhysicalDeviceWaylandPresentationSupportKHR = - (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); -#endif // VK_USE_PLATFORM_WAYLAND_KHR - -#ifdef VK_USE_PLATFORM_WIN32_KHR - pDisp->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)gpa(instance, "vkCreateWin32SurfaceKHR"); - pDisp->GetPhysicalDeviceWin32PresentationSupportKHR = - (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); -#endif // VK_USE_PLATFORM_WIN32_KHR - - //EXT_debug_report - pDisp->CreateDebugReportCallbackEXT = - (PFN_vkCreateDebugReportCallbackEXT)gpa(instance, "vkCreateDebugReportCallbackEXT"); - pDisp->DestroyDebugReportCallbackEXT = - (PFN_vkDestroyDebugReportCallbackEXT)gpa(instance, "vkDestroyDebugReportCallbackEXT"); - pDisp->DebugReportMessageEXT = - (PFN_vkDebugReportMessageEXT)gpa(instance, "vkDebugReportMessageEXT"); -} diff --git a/vk-generate.py b/vk-generate.py index 6fafc19..4f182e4 100755 --- a/vk-generate.py +++ b/vk-generate.py @@ -95,6 +95,12 @@ class Subcommand(object): pass class DispatchTableOpsSubcommand(Subcommand): + def __init__(self, argv): + self.argv = argv + self.headers = vulkan.headers_all + self.protos = vulkan.protos_all + self.outfile = None + def run(self): if len(self.argv) < 1: print("DispatchTableOpsSubcommand: unspecified") @@ -121,13 +127,56 @@ class DispatchTableOpsSubcommand(Subcommand): func = [] if type == "device": # GPA has to be first one and uses wrapped object - stmts.append("memset(table, 0, sizeof(*table));") - stmts.append("table->GetDeviceProcAddr =(PFN_vkGetDeviceProcAddr) gpa(device,\"vkGetDeviceProcAddr\");") + stmts.append(" memset(table, 0, sizeof(*table));") + stmts.append(" // Core device function pointers") + stmts.append(" table->GetDeviceProcAddr = (PFN_vkGetDeviceProcAddr) gpa(device, \"vkGetDeviceProcAddr\");") + + KHR_printed = False + EXT_printed = False + XLIB_printed = False + XCB_printed = False + MIR_printed = False + WAY_printed = False for proto in self.protos: - if proto.name == "CreateInstance" or proto.name == "EnumerateInstanceExtensionProperties" or proto.name == "EnumerateInstanceLayerProperties" or proto.params[0].ty == "VkInstance" or proto.params[0].ty == "VkPhysicalDevice": + if proto.name == "CreateInstance" or proto.name == "EnumerateInstanceExtensionProperties" or \ + proto.name == "EnumerateInstanceLayerProperties" or proto.params[0].ty == "VkInstance" or \ + proto.params[0].ty == "VkPhysicalDevice" or proto.name == "GetDeviceProcAddr": continue - if proto.name != "GetDeviceProcAddr" and 'KHR' not in proto.name: - stmts.append("table->%s = (PFN_vk%s) gpa(device, \"vk%s\");" % + if 'KHR' in proto.name and not KHR_printed: + stmts.append(" // KHR device extension function pointers") + KHR_printed = True + if 'EXT' in proto.name and not EXT_printed: + stmts.append(" // EXT device extension function pointers") + EXT_printed = True + if XLIB_printed and 'Xlib' not in proto.name: + stmts.append("#endif // VK_USE_PLATFORM_XLIB_KHR") + XLIB_printed = False + if XCB_printed and 'Xcb' not in proto.name: + stmts.append("#endif // VK_USE_PLATFORM_XCB_KHR") + XCB_printed = False + if MIR_printed and 'Mir' not in proto.name: + stmts.append("#endif // VK_USE_PLATFORM_MIR_KHR") + MIR_printed = False + if WAY_printed and 'Wayland' not in proto.name: + stmts.append("#endif // VK_USE_PLATFORM_WAYLAND_KHR") + WAY_printed = False + if 'KHR' in proto.name and 'Xlib' in proto.name: + if not XLIB_printed: + stmts.append("#ifdef VK_USE_PLATFORM_XLIB_KHR") + XLIB_printed = True + if 'KHR' in proto.name and 'Xcb' in proto.name: + if not XCB_printed: + stmts.append("#ifdef VK_USE_PLATFORM_XCB_KHR") + XCB_printed = True + if 'KHR' in proto.name and 'Mir' in proto.name: + if not MIR_printed: + stmts.append("#ifdef VK_USE_PLATFORM_MIR_KHR") + MIR_printed = True + if 'KHR' in proto.name and 'Wayland' in proto.name: + if not WAY_printed: + stmts.append("#ifdef VK_USE_PLATFORM_WAYLAND_KHR") + WAY_printed = True + stmts.append(" table->%s = (PFN_vk%s) gpa(device, \"vk%s\");" % (proto.name, proto.name, proto.name)) func.append("static inline void %s_init_device_dispatch_table(VkDevice device," % self.prefix) @@ -136,21 +185,62 @@ class DispatchTableOpsSubcommand(Subcommand): func.append("%s PFN_vkGetDeviceProcAddr gpa)" % (" " * len(self.prefix))) else: - stmts.append("table->GetInstanceProcAddr =(PFN_vkGetInstanceProcAddr) gpa(instance,\"vkGetInstanceProcAddr\");") + stmts.append(" memset(table, 0, sizeof(*table));") + stmts.append(" // Core instance function pointers") + stmts.append(" table->GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr) gpa(instance, \"vkGetInstanceProcAddr\");") + + KHR_printed = False + EXT_printed = False + XLIB_printed = False + XCB_printed = False + MIR_printed = False + WAY_printed = False for proto in self.protos: - if proto.params[0].ty != "VkInstance" and proto.params[0].ty != "VkPhysicalDevice": - continue - if proto.name == "CreateDevice": + if proto.params[0].ty != "VkInstance" and proto.params[0].ty != "VkPhysicalDevice" or \ + proto.name == "CreateDevice" or proto.name == "GetInstanceProcAddr": continue - if proto.name != "GetInstanceProcAddr" and 'KHR' not in proto.name: - stmts.append("table->%s = (PFN_vk%s) gpa(instance, \"vk%s\");" % - (proto.name, proto.name, proto.name)) + if 'KHR' in proto.name and not KHR_printed: + stmts.append(" // KHR instance extension function pointers") + KHR_printed = True + if 'EXT' in proto.name and not EXT_printed: + stmts.append(" // EXT instance extension function pointers") + EXT_printed = True + if XLIB_printed and 'Xlib' not in proto.name: + stmts.append("#endif // VK_USE_PLATFORM_XLIB_KHR") + XLIB_printed = False + if XCB_printed and 'Xcb' not in proto.name: + stmts.append("#endif // VK_USE_PLATFORM_XCB_KHR") + XCB_printed = False + if MIR_printed and 'Mir' not in proto.name: + stmts.append("#endif // VK_USE_PLATFORM_MIR_KHR") + MIR_printed = False + if WAY_printed and 'Wayland' not in proto.name: + stmts.append("#endif // VK_USE_PLATFORM_WAYLAND_KHR") + WAY_printed = False + if 'KHR' in proto.name and 'Xlib' in proto.name: + if not XLIB_printed: + stmts.append("#ifdef VK_USE_PLATFORM_XLIB_KHR") + XLIB_printed = True + if 'KHR' in proto.name and 'Xcb' in proto.name: + if not XCB_printed: + stmts.append("#ifdef VK_USE_PLATFORM_XCB_KHR") + XCB_printed = True + if 'KHR' in proto.name and 'Mir' in proto.name: + if not MIR_printed: + stmts.append("#ifdef VK_USE_PLATFORM_MIR_KHR") + MIR_printed = True + if 'KHR' in proto.name and 'Wayland' in proto.name: + if not WAY_printed: + stmts.append("#ifdef VK_USE_PLATFORM_WAYLAND_KHR") + WAY_printed = True + stmts.append(" table->%s = (PFN_vk%s) gpa(instance, \"vk%s\");" % + (proto.name, proto.name, proto.name)) func.append("static inline void %s_init_instance_dispatch_table(" % self.prefix) func.append("%s VkInstance instance," % (" " * len(self.prefix))) func.append("%s VkLayerInstanceDispatchTable *table," % (" " * len(self.prefix))) func.append("%s PFN_vkGetInstanceProcAddr gpa)" % (" " * len(self.prefix))) func.append("{") - func.append(" %s" % "\n ".join(stmts)) + func.append("%s" % "\n".join(stmts)) func.append("}") return "\n".join(func) diff --git a/vulkan.py b/vulkan.py index 8b081f1..97d8706 100644 --- a/vulkan.py +++ b/vulkan.py @@ -1346,6 +1346,16 @@ for ext in extensions: proto_names = [proto.name for proto in protos] +headers_all = [] +objects_all = [] +protos_all = [] +for ext in extensions_all: + headers_all.extend(ext.headers) + objects_all.extend(ext.objects) + protos_all.extend(ext.protos) + +proto_all_names = [proto.name for proto in protos_all] + def parse_vk_h(filename): # read object and protoype typedefs object_lines = [] -- 2.7.4