// Copyright 2017-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_KHR_get_display_properties2.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2017-02-21
*IP Status*::
    No known IP claims.
*Contributors*::
  - Ian Elliott, Google
  - James Jones, NVIDIA

=== Description

This extension provides new entry points to query device display properties
and capabilities in a way that can be easily extended by other extensions,
without introducing any further entry points.
This extension can be considered the `apiext:VK_KHR_display` equivalent of
the `apiext:VK_KHR_get_physical_device_properties2` extension.

include::{generated}/interfaces/VK_KHR_get_display_properties2.txt[]

=== Issues

1) What should this extension be named?

*RESOLVED*: `VK_KHR_get_display_properties2`.
Other alternatives:

  * `VK_KHR_display2`
  * One extension, combined with `VK_KHR_surface_capabilites2`.

2) Should extensible input structs be added for these new functions:

*RESOLVED*:

  * flink:vkGetPhysicalDeviceDisplayProperties2KHR: No.
    The only current input is a slink:VkPhysicalDevice.
    Other inputs would not make sense.
  * flink:vkGetPhysicalDeviceDisplayPlaneProperties2KHR: No.
    The only current input is a slink:VkPhysicalDevice.
    Other inputs wouldn't make sense.
  * flink:vkGetDisplayModeProperties2KHR: No.
    The only current inputs are a slink:VkPhysicalDevice and a
    slink:VkDisplayModeKHR.
    Other inputs wouldn't make sense.

3) Should additional display query functions be extended?

*RESOLVED*:

  * flink:vkGetDisplayPlaneSupportedDisplaysKHR: No.
    Extensions should instead extend
    flink:vkGetDisplayPlaneCapabilitiesKHR().

=== Version History

 * Revision 1, 2017-02-21 (James Jones)
   - Initial draft.
