[[VK_NN_vi_surface]]
== VK_NN_vi_surface

*Name String*::
    +VK_NN_vi_surface+
*Extension Type*::
    Instance extension
*Registered Extension Number*::
    63
*Last Modified Date*::
    2016-12-2
*Revision*::
    1
*IP Status*::
    No known IP claims.
*Dependencies*::
  - This extension is written against version 1.0 of the Vulkan API.
  - Requires +VK_KHR_surface+.
*Contributors*::
  - Mathias Heyer, NVIDIA
  - Michael Chock, NVIDIA
  - Yasuhiro Yoshioka, Nintendo
  - Daniel Koch, NVIDIA
*Contacts*::
  - Mathias Heyer, NVIDIA

The +VK_NN_vi_surface+ extension is an instance extension.
It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
the +VK_KHR_surface+ extension) associated with an
code:nn::code:vi::code:Layer.

=== New Object Types

None

=== New Enum Constants

  * Extending ename:VkStructureType:
  ** ename:VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN

=== New Enums

None

=== New Structures

  * slink:VkViSurfaceCreateInfoNN

=== New Functions

  * flink:vkCreateViSurfaceNN

=== Issues

1) Does VI need a way to query for compatibility between a particular
physical device (and queue family?) and a specific VI display?

*RESOLVED*: No.
It is currently always assumed that the device and display will always be
compatible.

2) slink:VkViSurfaceCreateInfoNN::pname:pWindow is intended to store an
code:nn::code:vi::code:NativeWindowHandle, but its declared type is a bare
code:void* to store the window handle.
Why the discrepancy?

*RESOLVED*: It is for C compatibility.
The definition for the VI native window handle type is defined inside the
nn::vi C++ namespace.
This prevents its use in C source files.
nn::vi::NativeWindowHandle is always defined to be void*, so this
extension uses void* to match.

=== Version History

 * Revision 1, 2016-12-2 (Michael Chock)
   - Initial draft.
