/ appendices / VK_KHR_maintenance2.txt
VK_KHR_maintenance2.txt
  1  // Copyright (c) 2016-2019 Khronos Group. This work is licensed under a
  2  // Creative Commons Attribution 4.0 International License; see
  3  // http://creativecommons.org/licenses/by/4.0/
  4  
  5  include::meta/VK_KHR_maintenance2.txt[]
  6  
  7  *Last Modified Date*::
  8      2017-09-05
  9  *Interactions and External Dependencies*::
 10    - Promoted to Vulkan 1.1 Core
 11  *Contributors*::
 12    - Michael Worcester, Imagination Technologies
 13    - Stuart Smith, Imagination Technologies
 14    - Jeff Bolz, NVIDIA
 15    - Daniel Koch, NVIDIA
 16    - Jan-Harald Fredriksen, ARM
 17    - Daniel Rakos, AMD
 18    - Neil Henning, Codeplay
 19    - Piers Daniell, NVIDIA
 20  
 21  `VK_KHR_maintenance2` adds a collection of minor features that were
 22  intentionally left out or overlooked from the original Vulkan 1.0 release.
 23  
 24  The new features are as follows:
 25  
 26    * Allow the application to specify which aspect of an input attachment
 27      might be read for a given subpass.
 28    * Allow implementations to express the clipping behavior of points.
 29    * Allow creating images with usage flags that may not be supported for the
 30      base image's format, but are supported for image views of the image that
 31      have a different but compatible format.
 32    * Allow creating uncompressed image views of compressed images.
 33    * Allow the application to select between an upper-left and lower-left
 34      origin for the tessellation domain space.
 35    * Adds two new image layouts for depth stencil images to allow either the
 36      depth or stencil aspect to be read-only while the other aspect is
 37      writable.
 38  
 39  === Input Attachment Specification
 40  
 41  Input attachment specification allows an application to specify which aspect
 42  of a multi-aspect image (e.g. a combined depth stencil format) will be
 43  accessed via a code:subpassLoad operation.
 44  
 45  On some implementations there may: be a performance penalty if the
 46  implementation does not know (at flink:vkCreateRenderPass time) which
 47  aspect(s) of multi-aspect images can: be accessed as input attachments.
 48  
 49  
 50  
 51  === New Object Types
 52  
 53  None.
 54  
 55  === New Enum Constants
 56  
 57    * Extending elink:VkStructureType:
 58    ** ename:VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR
 59    ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR
 60    ** ename:VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR
 61    ** ename:VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR
 62  
 63    * Extending elink:VkImageCreateFlagBits:
 64    ** ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR
 65    ** ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR
 66  
 67    * Extending elink:VkImageLayout
 68    ** ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR
 69    ** ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR
 70  
 71    * ename:VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR
 72    * ename:VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR
 73  
 74  === New Enums
 75  
 76    * elink:VkPointClippingBehaviorKHR
 77    * elink:VkTessellationDomainOriginKHR
 78  
 79  === New Structures
 80  
 81    * slink:VkPhysicalDevicePointClippingPropertiesKHR
 82    * slink:VkRenderPassInputAttachmentAspectCreateInfoKHR
 83    * slink:VkInputAttachmentAspectReferenceKHR
 84    * slink:VkImageViewUsageCreateInfoKHR
 85    * slink:VkPipelineTessellationDomainOriginStateCreateInfoKHR
 86  
 87  === New Functions
 88  
 89  None.
 90  
 91  === Promotion to Vulkan 1.1
 92  
 93  All functionality in this extension is included in core Vulkan 1.1, with the
 94  KHR suffix omitted.
 95  The original type, enum and command names are still available as aliases of
 96  the core functionality.
 97  
 98  === Input Attachment Specification Example
 99  
100  Consider the case where a render pass has two subpasses and two attachments.
101  
102  Attachment 0 has the format ename:VK_FORMAT_D24_UNORM_S8_UINT, attachment 1
103  has some color format.
104  
105  Subpass 0 writes to attachment 0, subpass 1 reads only the depth information
106  from attachment 0 (using inputAttachmentRead) and writes to attachment 1.
107  
108  [source,c++]
109  ----------------------------------------
110      VkInputAttachmentAspectReferenceKHR references[] = {
111          {
112              .subpass = 1,
113              .inputAttachmentIndex = 0,
114              .aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT
115          }
116      };
117  
118      VkRenderPassInputAttachmentAspectCreateInfoKHR specifyAspects = {
119          .sType = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR,
120          .pNext = NULL,
121          .aspectReferenceCount = 1,
122          .pAspectReferences = references
123      };
124  
125  
126      VkRenderPassCreateInfo createInfo = {
127          ...
128          .pNext = &specifyAspects,
129          ...
130      }
131  
132      vkCreateRenderPass(...);
133  ----------------------------------------
134  
135  === Issues
136  
137  1) What is the default tessellation domain origin?
138  
139  *RESOLVED*: Vulkan 1.0 originally inadvertently documented a lower-left
140  origin, but the conformance tests and all implementations implemented an
141  upper-left origin.
142  This extension adds a control to select between lower-left (for
143  compatibility with OpenGL) and upper-left, and we retroactively fix
144  unextended Vulkan to have a default of an upper-left origin.
145  
146  === Version History
147  
148   * Revision 1, 2017-04-28