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

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

=== Other Extension Metadata

*Last Modified Date*::
     2018-12-18
*IP Status*::
    No known IP claims.
*Contributors*::
  - Sandeep Shinde, NVIDIA
  - James Jones, NVIDIA
  - Daniel Koch, NVIDIA

=== Description

This extension extends slink:VkSurfaceCapabilities2KHR, providing
applications a way to query whether swapchains can: be created with the
ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR flag set.

Vulkan 1.1 added (optional) support for protect memory and protected
resources including buffers (ename:VK_BUFFER_CREATE_PROTECTED_BIT), images
(ename:VK_IMAGE_CREATE_PROTECTED_BIT), and swapchains
(ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR).
However, on implementations which support multiple windowing systems, not
all window systems may: be able to provide a protected display path.

This extension provides a way to query if a protected swapchain created for
a surface (and thus a specific windowing system) can: be displayed on
screen.
It extends the existing slink:VkSurfaceCapabilities2KHR structure with a new
slink:VkSurfaceProtectedCapabilitiesKHR structure from which the application
can: obtain information about support for protected swapchain creation
through flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.

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

=== Version History

 * Revision 1, 2018-12-18 (Sandeep Shinde, Daniel Koch)
   - Internal revisions.
