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