Vulkan-Docs/doc/specs/vulkan/appendices/VK_KHR_win32_surface.txt
Jon Leech df88ded281 Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.

Github Issues:

  * Document that <<queries-timestamps, Timestamp Queries>> can only be
    meaningfully compared when they are written from the same queue (public
    issue 216).
  * Document that the `<extension>` tag `type` attribute is required for
    non-disabled extensions (derived from, but does not close public issue
    354).
  * Clean up registry schema length attribute descriptions to be consistent
    and correct (public issue 555).

Internal Issues:

  * Replace as much of the hand-written extension appendix metadata as
    possible with asciidoc includes generated from corresponding attributes
    of +vk.xml+, and enhance the style guide to match. This avoids
    inconsistencies between +vk.xml+ and the appendices, and produces a more
    uniform style (internal issue 137).
  * Remove the generated extDependency.{py,sh} files from the tree and
    create them dynamically on demand instead, reducing merge conflicts
    (internal issue 713).
  * Add a prototype tool for generating in-place difference markup for
    sections guarded by asciidoc conditionals, and new syntax for open
    blocks to support it (internal issue 833).
  * Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
    types to the same physical device in the
    slink:VkPhysicalDeviceIDPropertiesKHR,
    flink:VkImportMemoryWin32HandleInfoKHR,
    slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
    slink:VkImportSemaphoreWin32HandleInfoKHR,
    slink:VkImportSemaphoreFdInfoKHR
    <<external-memory-handle-types-compatibility, External memory handle
    types compatibility>>, <<external-semaphore-handle-types-compatibility,
    External semaphore handle types compatibility>>, and
    <<external-fence-handle-types-compatibility, External fence handle types
    compatibility>> sections (internal issue 956).

Other Issues:

  * Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
    is an interaction, but not a strict dependency), and add a new
    `extension` attribute to the `<require` XML tag to allow classifying a
    subset of interfaces of an extension as requiring another extension.
    Update the registry schema and documentation accordingly.

New Extensions:

  * `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
    GLSL extension)
  * `VK_EXT_sample_locations`
  * `VK_EXT_validation_cache`
2017-09-04 03:06:55 -07:00

143 lines
4.8 KiB
Plaintext

// Copyright (c) 2014-2017 Khronos Group. This work is licensed under a
// Creative Commons Attribution 4.0 International License; see
// http://creativecommons.org/licenses/by/4.0/
include::meta/VK_KHR_win32_surface.txt[]
*Last Modified Date*::
2017-04-24
*IP Status*::
No known IP claims.
*Contributors*::
- Patrick Doane, Blizzard
- Jason Ekstrand, Intel
- Ian Elliott, LunarG
- Courtney Goeltzenleuchter, LunarG
- Jesse Hall, Google
- James Jones, NVIDIA
- Antoine Labour, Google
- Jon Leech, Khronos
- David Mao, AMD
- Norbert Nopper, Freescale
- Alon Or-bach, Samsung
- Daniel Rakos, AMD
- Graham Sellers, AMD
- Ray Smith, ARM
- Jeff Vigil, Qualcomm
- Chia-I Wu, LunarG
The +VK_KHR_win32_surface+ extension is an instance extension.
It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
the +VK_KHR_surface+ extension) that refers to a Win32 code:HWND, as well as
a query to determine support for rendering to the windows desktop.
=== New Object Types
None
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR
=== New Enums
None
=== New Structures
* slink:VkWin32SurfaceCreateInfoKHR
=== New Functions
* flink:vkCreateWin32SurfaceKHR
* flink:vkGetPhysicalDeviceWin32PresentationSupportKHR
=== Issues
1) Does Win32 need a way to query for compatibility between a particular
physical device and a specific screen? Compatibility between a physical
device and a window generally only depends on what screen the window is on.
However, there is not an obvious way to identify a screen without already
having a window on the screen.
*RESOLVED*: No.
While it may be useful, there is not a clear way to do this on Win32.
However, a method was added to query support for presenting to the windows
desktop as a whole.
2) If a native window object (HWND) is used by one graphics API, and then is
later used by a different graphics API (one of which is Vulkan), can these
uses interfere with each other?
*RESOLVED*: Yes.
Uses of a window object by multiple graphics APIs results in undefined
behavior.
Such behavior may succeed when using one Vulkan implementation but fail when
using a different Vulkan implementation.
Potential failures include:
* Creating then destroying a flip presentation model DXGI swapchain on a
window object can prevent flink:vkCreateSwapchainKHR from succeeding on
the same window object.
* Creating then destroying a slink:VkSwapchainKHR on a window object can
prevent creation of a bitblt model DXGI swapchain on the same window
object.
* Creating then destroying a slink:VkSwapchainKHR on a window object can
effectively SetPixelFormat to a different format than the format chosen
by an OpenGL application.
* Creating then destroying a slink:VkSwapchainKHR on a window object on one
VkPhysicalDevice can prevent flink:vkCreateSwapchainKHR from succeeding
on the same window object, but on a different VkPhysicalDevice that is
associated with a different Vulkan ICD.
In all cases the problem can be worked around by creating a new window
object.
Technical details include:
* Creating a DXGI swapchain over a window object can alter the object for
the remainder of its lifetime.
The alteration persists even after the DXGI swapchain has been destroyed.
This alteration can make it impossible for a conformant Vulkan
implementation to create a slink:VkSwapchainKHR over the same window
object.
Mention of this alteration can be found in the remarks section of the
MSDN documentation for DXGI_SWAP_EFFECT.
* Calling GDI's SetPixelFormat (needed by OpenGL's WGL layer) on a window
object alters the object for the remainder of its lifetime.
The MSDN documentation for SetPixelFormat explains that a window object's
pixel format can be set only one time.
* Creating a slink:VkSwapchainKHR over a window object can alter the object
for the remaining life of its lifetime.
Either of the above alterations may occur as a side-effect of
slink:VkSwapchainKHR.
=== Version History
* Revision 1, 2015-09-23 (Jesse Hall)
- Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
(later renamed VK_EXT_KHR_surface).
* Revision 2, 2015-10-02 (James Jones)
- Added presentation support query for win32 desktops.
* Revision 3, 2015-10-26 (Ian Elliott)
- Renamed from VK_EXT_KHR_win32_surface to VK_KHR_win32_surface.
* Revision 4, 2015-11-03 (Daniel Rakos)
- Added allocation callbacks to vkCreateWin32SurfaceKHR.
* Revision 5, 2015-11-28 (Daniel Rakos)
- Updated the surface create function to take a pCreateInfo structure.
* Revision 6, 2017-04-24 (Jeff Juliano)
- Add issue 2 addressing reuse of a native window object in a different
Graphics API, or by a different Vulkan ICD.