diff options
Diffstat (limited to 'loader/table_ops.h')
| -rw-r--r-- | loader/table_ops.h | 197 |
1 files changed, 155 insertions, 42 deletions
diff --git a/loader/table_ops.h b/loader/table_ops.h index eecc952a..b3b90795 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -46,7 +46,7 @@ static inline void loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa, VkDevice dev) { VkLayerDispatchTable *table = &dev_table->core_dispatch; - for (uint32_t i = 0; i < MAX_NUM_DEV_EXTS; i++) + for (uint32_t i = 0; i < MAX_NUM_UNKNOWN_EXTS; i++) dev_table->ext_dispatch.dev_ext[i] = (PFN_vkDevExt)vkDevExtError; table->GetDeviceProcAddr = @@ -269,27 +269,49 @@ static inline void loader_init_device_extension_dispatch_table( (PFN_vkGetSwapchainImagesKHR)gpa(dev, "vkGetSwapchainImagesKHR"); table->QueuePresentKHR = (PFN_vkQueuePresentKHR)gpa(dev, "vkQueuePresentKHR"); + + // KHR_display_swapchain + table->CreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)gpa( + dev, "vkCreateSharedSwapchainsKHR"); + + // KHR_maintenance1 + table->TrimCommandPoolKHR = + (PFN_vkTrimCommandPoolKHR)gpa(dev, "vkTrimCommandPoolKHR"); + + // EXT_display_control + table->DisplayPowerControlEXT = + (PFN_vkDisplayPowerControlEXT)gpa(dev, "vkDisplayPowerControlEXT"); + table->RegisterDeviceEventEXT = + (PFN_vkRegisterDeviceEventEXT)gpa(dev, "vkRegisterDeviceEventEXT"); + table->RegisterDisplayEventEXT = + (PFN_vkRegisterDisplayEventEXT)gpa(dev, "vkRegisterDisplayEventEXT"); + table->GetSwapchainCounterEXT = + (PFN_vkGetSwapchainCounterEXT)gpa(dev, "vkGetSwapchainCounterEXT"); + + // EXT_debug_marker + table->DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)gpa( + dev, "vkDebugMarkerSetObjectTagEXT"); + table->DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)gpa( + dev, "vkDebugMarkerSetObjectNameEXT"); + table->CmdDebugMarkerBeginEXT = + (PFN_vkCmdDebugMarkerBeginEXT)gpa(dev, "vkCmdDebugMarkerBeginEXT"); + table->CmdDebugMarkerEndEXT = + (PFN_vkCmdDebugMarkerEndEXT)gpa(dev, "vkCmdDebugMarkerEndEXT"); + table->CmdDebugMarkerInsertEXT = + (PFN_vkCmdDebugMarkerInsertEXT)gpa(dev, "vkCmdDebugMarkerInsertEXT"); + + // AMD_draw_indirect_count table->CmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)gpa(dev, "vkCmdDrawIndirectCountAMD"); table->CmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)gpa( dev, "vkCmdDrawIndexedIndirectCountAMD"); + #ifdef VK_USE_PLATFORM_WIN32_KHR + // NV_external_memory_win32 table->GetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)gpa(dev, "vkGetMemoryWin32HandleNV"); -#endif // VK_USE_PLATFORM_WIN32_KHR - table->CreateSharedSwapchainsKHR = - (PFN_vkCreateSharedSwapchainsKHR)gpa(dev, "vkCreateSharedSwapchainsKHR"); - table->DebugMarkerSetObjectTagEXT = - (PFN_vkDebugMarkerSetObjectTagEXT)gpa(dev, "vkDebugMarkerSetObjectTagEXT"); - table->DebugMarkerSetObjectNameEXT = - (PFN_vkDebugMarkerSetObjectNameEXT)gpa(dev, "vkDebugMarkerSetObjectNameEXT"); - table->CmdDebugMarkerBeginEXT = - (PFN_vkCmdDebugMarkerBeginEXT)gpa(dev, "vkCmdDebugMarkerBeginEXT"); - table->CmdDebugMarkerEndEXT = - (PFN_vkCmdDebugMarkerEndEXT)gpa(dev, "vkCmdDebugMarkerEndEXT"); - table->CmdDebugMarkerInsertEXT = - (PFN_vkCmdDebugMarkerInsertEXT)gpa(dev, "vkCmdDebugMarkerInsertEXT"); +#endif // NVX_device_generated_commands table->CmdProcessCommandsNVX = @@ -562,7 +584,6 @@ loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, return (void *)table->CmdEndRenderPass; if (!strcmp(name, "CmdExecuteCommands")) return (void *)table->CmdExecuteCommands; - if (!strcmp(name, "DestroySwapchainKHR")) return (void *)table->DestroySwapchainKHR; if (!strcmp(name, "GetSwapchainImagesKHR")) @@ -580,6 +601,8 @@ loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, // object before passing the appropriate info along to the ICD. if (!strcmp(name, "CreateSwapchainKHR")) { return (void *)vkCreateSwapchainKHR; + } else if (!strcmp(name, "CreateSharedSwapchainsKHR")) { + return (void *)vkCreateSharedSwapchainsKHR; } else if (!strcmp(name, "DebugMarkerSetObjectTagEXT")) { return (void *)vkDebugMarkerSetObjectTagEXT; } else if (!strcmp(name, "DebugMarkerSetObjectNameEXT")) { @@ -629,16 +652,9 @@ loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, static inline void loader_init_instance_extension_dispatch_table( VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa, VkInstance inst) { + // WSI extensions table->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)gpa(inst, "vkDestroySurfaceKHR"); - table->CreateDebugReportCallbackEXT = - (PFN_vkCreateDebugReportCallbackEXT)gpa( - inst, "vkCreateDebugReportCallbackEXT"); - table->DestroyDebugReportCallbackEXT = - (PFN_vkDestroyDebugReportCallbackEXT)gpa( - inst, "vkDestroyDebugReportCallbackEXT"); - table->DebugReportMessageEXT = - (PFN_vkDebugReportMessageEXT)gpa(inst, "vkDebugReportMessageEXT"); table->GetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)gpa( inst, "vkGetPhysicalDeviceSurfaceSupportKHR"); @@ -651,9 +667,6 @@ static inline void loader_init_instance_extension_dispatch_table( table->GetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)gpa( inst, "vkGetPhysicalDeviceSurfacePresentModesKHR"); - table->GetPhysicalDeviceExternalImageFormatPropertiesNV = - (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)gpa( - inst, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"); #ifdef VK_USE_PLATFORM_MIR_KHR table->CreateMirSurfaceKHR = (PFN_vkCreateMirSurfaceKHR)gpa(inst, "vkCreateMirSurfaceKHR"); @@ -709,12 +722,125 @@ static inline void loader_init_instance_extension_dispatch_table( (PFN_vkCreateDisplayPlaneSurfaceKHR)gpa( inst, "vkCreateDisplayPlaneSurfaceKHR"); - // NVX_device_generated_commands (physical device commands) + // KHR_get_physical_device_properties2 + table->GetPhysicalDeviceFeatures2KHR = + (PFN_vkGetPhysicalDeviceFeatures2KHR)gpa( + inst, "vkGetPhysicalDeviceFeatures2KHR"); + table->GetPhysicalDeviceProperties2KHR = + (PFN_vkGetPhysicalDeviceProperties2KHR)gpa( + inst, "vkGetPhysicalDeviceProperties2KHR"); + table->GetPhysicalDeviceFormatProperties2KHR = + (PFN_vkGetPhysicalDeviceFormatProperties2KHR)gpa( + inst, "vkGetPhysicalDeviceFormatProperties2KHR"); + table->GetPhysicalDeviceImageFormatProperties2KHR = + (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)gpa( + inst, "vkGetPhysicalDeviceImageFormatProperties2KHR"); + table->GetPhysicalDeviceQueueFamilyProperties2KHR = + (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)gpa( + inst, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + table->GetPhysicalDeviceMemoryProperties2KHR = + (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)gpa( + inst, "vkGetPhysicalDeviceMemoryProperties2KHR"); + table->GetPhysicalDeviceSparseImageFormatProperties2KHR = + (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)gpa( + inst, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); + +#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT + // EXT_acquire_xlib_display + table->AcquireXlibDisplayEXT = + (PFN_vkAcquireXlibDisplayEXT)gpa(inst, "vkAcquireXlibDisplayEXT"); + table->GetRandROutputDisplayEXT = + (PFN_vkGetRandROutputDisplayEXT)gpa(inst, "vkGetRandROutputDisplayEXT"); +#endif + + // EXT_debug_report + table->CreateDebugReportCallbackEXT = + (PFN_vkCreateDebugReportCallbackEXT)gpa( + inst, "vkCreateDebugReportCallbackEXT"); + table->DestroyDebugReportCallbackEXT = + (PFN_vkDestroyDebugReportCallbackEXT)gpa( + inst, "vkDestroyDebugReportCallbackEXT"); + table->DebugReportMessageEXT = + (PFN_vkDebugReportMessageEXT)gpa(inst, "vkDebugReportMessageEXT"); + + // EXT_direct_mode_display + table->ReleaseDisplayEXT = + (PFN_vkReleaseDisplayEXT)gpa(inst, "vkReleaseDisplayEXT"); + + // EXT_display_surface_counter + table->GetPhysicalDeviceSurfaceCapabilities2EXT = + (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)gpa( + inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT"); + + // NV_external_memory_capabilities + table->GetPhysicalDeviceExternalImageFormatPropertiesNV = + (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)gpa( + inst, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"); + + // NVX_device_generated_commands (physical device command) table->GetPhysicalDeviceGeneratedCommandsPropertiesNVX = (PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX)gpa( inst, "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX"); } +static inline void *loader_lookup_instance_extension_dispatch_table( + const VkLayerInstanceDispatchTable *table, const char *name, + bool *found_name) { + + *found_name = true; + + // KHR_get_physical_device_properties2 + if (!strcmp(name, "GetPhysicalDeviceFeatures2KHR")) + return (void *)table->GetPhysicalDeviceFeatures2KHR; + if (!strcmp(name, "GetPhysicalDeviceProperties2KHR")) + return (void *)table->GetPhysicalDeviceProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceFormatProperties2KHR")) + return (void *)table->GetPhysicalDeviceFormatProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceImageFormatProperties2KHR")) + return (void *)table->GetPhysicalDeviceImageFormatProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties2KHR")) + return (void *)table->GetPhysicalDeviceQueueFamilyProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceMemoryProperties2KHR")) + return (void *)table->GetPhysicalDeviceMemoryProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceSparseImageFormatProperties2KHR")) + return (void *)table->GetPhysicalDeviceSparseImageFormatProperties2KHR; + +// EXT_acquire_xlib_display +#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT + if (!strcmp(name, "AcquireXlibDisplayEXT")) + return (void *)table->AcquireXlibDisplayEXT; + if (!strcmp(name, "GetRandROutputDisplayEXT")) + return (void *)table->GetRandROutputDisplayEXT; +#endif + + // EXT_debug_report + if (!strcmp(name, "CreateDebugReportCallbackEXT")) + return (void *)table->CreateDebugReportCallbackEXT; + if (!strcmp(name, "DestroyDebugReportCallbackEXT")) + return (void *)table->DestroyDebugReportCallbackEXT; + if (!strcmp(name, "DebugReportMessageEXT")) + return (void *)table->DebugReportMessageEXT; + + // EXT_direct_mode_display + if (!strcmp(name, "ReleaseDisplayEXT")) + return (void *)table->ReleaseDisplayEXT; + + // EXT_display_surface_counter + if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilities2EXT")) + return (void *)table->GetPhysicalDeviceSurfaceCapabilities2EXT; + + // NV_external_memory_capabilities + if (!strcmp(name, "GetPhysicalDeviceExternalImageFormatPropertiesNV")) + return (void *)table->GetPhysicalDeviceExternalImageFormatPropertiesNV; + + // NVX_device_generated_commands + if (!strcmp(name, "GetPhysicalDeviceGeneratedCommandsPropertiesNVX")) + return (void *)table->GetPhysicalDeviceGeneratedCommandsPropertiesNVX; + + *found_name = false; + return NULL; +} + static inline void * loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name, bool *found_name) { @@ -759,8 +885,6 @@ loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, return (void *)table->GetPhysicalDeviceSurfaceFormatsKHR; if (!strcmp(name, "GetPhysicalDeviceSurfacePresentModesKHR")) return (void *)table->GetPhysicalDeviceSurfacePresentModesKHR; - if (!strcmp(name, "GetPhysicalDeviceExternalImageFormatPropertiesNV")) - return (void *)table->GetPhysicalDeviceExternalImageFormatPropertiesNV; #ifdef VK_USE_PLATFORM_MIR_KHR if (!strcmp(name, "CreateMirSurfaceKHR")) return (void *)table->CreateMirSurfaceKHR; @@ -806,17 +930,6 @@ loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, if (!strcmp(name, "CreateDisplayPlaneSurfaceKHR")) return (void *)table->CreateDisplayPlaneSurfaceKHR; - if (!strcmp(name, "CreateDebugReportCallbackEXT")) - return (void *)table->CreateDebugReportCallbackEXT; - if (!strcmp(name, "DestroyDebugReportCallbackEXT")) - return (void *)table->DestroyDebugReportCallbackEXT; - if (!strcmp(name, "DebugReportMessageEXT")) - return (void *)table->DebugReportMessageEXT; - - // NVX_device_generated_commands - if (!strcmp(name, "GetPhysicalDeviceGeneratedCommandsPropertiesNVX")) - return (void *)table->GetPhysicalDeviceGeneratedCommandsPropertiesNVX; - - *found_name = false; - return NULL; + return loader_lookup_instance_extension_dispatch_table(table, name, + found_name); } |
