diff options
| author | Jon Ashburn <jon@lunarg.com> | 2016-03-08 09:30:30 -0700 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2016-03-08 09:57:05 -0700 |
| commit | 5a7389ed345e3aaf769470201453bc22f82fde90 (patch) | |
| tree | a227bf65c78d514541d86c405fdb51010e5ee28e /loader | |
| parent | 3b6297ef6ecf88cd8291491534c089dfe48f380d (diff) | |
| download | usermoji-5a7389ed345e3aaf769470201453bc22f82fde90.tar.xz | |
loader: gllvl #50, Add support for the WSI extension KHR_display
Change-Id: I8d5ecc7500beba3042a6b9147b2f3fd3055b3b1d
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/loader.c | 27 | ||||
| -rw-r--r-- | loader/loader.h | 16 | ||||
| -rw-r--r-- | loader/table_ops.h | 44 | ||||
| -rw-r--r-- | loader/wsi.c | 318 | ||||
| -rw-r--r-- | loader/wsi.h | 41 |
5 files changed, 435 insertions, 11 deletions
diff --git a/loader/loader.c b/loader/loader.c index 383336d3..310cd0bf 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -152,6 +152,20 @@ const VkLayerInstanceDispatchTable instance_disp = { #ifdef VK_USE_PLATFORM_ANDROID_KHR .CreateAndroidSurfaceKHR = terminator_CreateAndroidSurfaceKHR, #endif + .GetPhysicalDeviceDisplayPropertiesKHR = + terminator_GetPhysicalDeviceDisplayPropertiesKHR, + .GetPhysicalDeviceDisplayPlanePropertiesKHR = + terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR, + .GetDisplayPlaneSupportedDisplaysKHR = + terminator_GetDisplayPlaneSupportedDisplaysKHR, + .GetDisplayModePropertiesKHR = + terminator_GetDisplayModePropertiesKHR, + .CreateDisplayModeKHR = + terminator_CreateDisplayModeKHR, + .GetDisplayPlaneCapabilitiesKHR = + terminator_GetDisplayPlaneCapabilitiesKHR, + .CreateDisplayPlaneSurfaceKHR = + terminator_CreateDisplayPlaneSurfaceKHR, }; LOADER_PLATFORM_THREAD_ONCE_DECLARATION(once_init); @@ -2602,15 +2616,16 @@ loader_gpa_instance_internal(VkInstance inst, const char *pName) { if (disp_table == NULL) return NULL; - addr = loader_lookup_instance_dispatch_table(disp_table, pName); - if (addr) { + bool found_name; + addr = loader_lookup_instance_dispatch_table(disp_table, pName, &found_name); + if (found_name) { return addr; } - if (disp_table->GetInstanceProcAddr == NULL) { - return NULL; - } - return disp_table->GetInstanceProcAddr(inst, pName); + // Don't call down the chain, this would be an infinite loop + loader_log(NULL, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0, + "loader_gpa_instance_internal() unrecognized name %s", pName); + return NULL; } /** diff --git a/loader/loader.h b/loader/loader.h index 23449663..ff7ab112 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -247,7 +247,20 @@ struct loader_icd { PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR; #endif - + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR + GetPhysicalDeviceDisplayPropertiesKHR; + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR + GetPhysicalDeviceDisplayPlanePropertiesKHR; + PFN_vkGetDisplayPlaneSupportedDisplaysKHR + GetDisplayPlaneSupportedDisplaysKHR; + PFN_vkGetDisplayModePropertiesKHR + GetDisplayModePropertiesKHR; + PFN_vkCreateDisplayModeKHR + CreateDisplayModeKHR; + PFN_vkGetDisplayPlaneCapabilitiesKHR + GetDisplayPlaneCapabilitiesKHR; + PFN_vkCreateDisplayPlaneSurfaceKHR + CreateDisplayPlaneSurfaceKHR; struct loader_icd *next; }; @@ -304,6 +317,7 @@ struct loader_instance { #ifdef VK_USE_PLATFORM_ANDROID_KHR bool wsi_android_surface_enabled; #endif + bool wsi_display_enabled; }; /* VkPhysicalDevice requires special treatment by loader. Firstly, terminator diff --git a/loader/table_ops.h b/loader/table_ops.h index 4bf8b410..a216e938 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -626,14 +626,38 @@ static inline void loader_init_instance_extension_dispatch_table( (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)gpa( inst, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); #endif + table->GetPhysicalDeviceDisplayPropertiesKHR = + (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR) gpa(inst, + "vkGetPhysicalDeviceDisplayPropertiesKHR"); + table->GetPhysicalDeviceDisplayPlanePropertiesKHR = + (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR) gpa(inst, + "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + table->GetDisplayPlaneSupportedDisplaysKHR = + (PFN_vkGetDisplayPlaneSupportedDisplaysKHR) gpa(inst, + "vkGetDisplayPlaneSupportedDisplaysKHR"); + table->GetDisplayModePropertiesKHR = + (PFN_vkGetDisplayModePropertiesKHR) gpa(inst, + "vkGetDisplayModePropertiesKHR"); + table->CreateDisplayModeKHR = + (PFN_vkCreateDisplayModeKHR) gpa(inst, + "vkCreateDisplayModeKHR"); + table->GetDisplayPlaneCapabilitiesKHR = + (PFN_vkGetDisplayPlaneCapabilitiesKHR) gpa(inst, + "vkGetDisplayPlaneCapabilitiesKHR"); + table->CreateDisplayPlaneSurfaceKHR = + (PFN_vkCreateDisplayPlaneSurfaceKHR) gpa(inst, + "vkCreateDisplayPlaneSurfaceKHR"); } static inline void * loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, - const char *name) { - if (!name || name[0] != 'v' || name[1] != 'k') + const char *name, bool *found_name) { + if (!name || name[0] != 'v' || name[1] != 'k') { + *found_name = false; return NULL; + } + *found_name = true; name += 2; if (!strcmp(name, "DestroyInstance")) return (void *)table->DestroyInstance; @@ -699,6 +723,21 @@ loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, if (!strcmp(name, "GetPhysicalDeviceXlibPresentationSupportKHR")) return (void *)table->GetPhysicalDeviceXlibPresentationSupportKHR; #endif + if (!strcmp(name, "GetPhysicalDeviceDisplayPropertiesKHR")) + return (void *)table->GetPhysicalDeviceDisplayPropertiesKHR; + if (!strcmp(name, "GetPhysicalDeviceDisplayPlanePropertiesKHR")) + return (void *)table->GetPhysicalDeviceDisplayPlanePropertiesKHR; + if (!strcmp(name, "GetDisplayPlaneSupportedDisplaysKHR")) + return (void *)table->GetDisplayPlaneSupportedDisplaysKHR; + if (!strcmp(name, "GetDisplayModePropertiesKHR")) + return (void *)table->GetDisplayModePropertiesKHR; + if (!strcmp(name, "CreateDisplayModeKHR")) + return (void *)table->CreateDisplayModeKHR; + if (!strcmp(name, "GetDisplayPlaneCapabilitiesKHR")) + return (void *)table->GetDisplayPlaneCapabilitiesKHR; + if (!strcmp(name, "CreateDisplayPlaneSurfaceKHR")) + return (void *)table->CreateDisplayPlaneSurfaceKHR; + if (!strcmp(name, "CreateDebugReportCallbackEXT")) return (void *)table->CreateDebugReportCallbackEXT; if (!strcmp(name, "DestroyDebugReportCallbackEXT")) @@ -706,5 +745,6 @@ loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, if (!strcmp(name, "DebugReportMessageEXT")) return (void *)table->DebugReportMessageEXT; + *found_name = false; return NULL; } diff --git a/loader/wsi.c b/loader/wsi.c index 4d63f41a..d53ce4a9 100644 --- a/loader/wsi.c +++ b/loader/wsi.c @@ -84,6 +84,9 @@ static const VkExtensionProperties wsi_android_surface_extension_info = { }; #endif // VK_USE_PLATFORM_ANDROID_KHR +// Note for VK_DISPLAY_KHR don't advertise support since we really need support +// to come from ICD, although the loader supplements the support from ICD + void wsi_add_instance_extensions(const struct loader_instance *inst, struct loader_extension_list *ext_list) { loader_add_to_ext_list(inst, ext_list, 1, &wsi_surface_extension_info); @@ -115,7 +118,7 @@ void wsi_create_instance(struct loader_instance *ptr_instance, ptr_instance->wsi_surface_enabled = false; #ifdef VK_USE_PLATFORM_WIN32_KHR - ptr_instance->wsi_win32_surface_enabled = true; + ptr_instance->wsi_win32_surface_enabled = false; #endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_MIR_KHR ptr_instance->wsi_mir_surface_enabled = false; @@ -133,6 +136,8 @@ void wsi_create_instance(struct loader_instance *ptr_instance, ptr_instance->wsi_android_surface_enabled = false; #endif // VK_USE_PLATFORM_ANDROID_KHR + ptr_instance->wsi_display_enabled = false; + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) { @@ -181,6 +186,11 @@ void wsi_create_instance(struct loader_instance *ptr_instance, continue; } #endif // VK_USE_PLATFORM_ANDROID_KHR + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], + VK_KHR_DISPLAY_EXTENSION_NAME) == 0) { + ptr_instance->wsi_display_enabled = true; + continue; + } } } @@ -200,6 +210,7 @@ vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, disp->DestroySurfaceKHR(instance, surface, pAllocator); } +// TODO probably need to lock around all the loader_get_instance() calls. /* * This is the instance chain terminator function * for DestroySurfaceKHR @@ -940,6 +951,264 @@ terminator_CreateAndroidSurfaceKHR(VkInstance instance, Window window, #endif // VK_USE_PLATFORM_ANDROID_KHR + +/* + * Functions for the VK_KHR_display instance extension: + */ +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetPhysicalDeviceDisplayPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPropertiesKHR* pProperties) +{ + VkPhysicalDevice unwrapped_phys_dev = + loader_unwrap_physical_device(physicalDevice); + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetPhysicalDeviceDisplayPropertiesKHR( + unwrapped_phys_dev, pPropertyCount, pProperties); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetPhysicalDeviceDisplayPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPropertiesKHR* pProperties) +{ + struct loader_physical_device *phys_dev = + (struct loader_physical_device *)physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert( + icd->GetPhysicalDeviceDisplayPropertiesKHR && + "loader: null GetPhysicalDeviceDisplayPropertiesKHR ICD pointer"); + + return icd->GetPhysicalDeviceDisplayPropertiesKHR( + phys_dev->phys_dev, pPropertyCount, pProperties); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlanePropertiesKHR* pProperties) +{ + VkPhysicalDevice unwrapped_phys_dev = + loader_unwrap_physical_device(physicalDevice); + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetPhysicalDeviceDisplayPlanePropertiesKHR( + unwrapped_phys_dev, pPropertyCount, pProperties); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlanePropertiesKHR* pProperties) +{ + struct loader_physical_device *phys_dev = + (struct loader_physical_device *)physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert( + icd->GetPhysicalDeviceDisplayPlanePropertiesKHR && + "loader: null GetPhysicalDeviceDisplayPlanePropertiesKHR ICD pointer"); + + return icd->GetPhysicalDeviceDisplayPlanePropertiesKHR( + phys_dev->phys_dev, pPropertyCount, pProperties); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetDisplayPlaneSupportedDisplaysKHR( + VkPhysicalDevice physicalDevice, + uint32_t planeIndex, + uint32_t* pDisplayCount, + VkDisplayKHR* pDisplays) +{ + VkPhysicalDevice unwrapped_phys_dev = + loader_unwrap_physical_device(physicalDevice); + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetDisplayPlaneSupportedDisplaysKHR( + unwrapped_phys_dev, planeIndex, pDisplayCount, pDisplays); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetDisplayPlaneSupportedDisplaysKHR( + VkPhysicalDevice physicalDevice, + uint32_t planeIndex, + uint32_t* pDisplayCount, + VkDisplayKHR* pDisplays) +{ + struct loader_physical_device *phys_dev = + (struct loader_physical_device *)physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert( + icd->GetDisplayPlaneSupportedDisplaysKHR && + "loader: null GetDisplayPlaneSupportedDisplaysKHR ICD pointer"); + + return icd->GetDisplayPlaneSupportedDisplaysKHR( + phys_dev->phys_dev, planeIndex, pDisplayCount, pDisplays); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetDisplayModePropertiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModePropertiesKHR* pProperties) +{ + VkPhysicalDevice unwrapped_phys_dev = + loader_unwrap_physical_device(physicalDevice); + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetDisplayModePropertiesKHR( + unwrapped_phys_dev, display, pPropertyCount, pProperties); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetDisplayModePropertiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModePropertiesKHR* pProperties) +{ + struct loader_physical_device *phys_dev = + (struct loader_physical_device *)physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert( + icd->GetDisplayModePropertiesKHR && + "loader: null GetDisplayModePropertiesKHR ICD pointer"); + + return icd->GetDisplayModePropertiesKHR( + phys_dev->phys_dev, display, pPropertyCount, pProperties); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkCreateDisplayModeKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDisplayModeKHR* pMode) +{ + VkPhysicalDevice unwrapped_phys_dev = + loader_unwrap_physical_device(physicalDevice); + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->CreateDisplayModeKHR( + unwrapped_phys_dev, display, pCreateInfo, pAllocator, pMode); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL +terminator_CreateDisplayModeKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDisplayModeKHR* pMode) +{ + struct loader_physical_device *phys_dev = + (struct loader_physical_device *)physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert( + icd->CreateDisplayModeKHR && + "loader: null CreateDisplayModeKHR ICD pointer"); + + return icd->CreateDisplayModeKHR( + phys_dev->phys_dev, display, pCreateInfo, pAllocator, pMode); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetDisplayPlaneCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR* pCapabilities) +{ + VkPhysicalDevice unwrapped_phys_dev = + loader_unwrap_physical_device(physicalDevice); + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetDisplayPlaneCapabilitiesKHR( + unwrapped_phys_dev, mode, planeIndex, pCapabilities); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetDisplayPlaneCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR* pCapabilities) +{ + struct loader_physical_device *phys_dev = + (struct loader_physical_device *)physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert( + icd->GetDisplayPlaneCapabilitiesKHR && + "loader: null GetDisplayPlaneCapabilitiesKHR ICD pointer"); + + return icd->GetDisplayPlaneCapabilitiesKHR( + phys_dev->phys_dev, mode, planeIndex, pCapabilities); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkCreateDisplayPlaneSurfaceKHR( + VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(instance); + VkResult res; + + res = disp->CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, + pSurface); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL +terminator_CreateDisplayPlaneSurfaceKHR( + VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) +{ + struct loader_instance *inst = loader_get_instance(instance); + VkIcdSurfaceDisplay *pIcdSurface = NULL; + + pIcdSurface = loader_heap_alloc(inst, sizeof(VkIcdSurfaceDisplay), + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (pIcdSurface == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_DISPLAY; + pIcdSurface->displayMode = pCreateInfo->displayMode; + pIcdSurface->planeIndex = pCreateInfo->planeIndex; + pIcdSurface->planeStackIndex = pCreateInfo->planeStackIndex; + pIcdSurface->transform = pCreateInfo->transform; + pIcdSurface->globalAlpha = pCreateInfo->globalAlpha; + pIcdSurface->alphaMode = pCreateInfo->alphaMode; + pIcdSurface->imageExtent = pCreateInfo->imageExtent; + + *pSurface = (VkSurfaceKHR)pIcdSurface; + + return VK_SUCCESS; +} + bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr) { *addr = NULL; @@ -1103,5 +1372,50 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, } #endif // VK_USE_PLATFORM_ANDROID_KHR + /* + * Functions for VK_KHR_display extension: + */ + if (!strcmp("vkGetPhysicalDeviceDisplayPropertiesKHR", name)) { + *addr = ptr_instance->wsi_display_enabled + ? (void *)vkGetPhysicalDeviceDisplayPropertiesKHR + : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceDisplayPlanePropertiesKHR", name)) { + *addr = ptr_instance->wsi_display_enabled + ? (void *)vkGetPhysicalDeviceDisplayPlanePropertiesKHR + : NULL; + return true; + } + if (!strcmp("vkGetDisplayPlaneSupportedDisplaysKHR", name)) { + *addr = ptr_instance->wsi_display_enabled + ? (void *)vkGetDisplayPlaneSupportedDisplaysKHR + : NULL; + return true; + } + if (!strcmp("vkGetDisplayModePropertiesKHR", name)) { + *addr = ptr_instance->wsi_display_enabled + ? (void *)vkGetDisplayModePropertiesKHR + : NULL; + return true; + } + if (!strcmp("vkCreateDisplayModeKHR", name)) { + *addr = ptr_instance->wsi_display_enabled + ? (void *)vkCreateDisplayModeKHR + : NULL; + return true; + } + if (!strcmp("vkGetDisplayPlaneCapabilitiesKHR", name)) { + *addr = ptr_instance->wsi_display_enabled + ? (void *)vkGetDisplayPlaneCapabilitiesKHR + : NULL; + return true; + } + if (!strcmp("vkCreateDisplayPlaneSurfaceKHR", name)) { + *addr = ptr_instance->wsi_display_enabled + ? (void *)vkCreateDisplayPlaneSurfaceKHR + : NULL; + return true; + } return false; -} +}
\ No newline at end of file diff --git a/loader/wsi.h b/loader/wsi.h index aac9f99d..88540f5d 100644 --- a/loader/wsi.h +++ b/loader/wsi.h @@ -114,3 +114,44 @@ terminator_GetPhysicalDeviceXlibPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display *dpy, VisualID visualID); #endif +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetPhysicalDeviceDisplayPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPropertiesKHR* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlanePropertiesKHR* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetDisplayPlaneSupportedDisplaysKHR( + VkPhysicalDevice physicalDevice, + uint32_t planeIndex, + uint32_t* pDisplayCount, + VkDisplayKHR* pDisplays); +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetDisplayModePropertiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModePropertiesKHR* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL +terminator_CreateDisplayModeKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDisplayModeKHR* pMode); +VKAPI_ATTR VkResult VKAPI_CALL +terminator_GetDisplayPlaneCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR* pCapabilities); +VKAPI_ATTR VkResult VKAPI_CALL +terminator_CreateDisplayPlaneSurfaceKHR( + VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface);
\ No newline at end of file |
