1e5c31af7Sopenharmony_ci// Copyright 2021-2024 The Khronos Group Inc. 2e5c31af7Sopenharmony_ci// 3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0 4e5c31af7Sopenharmony_ci 5e5c31af7Sopenharmony_ci= VK_KHR_maintenance5 6e5c31af7Sopenharmony_ci:toc: left 7e5c31af7Sopenharmony_ci:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/ 8e5c31af7Sopenharmony_ci:sectnums: 9e5c31af7Sopenharmony_ci 10e5c31af7Sopenharmony_ciThis proposal details and addresses the issues solved by the `VK_KHR_maintenance5` extension. 11e5c31af7Sopenharmony_ci 12e5c31af7Sopenharmony_ci== Problem Statement 13e5c31af7Sopenharmony_ci 14e5c31af7Sopenharmony_ciOver time, a collection of minor features, none of which would warrant an entire extension of their own, requires the creation of a maintenance extension. 15e5c31af7Sopenharmony_ci 16e5c31af7Sopenharmony_ciThe following is a list of issues considered in this proposal: 17e5c31af7Sopenharmony_ci 18e5c31af7Sopenharmony_ci * Allow PointSize to take a default value of 1.0 when it is not written, rather than being undefined 19e5c31af7Sopenharmony_ci * A device property to indicate whether non-strict lines use parallelogram or Bresenham. 20e5c31af7Sopenharmony_ci * Add a A1B5G5R5 format (corresponding to `GL_UNSIGNED_SHORT_1_5_5_5_REV`) 21e5c31af7Sopenharmony_ci * Allow vkGetPhysicalDeviceFormatProperties with unknown formats 22e5c31af7Sopenharmony_ci * Add a vkGetRenderAreaGranularity equivalent for dynamic rendering 23e5c31af7Sopenharmony_ci * Require vkGetDeviceProcAddr to return NULL for functions beyond app version 24e5c31af7Sopenharmony_ci * Index buffer range specification 25e5c31af7Sopenharmony_ci * Add a property to indicate multisample coverage operations are performed after sample counting in EarlyFragmentTests mode 26e5c31af7Sopenharmony_ci * Add VK_REMAINING_ARRAY_LAYERS support to VkImageSubresourceLayers.layerCount 27e5c31af7Sopenharmony_ci * Allow VK_WHOLE_SIZE for pSizes argument of vkCmdBindVertexBuffers2 28e5c31af7Sopenharmony_ci * Add support for a new vkGetDeviceImageSubresourceLayout to allow a vkGetImageSubresourceLayout query without having to create a dummy image 29e5c31af7Sopenharmony_ci * Ensure we have a reliable/deterministic way to detect device loss 30e5c31af7Sopenharmony_ci * We are running out of spare bits in various FlagBits 31e5c31af7Sopenharmony_ci * Add a property to indicate sample mask test operations are performed after sample counting in EarlyFragmentTests mode 32e5c31af7Sopenharmony_ci * Deprecate shader modules to avoid management of that object in the API 33e5c31af7Sopenharmony_ci * Add a A8_UNORM format 34e5c31af7Sopenharmony_ci * Relax VkBufferView creation requirements 35e5c31af7Sopenharmony_ci * Appearance when using VK_POLYGON_MODE_POINT together with PointSize 36e5c31af7Sopenharmony_ci * Enabling copies between images of any dimensionality 37e5c31af7Sopenharmony_ci * Need a way to indicate when SWIZZLE_ONE has defined results when used with depth-stencil formats 38e5c31af7Sopenharmony_ci 39e5c31af7Sopenharmony_ci 40e5c31af7Sopenharmony_ci== Issue Details and Solution Space 41e5c31af7Sopenharmony_ci 42e5c31af7Sopenharmony_ci=== Default PointSize of 1.0 43e5c31af7Sopenharmony_ci 44e5c31af7Sopenharmony_ciIt is unclear in the specification if the `PointSize` builtin is required to be written, and if it is not, what the default size is. 45e5c31af7Sopenharmony_ci 46e5c31af7Sopenharmony_ci=== Indication of parallelogram or Bresenham non-strict lines 47e5c31af7Sopenharmony_ci 48e5c31af7Sopenharmony_ciSome applications need to know whether the rasterization algorithm used for non-strict lines is parallelogram or Bresenham style. 49e5c31af7Sopenharmony_ci 50e5c31af7Sopenharmony_ci=== A1B5G5R5 format 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ciThere is a request to add a format equivalent to GL_UNSIGNED_SHORT_1_5_5_5_REV for emulation. 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_ci=== vkGetPhysicalDeviceFormatProperties with unknown formats 55e5c31af7Sopenharmony_ci 56e5c31af7Sopenharmony_ciThe current specification prohibits `vkGetPhysicalDeviceFormatProperties` from being called with a `VkFormat` that is from an API version higher than that of the device, or from a device-level extension that is not supported by the device. 57e5c31af7Sopenharmony_ciIn order to query a format's support, applications must first query the relevant extension/version/feature beforehand, complicating format queries. 58e5c31af7Sopenharmony_ci 59e5c31af7Sopenharmony_ci=== A vkGetRenderAreaGranularity equivalent for dynamic rendering 60e5c31af7Sopenharmony_ci 61e5c31af7Sopenharmony_ciSome tile-based GPUs can benefit from providing an optimal render area granularity as the basis for a performance hint. 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ci=== vkGetDeviceProcAddr to return NULL for functions beyond app version 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_ciExisting implementations have different behaviour when returning function pointers from `vkGetDeviceProcAddr()` 66e5c31af7Sopenharmony_cifor supported core functions of versions greater than than the version requested by the application. 67e5c31af7Sopenharmony_ci 68e5c31af7Sopenharmony_ci=== Add vkCmdBindIndexBuffer2KHR with a size parameter 69e5c31af7Sopenharmony_ci 70e5c31af7Sopenharmony_ciWith `vkCmdBindIndexBuffer`, it is not possible to communicate the size of the subrange buffer used as index data. 71e5c31af7Sopenharmony_ciRobustness therefore operates on the size of the underlying buffer, which may be larger than the subrange that contains index data. 72e5c31af7Sopenharmony_ciA new function can be introduced to add the necessary size information for robustness. 73e5c31af7Sopenharmony_ci 74e5c31af7Sopenharmony_ci=== Multisample coverage operations and sample counting property 75e5c31af7Sopenharmony_ci 76e5c31af7Sopenharmony_ciSome hardware performs sample counting after multisample coverage operations when the EarlyFragmentTests execution mode is declared in a pixel shader, but the specification says "If the fragment shader declares the EarlyFragmentTests execution mode, fragment shading and multisample coverage operations are instead performed after sample counting." 77e5c31af7Sopenharmony_ci 78e5c31af7Sopenharmony_ci=== VK_REMAINING_ARRAY_LAYERS for VkImageSubresourceLayers.layerCount 79e5c31af7Sopenharmony_ci 80e5c31af7Sopenharmony_ci`layerCount` in `VkImageSubresourceLayers` unintentionally does not support `VK_REMAINING_ARRAY_LAYERS`. 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ci=== VK_WHOLE_SIZE for pSizes argument of vkCmdBindVertexBuffers2 83e5c31af7Sopenharmony_ci 84e5c31af7Sopenharmony_ci`pSizes` in `vkCmdBindVertexBuffers2` unintentionally does not support `VK_WHOLE_SIZE`. 85e5c31af7Sopenharmony_ci 86e5c31af7Sopenharmony_ci=== vkGetImageSubresourceLayout query without having to create a dummy image 87e5c31af7Sopenharmony_ci 88e5c31af7Sopenharmony_ciThere is a potential implementation overhead when querying the subresource layout of an image due to object creation. This overhead could be reduced by a function that works in a similar way to `vkGetDeviceImageMemoryRequirements()` which uses the image creation properties, rather than an image object, to perform the query. 89e5c31af7Sopenharmony_ci 90e5c31af7Sopenharmony_ci=== Reliable/deterministic way to detect device loss 91e5c31af7Sopenharmony_ci 92e5c31af7Sopenharmony_ciAll existing entrypoints that are capable of returning 93e5c31af7Sopenharmony_ciename:VK_ERROR_DEVICE_LOST have some form of exemption or 94e5c31af7Sopenharmony_cispecial-case allowing for other return values to be returned even when a device 95e5c31af7Sopenharmony_ciis irrecoverably lost. These exemptions are all necessary due to the 96e5c31af7Sopenharmony_ciasynchronous nature of device-loss detection, but this makes it difficult for 97e5c31af7Sopenharmony_ciapplication developers to reason about how to reliably detect device-loss. 98e5c31af7Sopenharmony_ci 99e5c31af7Sopenharmony_ci=== Lack of available flag bits 100e5c31af7Sopenharmony_ci 101e5c31af7Sopenharmony_ciBoth `VkPipelineCreateFlagBits` and `VkBufferCreateFlagBits` are running out of available bits for new extensions. 102e5c31af7Sopenharmony_ci 103e5c31af7Sopenharmony_ci=== Sample mask test and sample counting property 104e5c31af7Sopenharmony_ci 105e5c31af7Sopenharmony_ciThe specification says "If the fragment shader declares the EarlyFragmentTests 106e5c31af7Sopenharmony_ciexecution mode, fragment shading and multisample coverage operations are instead 107e5c31af7Sopenharmony_ciperformed after sample counting", but some hardware performs the sample mask test 108e5c31af7Sopenharmony_ciafter sample counting operations when the EarlyFragmentTests execution mode is 109e5c31af7Sopenharmony_cideclared in a pixel shader. 110e5c31af7Sopenharmony_ci 111e5c31af7Sopenharmony_ci=== Deprecation of VkShaderModule 112e5c31af7Sopenharmony_ci 113e5c31af7Sopenharmony_ciShader modules are transient objects used to create pipelines, 114e5c31af7Sopenharmony_cioriginally put in the Vulkan API to enable pre-compilation of 115e5c31af7Sopenharmony_ciSPIR-V to reduce duplicated work at pipeline creation. 116e5c31af7Sopenharmony_ci 117e5c31af7Sopenharmony_ciIn practice though, few implementations do anything useful with these objects, and they 118e5c31af7Sopenharmony_ciend up just being an unnecessary copy and a waste of memory while they 119e5c31af7Sopenharmony_ciexist. 120e5c31af7Sopenharmony_ciThey also are yet another object for applications to manage, which is 121e5c31af7Sopenharmony_cidevelopment overhead that would be useful to remove. 122e5c31af7Sopenharmony_ci 123e5c31af7Sopenharmony_ciSolutions here should have the following properties: 124e5c31af7Sopenharmony_ci 125e5c31af7Sopenharmony_ci * Not require object creation 126e5c31af7Sopenharmony_ci * Allow shader code to be passed directly from application memory to the pipeline 127e5c31af7Sopenharmony_ci creation 128e5c31af7Sopenharmony_ci * Be as simple as possible 129e5c31af7Sopenharmony_ci 130e5c31af7Sopenharmony_cilink:{refpage}VK_EXT_graphics_pipeline_library.html[VK_EXT_graphics_pipeline_library] 131e5c31af7Sopenharmony_cialready introduced a simple way to do this, which is adopted by this 132e5c31af7Sopenharmony_ciextension. 133e5c31af7Sopenharmony_ci 134e5c31af7Sopenharmony_ci=== A8_UNORM format === 135e5c31af7Sopenharmony_ci 136e5c31af7Sopenharmony_ciThis provides direct compatibility with D3D11 and D3D12 for layering. 137e5c31af7Sopenharmony_ci 138e5c31af7Sopenharmony_ci=== Relax VkBufferView creation requirement 139e5c31af7Sopenharmony_ci 140e5c31af7Sopenharmony_ciSome users of the Vulkan API (for example, OpenGL API emulation libraries) have a 141e5c31af7Sopenharmony_cihard time figuring out in advance how one of their VkBuffer objects is going to be 142e5c31af7Sopenharmony_ciused with VkBufferView. Relaxing the requirement that the VkBufferView format is 143e5c31af7Sopenharmony_cisupported for all the usages of the VkBuffer would help. 144e5c31af7Sopenharmony_ci 145e5c31af7Sopenharmony_ci=== Appearance when using VK_POLYGON_MODE_POINT together with PointSize 146e5c31af7Sopenharmony_ci 147e5c31af7Sopenharmony_ciSome hardware does not take point size into account when rasterizing polygons with VK_POLYGON_MODE_POINT. 148e5c31af7Sopenharmony_ci 149e5c31af7Sopenharmony_ci=== Copying between different image types 150e5c31af7Sopenharmony_ci 151e5c31af7Sopenharmony_ciCopies between different image types other than between 2D and 3D is unclear, and untested. This flexibility is useful for some applications. 152e5c31af7Sopenharmony_ci 153e5c31af7Sopenharmony_ci=== Need a way to indicate when SWIZZLE_ONE has defined results when used with depth-stencil formats === 154e5c31af7Sopenharmony_ci 155e5c31af7Sopenharmony_ciSome implementations have undefined results when SWIZZLE_ONE is used with a depth-stencil format, so the default Vulkan behavior in this case is undefined. 156e5c31af7Sopenharmony_ciFor many implementations this combination _is_ defined, however, so it is useful to be able to determine programmatically when that is the case. 157e5c31af7Sopenharmony_ci 158e5c31af7Sopenharmony_ci== Proposal 159e5c31af7Sopenharmony_ci 160e5c31af7Sopenharmony_ciItems introduced by this extension are: 161e5c31af7Sopenharmony_ci 162e5c31af7Sopenharmony_ci=== Default PointSize of 1.0 163e5c31af7Sopenharmony_ci 164e5c31af7Sopenharmony_ciPoints now take a default size of 1.0 if the `PointSize` builtin is not written. 165e5c31af7Sopenharmony_ci 166e5c31af7Sopenharmony_ci=== Indication of parallelogram or Bresenham non-strict lines 167e5c31af7Sopenharmony_ci 168e5c31af7Sopenharmony_ciTwo new properties are added: 169e5c31af7Sopenharmony_ci 170e5c31af7Sopenharmony_ci - `nonStrictSinglePixelWideLinesUseParallelogram` reports the rasterization algorithm used for lines of width 1.0 171e5c31af7Sopenharmony_ci - `nonStrictWideLinesUseParallelogram` reports the rasterization algorithm used for lines of width greater than 1.0 172e5c31af7Sopenharmony_ci 173e5c31af7Sopenharmony_ci=== A1B5G5R5 format 174e5c31af7Sopenharmony_ci 175e5c31af7Sopenharmony_ciAn optional format VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR is added. 176e5c31af7Sopenharmony_ci 177e5c31af7Sopenharmony_ci=== vkGetPhysicalDeviceFormatProperties with unknown formats 178e5c31af7Sopenharmony_ci 179e5c31af7Sopenharmony_ciPhysical-device-level functions can now be called with any value in the valid range for a type beyond the defined enumerants, such that applications can avoid checking individual features, extensions, or versions before querying supported properties of a particular enumerant. 180e5c31af7Sopenharmony_ci 181e5c31af7Sopenharmony_ci=== A vkGetRenderAreaGranularity equivalent for dynamic rendering 182e5c31af7Sopenharmony_ci 183e5c31af7Sopenharmony_ciA new function provides the ability to query the implementation's preferred 184e5c31af7Sopenharmony_cirender area granularity for a render pass instance: 185e5c31af7Sopenharmony_ci 186e5c31af7Sopenharmony_ci[source,c] 187e5c31af7Sopenharmony_ci---- 188e5c31af7Sopenharmony_civoid vkGetRenderingAreaGranularityKHR( 189e5c31af7Sopenharmony_ci VkDevice device, 190e5c31af7Sopenharmony_ci const VkRenderingAreaInfoKHR* pRenderingAreaInfo, 191e5c31af7Sopenharmony_ci VkExtent2D* pGranularity); 192e5c31af7Sopenharmony_ci---- 193e5c31af7Sopenharmony_ci 194e5c31af7Sopenharmony_ci=== vkGetDeviceProcAddr to return NULL for functions beyond app version 195e5c31af7Sopenharmony_ci 196e5c31af7Sopenharmony_ciThe specification has been changed to require `vkGetDeviceProcAddr()` to return `NULL` for supported core functions beyond the version requested by the application. 197e5c31af7Sopenharmony_ci 198e5c31af7Sopenharmony_ci=== Add vkCmdBindIndexBuffer2KHR with a size parameter 199e5c31af7Sopenharmony_ci 200e5c31af7Sopenharmony_ciA new entry point `vkCmdBindIndexBuffer2KHR` is added: 201e5c31af7Sopenharmony_ci 202e5c31af7Sopenharmony_ci[source,c] 203e5c31af7Sopenharmony_ci---- 204e5c31af7Sopenharmony_ciVKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR( 205e5c31af7Sopenharmony_ci VkCommandBuffer commandBuffer, 206e5c31af7Sopenharmony_ci VkBuffer buffer, 207e5c31af7Sopenharmony_ci VkDeviceSize offset, 208e5c31af7Sopenharmony_ci VkDeviceSize size, 209e5c31af7Sopenharmony_ci VkIndexType indexType); 210e5c31af7Sopenharmony_ci---- 211e5c31af7Sopenharmony_ci 212e5c31af7Sopenharmony_ci=== Multisample coverage operations and sample counting property 213e5c31af7Sopenharmony_ci 214e5c31af7Sopenharmony_ciA new `earlyFragmentMultisampleCoverageAfterSampleCounting` property is added. 215e5c31af7Sopenharmony_ci 216e5c31af7Sopenharmony_ci=== VK_REMAINING_ARRAY_LAYERS for VkImageSubresourceLayers.layerCount 217e5c31af7Sopenharmony_ci 218e5c31af7Sopenharmony_ciSupport for using `VK_REMAINING_ARRAY_LAYERS` as the `layerCount` member of `VkImageSubresourceLayers` is added. 219e5c31af7Sopenharmony_ci 220e5c31af7Sopenharmony_ci=== VK_WHOLE_SIZE for pSizes argument of vkCmdBindVertexBuffers2 221e5c31af7Sopenharmony_ci 222e5c31af7Sopenharmony_ciSupport for using `VK_WHOLE_SIZE` in the `pSizes` parameter of `vkCmdBindVertexBuffers2` is added. 223e5c31af7Sopenharmony_ci 224e5c31af7Sopenharmony_ci=== vkGetImageSubresourceLayout query without having to create a dummy image 225e5c31af7Sopenharmony_ci 226e5c31af7Sopenharmony_ciA new `vkGetDeviceImageSubresourceLayoutKHR` function provides the ability to query the subresource layout for an image without requiring an image object, and a KHR version of `vkGetImageSubresourceLayout2EXT`: 227e5c31af7Sopenharmony_ci 228e5c31af7Sopenharmony_ci[source,c] 229e5c31af7Sopenharmony_ci---- 230e5c31af7Sopenharmony_ci 231e5c31af7Sopenharmony_citypedef struct VkImageSubresource2KHR { 232e5c31af7Sopenharmony_ci VkStructureType sType; 233e5c31af7Sopenharmony_ci void* pNext; 234e5c31af7Sopenharmony_ci VkImageSubresource imageSubresource; 235e5c31af7Sopenharmony_ci} VkImageSubresource2KHR; 236e5c31af7Sopenharmony_ci 237e5c31af7Sopenharmony_citypedef struct VkSubresourceLayout2KHR { 238e5c31af7Sopenharmony_ci VkStructureType sType; 239e5c31af7Sopenharmony_ci void* pNext; 240e5c31af7Sopenharmony_ci VkSubresourceLayout subresourceLayout; 241e5c31af7Sopenharmony_ci} VkSubresourceLayout2KHR; 242e5c31af7Sopenharmony_ci 243e5c31af7Sopenharmony_citypedef VkSubresourceLayout2KHR VkSubresourceLayout2EXT; 244e5c31af7Sopenharmony_citypedef VkImageSubresource2KHR VkImageSubresource2EXT; 245e5c31af7Sopenharmony_ci 246e5c31af7Sopenharmony_citypedef struct VkDeviceImageSubresourceInfoKHR { 247e5c31af7Sopenharmony_ci VkStructureType sType; 248e5c31af7Sopenharmony_ci const void* pNext; 249e5c31af7Sopenharmony_ci const VkImageCreateInfo* pCreateInfo; 250e5c31af7Sopenharmony_ci const VkImageSubresource2KHR* pSubresource; 251e5c31af7Sopenharmony_ci} VkDeviceImageSubresourceInfoKHR; 252e5c31af7Sopenharmony_ci 253e5c31af7Sopenharmony_ciVKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR( 254e5c31af7Sopenharmony_ci VkDevice device, 255e5c31af7Sopenharmony_ci const VkDeviceImageSubresourceInfoKHR* pInfo, 256e5c31af7Sopenharmony_ci VkSubresourceLayout2KHR* pLayout); 257e5c31af7Sopenharmony_ci 258e5c31af7Sopenharmony_ciVKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR( 259e5c31af7Sopenharmony_ci VkDevice device, 260e5c31af7Sopenharmony_ci VkImage image, 261e5c31af7Sopenharmony_ci const VkImageSubresource2KHR* pSubresource, 262e5c31af7Sopenharmony_ci VkSubresourceLayout2KHR* pLayout); 263e5c31af7Sopenharmony_ci---- 264e5c31af7Sopenharmony_ci 265e5c31af7Sopenharmony_ci=== Reliable/deterministic way to detect device loss 266e5c31af7Sopenharmony_ci 267e5c31af7Sopenharmony_ciFollowing device-loss, entrypoints that may return `VK_ERROR_DEVICE_LOST` do so 268e5c31af7Sopenharmony_ciin a more consistent manner. 269e5c31af7Sopenharmony_ci 270e5c31af7Sopenharmony_ci=== Lack of available flag bits 271e5c31af7Sopenharmony_ci 272e5c31af7Sopenharmony_ciTwo new flags words are added, along with structures to use them: 273e5c31af7Sopenharmony_ci 274e5c31af7Sopenharmony_ci* `VkPipelineCreateFlagBits2KHR` and `VkPipelineCreateFlags2CreateInfoKHR` 275e5c31af7Sopenharmony_ci* `VkBufferUsageFlagBits2KHR` and `VkBufferUsageFlags2CreateInfoKHR` 276e5c31af7Sopenharmony_ci 277e5c31af7Sopenharmony_ci=== Sample mask test and sample counting property 278e5c31af7Sopenharmony_ci 279e5c31af7Sopenharmony_ciA new `earlyFragmentSampleMaskTestBeforeSampleCounting` property is added. 280e5c31af7Sopenharmony_ci 281e5c31af7Sopenharmony_ci=== Deprecating Shader Modules 282e5c31af7Sopenharmony_ci 283e5c31af7Sopenharmony_ciShader modules are deprecated by allowing 284e5c31af7Sopenharmony_cilink:{refpage}VkShaderModuleCreateInfo.html[VkShaderModuleCreateInfo] to be 285e5c31af7Sopenharmony_cichained to 286e5c31af7Sopenharmony_cilink:{refpage}VkPipelineShaderStageCreateInfo.html[VkPipelineShaderStageCreateInfo], 287e5c31af7Sopenharmony_ciand allowing the link:{refpage}VkShaderModule.html[VkShaderModule] to be 288e5c31af7Sopenharmony_cilink:{refpage}VK_NULL_HANDLE.html[VK_NULL_HANDLE] in this case. 289e5c31af7Sopenharmony_ciShader modules are not being removed, but it is recommended to not use them in order to save memory and avoid unnecessary copies. 290e5c31af7Sopenharmony_ci 291e5c31af7Sopenharmony_ciFor example, where previously an application would have to create a shader 292e5c31af7Sopenharmony_cimodule, it can now simply do this: 293e5c31af7Sopenharmony_ci 294e5c31af7Sopenharmony_ci[source,c] 295e5c31af7Sopenharmony_ci---- 296e5c31af7Sopenharmony_ciVkShaderModuleCreateInfo computeShader = { 297e5c31af7Sopenharmony_ci .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, 298e5c31af7Sopenharmony_ci .pNext = NULL, 299e5c31af7Sopenharmony_ci .flags = 0, 300e5c31af7Sopenharmony_ci .codeSize = ..., 301e5c31af7Sopenharmony_ci .pCode = ... }; 302e5c31af7Sopenharmony_ci 303e5c31af7Sopenharmony_ciVkComputePipelineCreateInfo computePipeline = { 304e5c31af7Sopenharmony_ci .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, 305e5c31af7Sopenharmony_ci .pNext = NULL, 306e5c31af7Sopenharmony_ci .flags = 0, 307e5c31af7Sopenharmony_ci .stage = { 308e5c31af7Sopenharmony_ci .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, 309e5c31af7Sopenharmony_ci .pNext = &computeShader, 310e5c31af7Sopenharmony_ci .flags = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT | VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, 311e5c31af7Sopenharmony_ci .stage = VK_SHADER_STAGE_COMPUTE_BIT, 312e5c31af7Sopenharmony_ci .module = VK_NULL_HANDLE, 313e5c31af7Sopenharmony_ci .pName = ..., 314e5c31af7Sopenharmony_ci .pSpecializationInfo = ... }, 315e5c31af7Sopenharmony_ci .layout = ..., 316e5c31af7Sopenharmony_ci .basePipelineHandle = 0, 317e5c31af7Sopenharmony_ci .basePipelineIndex = 0 }; 318e5c31af7Sopenharmony_ci---- 319e5c31af7Sopenharmony_ci 320e5c31af7Sopenharmony_ci=== A8_UNORM format 321e5c31af7Sopenharmony_ci 322e5c31af7Sopenharmony_ciAn optional format VK_FORMAT_A8_UNORM_KHR is added. 323e5c31af7Sopenharmony_ci 324e5c31af7Sopenharmony_ci=== Relax VkBufferView creation requirement 325e5c31af7Sopenharmony_ci 326e5c31af7Sopenharmony_ciUse the new `VkBufferUsageFlags2CreateInfoKHR` structure chained 327e5c31af7Sopenharmony_ciinto the `pNext` of `VkBufferViewCreateInfo` to specify a 328e5c31af7Sopenharmony_cisubset of usage of the associated `VkBuffer`. 329e5c31af7Sopenharmony_ci 330e5c31af7Sopenharmony_ci=== Appearance when using VK_POLYGON_MODE_POINT together with PointSize 331e5c31af7Sopenharmony_ci 332e5c31af7Sopenharmony_ciA new `polygonModePointSize` property is added. 333e5c31af7Sopenharmony_ci 334e5c31af7Sopenharmony_ci=== Copying between different image types 335e5c31af7Sopenharmony_ci 336e5c31af7Sopenharmony_ciAllow copies between different image types, treating 1D images as 2D images 337e5c31af7Sopenharmony_ciwith a height of 1. 338e5c31af7Sopenharmony_ci 339e5c31af7Sopenharmony_ci=== Need a way to indicate when SWIZZLE_ONE has defined results when used with depth-stencil formats === 340e5c31af7Sopenharmony_ci 341e5c31af7Sopenharmony_ciIntroduce a `depthStencilSwizzleOneSupport` 342e5c31af7Sopenharmony_ciproperty which an implementation should expose to indicate that this 343e5c31af7Sopenharmony_cibehavior is defined. 344e5c31af7Sopenharmony_ci 345e5c31af7Sopenharmony_ci== Issues 346e5c31af7Sopenharmony_ci 347e5c31af7Sopenharmony_ciNone. 348e5c31af7Sopenharmony_ci 349e5c31af7Sopenharmony_ci 350e5c31af7Sopenharmony_ci== Further Functionality 351e5c31af7Sopenharmony_ci 352e5c31af7Sopenharmony_ciNone. 353