• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (c) 2016-2018 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
5include::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
22intentionally left out or overlooked from the original Vulkan 1.0 release.
23
24The 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
41Input attachment specification allows an application to specify which aspect
42of a multi-aspect image (e.g. a combined depth stencil format) will be
43accessed via a code:subpassLoad operation.
44
45On some implementations there may: be a performance penalty if the
46implementation does not know (at flink:vkCreateRenderPass time) which
47aspect(s) of multi-aspect images can: be be accessed as input attachments.
48
49
50
51=== New Object Types
52
53None.
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  * slink:VkPointClippingBehaviorKHR
77  * slink: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
89None.
90
91=== Promotion to Vulkan 1.1
92
93All functionality in this extension is included in core Vulkan 1.1, with the
94KHR suffix omitted.
95The original type, enum and command names are still available as aliases of
96the core functionality.
97
98=== Input Attachment Specification Example
99
100Consider the case where a render pass has two subpasses and two attachments.
101
102Attachment 0 has the format ename:VK_FORMAT_D24_UNORM_S8_UINT, attachment 1
103has some color format.
104
105Subpass 0 writes to attachment 0, subpass 1 reads only the depth information
106from 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
1371) What is the default tessellation domain origin?
138
139*RESOLVED*: Vulkan 1.0 originally inadvertently documented a lower-left
140origin, but the conformance tests and all implementations implemented an
141upper-left origin.
142This extension adds a control to select between lower-left (for
143compatibility with OpenGL) and upper-left, and we retroactively fix
144unextended Vulkan to have a default of an upper-left origin.
145
146=== Version History
147
148 * Revision 1, 2017-04-28
149