Not all physical devices will include WSI support. Within a physical device, not all queue families will support presentation. WSI support and compatibility can be determined in a platform-neutral manner (which determines support for presentation to a particular surface object) and additionally may be determined in platform-specific manners (which determine support for presentation on the specified physical device but do not guarantee support for presentation to a particular surface object).
To determine whether a queue family of a physical device supports presentation to a given surface, call:
VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
VkSurfaceKHR surface,
VkBool32* pSupported);
physicalDevice is the physical device.
queueFamilyIndex is the queue family.
surface is the surface.
pSupported is a pointer to a VkBool32, which is set to
VK_TRUE to indicate support, and VK_FALSE otherwise.
On Android, all physical devices and queue families must be capable of presentation with any native window. As a result there is no Android-specific query for these capabilities.
To determine whether a queue family of a physical device supports presentation to the Mir compositor, call:
VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
MirConnection* connection);
physicalDevice is the physical device.
queueFamilyIndex is the queue family index.
connection is a pointer to the MirConnection, and identifies
the desired Mir compositor.
This platform-specific function can be called prior to creating a surface.
To determine whether a queue family of a physical device supports presentation to a Wayland compositor, call:
VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
struct wl_display* display);
physicalDevice is the physical device.
queueFamilyIndex is the queue family index.
display is a pointer to the wl_display associated with a
Wayland compositor.
This platform-specific function can be called prior to creating a surface.
To determine whether a queue family of a physical device supports presentation to the Microsoft Windows desktop, call:
VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex);
physicalDevice is the physical device.
queueFamilyIndex is the queue family index.
This platform-specific function can be called prior to creating a surface.
To determine whether a queue family of a physical device supports presentation to an X11 server, using the XCB client-side library, call:
VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
xcb_connection_t* connection,
xcb_visualid_t visual_id);
physicalDevice is the physical device.
queueFamilyIndex is the queue family index.
connection is a pointer to an xcb_connection_t to the X
server.
visual_id is an X11 visual (xcb_visualid_t).
This platform-specific function can be called prior to creating a surface.
To determine whether a queue family of a physical device supports presentation to an X11 server, using the Xlib client-side library, call:
VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
Display* dpy,
VisualID visualID);
physicalDevice is the physical device.
queueFamilyIndex is the queue family index.
dpy is a pointer to an Xlib Display connection to the server.
visualId is an X11 visual (VisualID).
This platform-specific function can be called prior to creating a surface.