diff options
| author | Ian Elliott <ianelliott@google.com> | 2015-11-24 15:39:10 -0700 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2015-12-01 10:18:24 -0700 |
| commit | 9d93b07f17aa0978b4feb12f52d1c4f7b2b56983 (patch) | |
| tree | 8862322c7b124364e39980d954b830895620faeb /loader | |
| parent | dbb4bc5aad38d35c9df77611c31d21b15d73c456 (diff) | |
| download | usermoji-9d93b07f17aa0978b4feb12f52d1c4f7b2b56983.tar.xz | |
loader: Add vkGetPhysicalDevice*PresentationSupportKHR()
These queries involve trampoline and terminator functions (the latter
of which calls the ICD's function).
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/loader.c | 11 | ||||
| -rw-r--r-- | loader/loader.h | 15 | ||||
| -rw-r--r-- | loader/table_ops.h | 15 | ||||
| -rw-r--r-- | loader/wsi.c | 211 | ||||
| -rw-r--r-- | loader/wsi.h | 32 |
5 files changed, 284 insertions, 0 deletions
diff --git a/loader/loader.c b/loader/loader.c index 2b8c2db3..59a4b961 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -113,18 +113,23 @@ const VkLayerInstanceDispatchTable instance_disp = { .GetPhysicalDeviceSurfacePresentModesKHR = loader_GetPhysicalDeviceSurfacePresentModesKHR, #ifdef VK_USE_PLATFORM_MIR_KHR .CreateMirSurfaceKHR = vkCreateMirSurfaceKHR, + .GetPhysicalDeviceMirPresentationSupportKHR = loader_GetPhysicalDeviceMirPresentationSupportKHR, #endif #ifdef VK_USE_PLATFORM_WAYLAND_KHR .CreateWaylandSurfaceKHR = vkCreateWaylandSurfaceKHR, + .GetPhysicalDeviceWaylandPresentationSupportKHR = loader_GetPhysicalDeviceWaylandPresentationSupportKHR, #endif #ifdef VK_USE_PLATFORM_WIN32_KHR .CreateWin32SurfaceKHR = vkCreateWin32SurfaceKHR, + .GetPhysicalDeviceWin32PresentationSupportKHR = loader_GetPhysicalDeviceWin32PresentationSupportKHR, #endif #ifdef VK_USE_PLATFORM_XCB_KHR .CreateXcbSurfaceKHR = vkCreateXcbSurfaceKHR, + .GetPhysicalDeviceXcbPresentationSupportKHR = loader_GetPhysicalDeviceXcbPresentationSupportKHR, #endif #ifdef VK_USE_PLATFORM_XLIB_KHR .CreateXlibSurfaceKHR = vkCreateXlibSurfaceKHR, + .GetPhysicalDeviceXlibPresentationSupportKHR = loader_GetPhysicalDeviceXlibPresentationSupportKHR, #endif .DbgCreateMsgCallback = loader_DbgCreateMsgCallback, .DbgDestroyMsgCallback = loader_DbgDestroyMsgCallback, @@ -1236,6 +1241,12 @@ static bool loader_icd_init_entrys(struct loader_icd *icd, LOOKUP_GIPA(GetPhysicalDeviceSurfaceCapabilitiesKHR, false); LOOKUP_GIPA(GetPhysicalDeviceSurfaceFormatsKHR, false); LOOKUP_GIPA(GetPhysicalDeviceSurfacePresentModesKHR, false); +#ifdef VK_USE_PLATFORM_WIN32_KHR + LOOKUP_GIPA(GetPhysicalDeviceWin32PresentationSupportKHR, false); +#endif +#ifdef VK_USE_PLATFORM_XCB_KHR + LOOKUP_GIPA(GetPhysicalDeviceXcbPresentationSupportKHR, false); +#endif #undef LOOKUP_GIPA diff --git a/loader/loader.h b/loader/loader.h index 86f3e22d..18766ef6 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -182,6 +182,21 @@ struct loader_icd { PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR; PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR; PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR; +#ifdef VK_USE_PLATFORM_WIN32_KHR + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR; +#endif +#ifdef VK_USE_PLATFORM_MIR_KHR + PFN_vkGetPhysicalDeviceMirPresentationSupportKHR GetPhysicalDeviceMirPresentvationSupportKHR; +#endif +#ifdef VK_USE_PLATFORM_WAYLAND_KHR + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR; +#endif +#ifdef VK_USE_PLATFORM_XCB_KHR + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR; +#endif +#ifdef VK_USE_PLATFORM_XLIB_KHR + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR; +#endif struct loader_icd *next; }; diff --git a/loader/table_ops.h b/loader/table_ops.h index b5327eb9..e5ad7efd 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -471,18 +471,23 @@ static inline void loader_init_instance_extension_dispatch_table( table->GetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR) gpa(inst, "vkGetPhysicalDeviceSurfacePresentModesKHR"); #ifdef VK_USE_PLATFORM_MIR_KHR table->CreateMirSurfaceKHR = (PFN_vkCreateMirSurfaceKHR) gpa(inst, "vkCreateMirSurfaceKHR"); + table->GetPhysicalDeviceMirPresentationSupportKHR = (PFN_vkGetPhysicalDeviceMirPresentationSupportKHR) gpa(inst, "vkGetPhysicalDeviceMirPresentationSupportKHR"); #endif #ifdef VK_USE_PLATFORM_WAYLAND_KHR table->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR) gpa(inst, "vkCreateWaylandSurfaceKHR"); + table->GetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR) gpa(inst, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); #endif #ifdef VK_USE_PLATFORM_WIN32_KHR table->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR) gpa(inst, "vkCreateWin32SurfaceKHR"); + table->GetPhysicalDeviceWin32PresentationSupportKHR = (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR) gpa(inst, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); #endif #ifdef VK_USE_PLATFORM_XCB_KHR table->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR) gpa(inst, "vkCreateXcbSurfaceKHR"); + table->GetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR) gpa(inst, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); #endif #ifdef VK_USE_PLATFORM_XLIB_KHR table->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR) gpa(inst, "vkCreateXlibSurfaceKHR"); + table->GetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR) gpa(inst, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); #endif } @@ -531,22 +536,32 @@ static inline void *loader_lookup_instance_dispatch_table( #ifdef VK_USE_PLATFORM_MIR_KHR if (!strcmp(name, "CreateMirSurfaceKHR")) return (void *) table->CreateMirSurfaceKHR; + if (!strcmp(name, "GetPhysicalDeviceMirPresentationSupportKHR")) + return (void *) table->GetPhysicalDeviceMirPresentationSupportKHR; #endif #ifdef VK_USE_PLATFORM_WAYLAND_KHR if (!strcmp(name, "CreateWaylandSurfaceKHR")) return (void *) table->CreateWaylandSurfaceKHR; + if (!strcmp(name, "GetPhysicalDeviceWaylandPresentationSupportKHR")) + return (void *) table->GetPhysicalDeviceWaylandPresentationSupportKHR; #endif #ifdef VK_USE_PLATFORM_WIN32_KHR if (!strcmp(name, "CreateWin32SurfaceKHR")) return (void *) table->CreateWin32SurfaceKHR; + if (!strcmp(name, "GetPhysicalDeviceWin32PresentationSupportKHR")) + return (void *) table->GetPhysicalDeviceWin32PresentationSupportKHR; #endif #ifdef VK_USE_PLATFORM_XCB_KHR if (!strcmp(name, "CreateXcbSurfaceKHR")) return (void *) table->CreateXcbSurfaceKHR; + if (!strcmp(name, "GetPhysicalDeviceXcbPresentationSupportKHR")) + return (void *) table->GetPhysicalDeviceXcbPresentationSupportKHR; #endif #ifdef VK_USE_PLATFORM_XLIB_KHR if (!strcmp(name, "CreateXlibSurfaceKHR")) return (void *) table->CreateXlibSurfaceKHR; + if (!strcmp(name, "GetPhysicalDeviceXlibPresentationSupportKHR")) + return (void *) table->GetPhysicalDeviceXlibPresentationSupportKHR; #endif if (!strcmp(name, "DbgCreateMsgCallback")) return (void *) table->DbgCreateMsgCallback; diff --git a/loader/wsi.c b/loader/wsi.c index c1cbc326..c1cd2e57 100644 --- a/loader/wsi.c +++ b/loader/wsi.c @@ -496,6 +496,40 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( return VK_SUCCESS; } + +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceWin32PresentationSupportKHR + */ +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkBool32 res = disp->GetPhysicalDeviceWin32PresentationSupportKHR( + physicalDevice, + queueFamilyIndex); + return res; +} + + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceWin32PresentationSupportKHR + */ +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceWin32PresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(icd->GetPhysicalDeviceXcbPresentationSupportKHR && "loader: null GetPhysicalDeviceWin32PresentationSupportKHR ICD pointer"); + + return icd->GetPhysicalDeviceWin32PresentationSupportKHR(phys_dev->phys_dev, + queueFamilyIndex); +} #endif/ VK_USE_PLATFORM_WIN32_KHR #else // _WIN32 (i.e. Linux) @@ -535,6 +569,44 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR( return VK_SUCCESS; } + +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceMirPresentationSupportKHR + */ +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + MirConnection* connection) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkBool32 res = disp->GetPhysicalDeviceMirPresentationSupportKHR( + physicalDevice, + queueFamilyIndex, + connection); + return res; +} + + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceMirPresentationSupportKHR + */ +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceMirPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + MirConnection* connection) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(icd->GetPhysicalDeviceMirPresentationSupportKHR && "loader: null GetPhysicalDeviceMirPresentationSupportKHR ICD pointer"); + + return icd->GetPhysicalDeviceMirPresentationSupportKHR(phys_dev->phys_dev, + queueFamilyIndex, + connection); +} #endif // VK_USE_PLATFORM_MIR_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR @@ -572,6 +644,44 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( return VK_SUCCESS; } + +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceWaylandPresentationSupportKHR + */ +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display* display) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkBool32 res = disp->GetPhysicalDeviceWaylandPresentationSupportKHR( + physicalDevice, + queueFamilyIndex, + display); + return res; +} + + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceWaylandPresentationSupportKHR + */ +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceWaylandPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display* display) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(icd->GetPhysicalDeviceWaylandPresentationSupportKHR && "loader: null GetPhysicalDeviceWaylandPresentationSupportKHR ICD pointer"); + + return icd->GetPhysicalDeviceWaylandPresentationSupportKHR(phys_dev->phys_dev, + queueFamilyIndex, + display); +} #endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_XCB_KHR @@ -609,6 +719,48 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( return VK_SUCCESS; } + +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceXcbPresentationSupportKHR + */ +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t* connection, + xcb_visualid_t visual_id) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkBool32 res = disp->GetPhysicalDeviceXcbPresentationSupportKHR( + physicalDevice, + queueFamilyIndex, + connection, + visual_id); + return res; +} + + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceXcbPresentationSupportKHR + */ +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXcbPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t* connection, + xcb_visualid_t visual_id) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(icd->GetPhysicalDeviceXcbPresentationSupportKHR && "loader: null GetPhysicalDeviceXcbPresentationSupportKHR ICD pointer"); + + return icd->GetPhysicalDeviceXcbPresentationSupportKHR(phys_dev->phys_dev, + queueFamilyIndex, + connection, + visual_id); +} #endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_XLIB_KHR @@ -646,6 +798,48 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( return VK_SUCCESS; } + +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceXlibPresentationSupportKHR + */ +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + Display* dpy, + VisualID visualID) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkBool32 res = disp->GetPhysicalDeviceXlibPresentationSupportKHR( + physicalDevice, + queueFamilyIndex, + dpy, + visualID); + return res; +} + + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceXlibPresentationSupportKHR + */ +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXlibPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + Display* dpy, + VisualID visualID) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(icd->GetPhysicalDeviceXlibPresentationSupportKHR && "loader: null GetPhysicalDeviceXlibPresentationSupportKHR ICD pointer"); + + return icd->GetPhysicalDeviceXlibPresentationSupportKHR(phys_dev->phys_dev, + queueFamilyIndex, + dpy, + visualID); +} #endif // VK_USE_PLATFORM_XLIB_KHR #endif // _WIN32 @@ -718,6 +912,10 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, *addr = ptr_instance->wsi_win32_surface_enabled ? (void *) vkCreateWin32SurfaceKHR : NULL; return true; } + if (!strcmp("vkGetPhysicalDeviceWin32PresentationSupportKHR", name)) { + *addr = ptr_instance->wsi_win32_surface_enabled ? (void *) vkGetPhysicalDeviceWin32PresentationSupportKHR : NULL; + return true; + } #endif // VK_USE_PLATFORM_WIN32_KHR #else // _WIN32 (i.e. Linux) #ifdef VK_USE_PLATFORM_MIR_KHR @@ -728,6 +926,9 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, *addr = ptr_instance->wsi_mir_surface_enabled ? (void *) vkCreateMirSurfaceKHR : NULL; return true; } + if (!strcmp("vkGetPhysicalDeviceMirPresentationSupportKHR", name)) { + *addr = ptr_instance->wsi_mir_surface_enabled ? (void *) vkGetPhysicalDeviceMirPresentationSupportKHR : NULL; + return true; #endif // VK_USE_PLATFORM_MIR_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR /* @@ -737,6 +938,9 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, *addr = ptr_instance->wsi_wayland_surface_enabled ? (void *) vkCreateWaylandSurfaceKHR : NULL; return true; } + if (!strcmp("vkGetPhysicalDeviceWaylandPresentationSupportKHR", name)) { + *addr = ptr_instance->wsi_wayland_surface_enabled ? (void *) vkGetPhysicalDeviceWaylandPresentationSupportKHR : NULL; + return true; #endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_XCB_KHR /* @@ -746,6 +950,10 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, *addr = ptr_instance->wsi_xcb_surface_enabled ? (void *) vkCreateXcbSurfaceKHR : NULL; return true; } + if (!strcmp("vkGetPhysicalDeviceXcbPresentationSupportKHR", name)) { + *addr = ptr_instance->wsi_xcb_surface_enabled ? (void *) vkGetPhysicalDeviceXcbPresentationSupportKHR : NULL; + return true; + } #endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_XLIB_KHR /* @@ -755,6 +963,9 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, *addr = ptr_instance->wsi_xlib_surface_enabled ? (void *) vkCreateXlibSurfaceKHR : NULL; return true; } + if (!strcmp("vkGetPhysicalDeviceXlibPresentationSupportKHR", name)) { + *addr = ptr_instance->wsi_xlib_surface_enabled ? (void *) vkGetPhysicalDeviceXlibPresentationSupportKHR : NULL; + return true; #endif // VK_USE_PLATFORM_XLIB_KHR #endif // _WIN32 diff --git a/loader/wsi.h b/loader/wsi.h index db4c0738..87f870a8 100644 --- a/loader/wsi.h +++ b/loader/wsi.h @@ -60,3 +60,35 @@ VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfacePresentModesKHR( VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); + +#ifdef VK_USE_PLATFORM_WIN32_KHR +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceWin32PresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex); +#endif +#ifdef VK_USE_PLATFORM_MIR_KHR +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceMirPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + MirConnection* connection); +#endif +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceWaylandPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display* display); +#endif +#ifdef VK_USE_PLATFORM_XCB_KHR +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXcbPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t* connection, + xcb_visualid_t visual_id); +#endif +#ifdef VK_USE_PLATFORM_XLIB_KHR +VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXlibPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + Display* dpy, + VisualID visualID); +#endif |
