// Copyright (c) 2020 NVIDIA Corporation // // SPDX-License-Identifier: CC-BY-4.0 include::{generated}/meta/{refprefix}VK_NV_acquire_winrt_display.txt[] === Other Extension Metadata *Last Modified Date*:: 2020-09-29 *IP Status*:: No known IP claims. *Contributors*:: - Jeff Juliano, NVIDIA === Description This extension allows an application to take exclusive control of a display on Windows 10 provided that the display is not already controlled by a compositor. Examples of compositors include the Windows desktop compositor, other applications using this Vulkan extension, and applications that https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaymanager.tryacquiretarget["`Acquire`"] a https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`DisplayTarget`"] using a https://docs.microsoft.com/en-us/uwp/api/["`WinRT`"] command such as https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaymanager.tryacquiretarget["`winrt::Windows::Devices::Display::Core::DisplayManager.TryAcquireTarget()`"]. When control is acquired the application has exclusive access to the display until control is released or the application terminates. An application's attempt to acquire is denied if a different application has already acquired the display. include::{generated}/interfaces/VK_NV_acquire_winrt_display.txt[] === Issues 1) What should the platform substring be for this extension: *RESOLVED*: The platform substring is "`Winrt`". The substring "`Winrt`" matches the fact that the OS API exposing the acquire and release functionality is called "`WinRT`". The substring "`Win32`" is wrong because the related "`WinRT`" API is explicitly *not* a "`Win32`" API. "`WinRT`" is a competing API family to the "`Win32`" API family. The substring "`Windows`" is suboptimal because there could be more than one relevant API on the Windows platform. There is preference to use the more-specific substring "`Winrt`". 2) Should flink:vkAcquireWinrtDisplayNV take a winRT DisplayTarget, or a Vulkan display handle as input? *RESOLVED*: A Vulkan display handle. This matches the design of flink:vkAcquireXlibDisplayEXT. 3) Should the acquire command be platform-independent named "`vkAcquireDisplayNV`", or platform-specific named "`vkAcquireWinrtDisplayNV`"? *RESOLVED*: Add a platform-specific command. The inputs to the Acquire command are all Vulkan types. None are WinRT types. This opens the possibility of the winrt extension defining a platform-independent acquire command. The X11 acquire command does need to accept a platform-specific parameter. This could be handled by adding to a platform-independent acquire command a params struct to which platform-dependent types can be chained by pname:pNext pointer. The prevailing opinion is that it would be odd to create a second platform-independent function that is used on the Windows 10 platform, but that is not used for the X11 platform. Since a Windows 10 platform-specific command is needed anyway for converting between vkDisplayKHR and platform-native handles, opinion was to create a platform-specific acquire function. 4) Should the flink:vkGetWinrtDisplayNV parameter identifying a display be named "`deviceRelativeId`" or "`adapterRelativeId`"? *RESOLVED*: The WinRT name is "`AdapterRelativeId`". The name "`adapter`" is the Windows analog to a Vulkan "`physical device`". Vulkan already has precedent to use the name sname:deviceLUID for the concept that Windows APIs call "`AdapterLuid`". Keeping form with this precedent, the name "`deviceRelativeId`" is chosen. 5) Does flink:vkAcquireWinrtDisplayNV cause the Windows desktop compositor to release a display? *RESOLVED*: No. flink:vkAcquireWinrtDisplayNV does not itself cause the Windows desktop compositor to release a display. This action must be performed outside of Vulkan. Beginning with Windows 10 version 2004 it is possible to cause the Windows desktop compositor to release a display by using the "`Advanced display settings`" sub-page of the "`Display settings`" control panel. See https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors 6) Where can one find additional information about custom compositors for Windows 10? *RESOLVED*: Relevant references are as follows. According to Microsoft's documentation on https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors-compositor["building a custom compositor"], the ability to write a custom compositor is not a replacement for a fullscreen desktop window. The feature is for writing compositor apps that drive specialized hardware. Only certain editions of Windows 10 support custom compositors, https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors#windows-10-version-2004["documented here"]. The product type can be queried from Windows 10. See https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getproductinfo === Version History * Revision 1, 2020-09-29 (Jeff Juliano) - Initial draft