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.