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