1e5c31af7Sopenharmony_ci// Copyright (c) 2014-2020 Khronos Group.
2e5c31af7Sopenharmony_ci//
3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ci[appendix]
6e5c31af7Sopenharmony_ci[[vulkansc-deviations]]
7e5c31af7Sopenharmony_ci= Vulkan SC Deviations From Base Vulkan
8e5c31af7Sopenharmony_ci
9e5c31af7Sopenharmony_ci== Additions
10e5c31af7Sopenharmony_ciThe following extensions have been added to Vulkan SC:
11e5c31af7Sopenharmony_ci
12e5c31af7Sopenharmony_ci[width="95%",cols="60%,40%",options="header"]
13e5c31af7Sopenharmony_ci|===
14e5c31af7Sopenharmony_ci| Extension | Level
15e5c31af7Sopenharmony_ciifdef::VK_KHR_object_refresh[]
16e5c31af7Sopenharmony_ci|<<VK_KHR_object_refresh>> | Optional
17e5c31af7Sopenharmony_ciendif::VK_KHR_object_refresh[]
18e5c31af7Sopenharmony_ci|===
19e5c31af7Sopenharmony_ci
20e5c31af7Sopenharmony_ci
21e5c31af7Sopenharmony_ciThe following items have been added to Vulkan SC:
22e5c31af7Sopenharmony_ci
23e5c31af7Sopenharmony_ci[width="95%",cols="20%,80%",options="header"]
24e5c31af7Sopenharmony_ci|===
25e5c31af7Sopenharmony_ci| Chapter a| Additions
26e5c31af7Sopenharmony_ci| <<fundamentals,Fundamentals>> a| include::{chapters}/fundamentals.adoc[tag=scaddition]
27e5c31af7Sopenharmony_ci| <<devsandqueues,Devices and Queues>> a| include::{chapters}/devsandqueues.adoc[tag=scaddition]
28e5c31af7Sopenharmony_ci| <<commandbuffers,Command Buffers>> a| include::{chapters}/cmdbuffers.adoc[tag=scaddition]
29e5c31af7Sopenharmony_ci| <<pipelines,Pipelines>> a| include::{chapters}/pipelines.adoc[tag=scaddition]
30e5c31af7Sopenharmony_ci| <<memory,Memory Allocation>> a| include::{chapters}/memory.adoc[tag=scaddition]
31e5c31af7Sopenharmony_ci| <<features,Features>> a| include::{chapters}/features.adoc[tag=scaddition]
32e5c31af7Sopenharmony_ci| <<debugging,Debugging>> a| include::{chapters}/fault_handling.adoc[tag=scaddition]
33e5c31af7Sopenharmony_ci|===
34e5c31af7Sopenharmony_ci
35e5c31af7Sopenharmony_ci== Modifications
36e5c31af7Sopenharmony_ciThe following aspects of Base Vulkan have been modified for Vulkan SC:
37e5c31af7Sopenharmony_ci
38e5c31af7Sopenharmony_ciifdef::editing-notes[]
39e5c31af7Sopenharmony_ci[NOTE]
40e5c31af7Sopenharmony_ci.editing-note
41e5c31af7Sopenharmony_ci====
42e5c31af7Sopenharmony_ciTable entries should be listed in the order listed in table of contents
43e5c31af7Sopenharmony_ci====
44e5c31af7Sopenharmony_ciendif::editing-notes[]
45e5c31af7Sopenharmony_ci
46e5c31af7Sopenharmony_ci[width="95%",cols="20%,80%",options="header"]
47e5c31af7Sopenharmony_ci|===
48e5c31af7Sopenharmony_ci| Chapter a| Modifications
49e5c31af7Sopenharmony_ci| <<fundamentals,Fundamentals>> a| include::{chapters}/fundamentals.adoc[tag=scdeviation]
50e5c31af7Sopenharmony_ci| <<devsandqueues,Devices and Queues>> a| include::{chapters}/devsandqueues.adoc[tag=scdeviation]
51e5c31af7Sopenharmony_ci| <<commandbuffers,Command Buffers>> a| include::{chapters}/cmdbuffers.adoc[tag=scdeviation]
52e5c31af7Sopenharmony_ci| <<pipelines,Pipelines>> a| include::{chapters}/pipelines.adoc[tag=scdeviation]
53e5c31af7Sopenharmony_ci| <<memory,Memory Allocation>> a| include::{chapters}/memory.adoc[tag=scdeviation]
54e5c31af7Sopenharmony_ci| <<resources,Resource Creation>> a| include::{chapters}/resources.adoc[tag=scdeviation]
55e5c31af7Sopenharmony_ci| <<descriptorsets,Resource Descriptors>> a| include::{chapters}/descriptorsets.adoc[tag=scdeviation]
56e5c31af7Sopenharmony_ci| <<sparsememory,Sparse Resources>> a| include::{chapters}/sparsemem.adoc[tag=scdeviation]
57e5c31af7Sopenharmony_ci| <<wsi,WSI Swapchain>> a| include::{chapters}/VK_KHR_swapchain/wsi.adoc[tag=scdeviation]
58e5c31af7Sopenharmony_ci| <<features,Features>> a| include::{chapters}/features.adoc[tag=scdeviation]
59e5c31af7Sopenharmony_ci| <<limits,Limits>> a| include::{chapters}/limits.adoc[tag=scdeviation]
60e5c31af7Sopenharmony_ci|===
61e5c31af7Sopenharmony_ci
62e5c31af7Sopenharmony_ci== Removals
63e5c31af7Sopenharmony_ciThe following functionality has been removed from Base Vulkan in Vulkan SC:
64e5c31af7Sopenharmony_ci
65e5c31af7Sopenharmony_ciifdef::editing-notes[]
66e5c31af7Sopenharmony_ci[NOTE]
67e5c31af7Sopenharmony_ci.editing-note
68e5c31af7Sopenharmony_ci====
69e5c31af7Sopenharmony_ciTable entries should be listed in the order listed in table of contents.
70e5c31af7Sopenharmony_ci====
71e5c31af7Sopenharmony_ciendif::editing-notes[]
72e5c31af7Sopenharmony_ci
73e5c31af7Sopenharmony_ci[width="95%",cols="20%,80%",options="header"]
74e5c31af7Sopenharmony_ci|===
75e5c31af7Sopenharmony_ci| Chapter a| Removals
76e5c31af7Sopenharmony_ci| <<fundamentals,Fundamentals>> a| include::{chapters}/fundamentals.adoc[tag=scremoved]
77e5c31af7Sopenharmony_ci| <<devsandqueues,Devices and Queues>> a| include::{chapters}/devsandqueues.adoc[tag=scremoved]
78e5c31af7Sopenharmony_ci| <<commandbuffers,Command Buffers>> a| include::{chapters}/cmdbuffers.adoc[tag=scremoved]
79e5c31af7Sopenharmony_ci| <<synchronization,Synchronization and Cache Control>> a| include::{chapters}/synchronization.adoc[tag=scremoved]
80e5c31af7Sopenharmony_ci| <<shaders,Shaders>> a| include::{chapters}/shaders.adoc[tag=scremoved]
81e5c31af7Sopenharmony_ci| <<pipelines,Pipelines>> a| include::{chapters}/pipelines.adoc[tag=scremoved]
82e5c31af7Sopenharmony_ci| <<memory,Memory Allocation>> a| include::{chapters}/memory.adoc[tag=scremoved]
83e5c31af7Sopenharmony_ci| <<descriptorsets,Resource Descriptors>> a| include::{chapters}/descriptorsets.adoc[tag=scremoved]
84e5c31af7Sopenharmony_ci| <<queries,Queries>> a| include::{chapters}/queries.adoc[tag=scremoved]
85e5c31af7Sopenharmony_ci| <<fragops,Fragment Operations>> a| include::{chapters}/fragops.adoc[tag=scremoved]
86e5c31af7Sopenharmony_ci| <<sparsememory,Sparse Resources>> a| include::{chapters}/sparsemem.adoc[tag=scremoved]
87e5c31af7Sopenharmony_ci| <<wsi,Window System Integration>> a| include::{chapters}/VK_KHR_surface/wsi.adoc[tag=scremoved]
88e5c31af7Sopenharmony_ci| <<wsi,WSI Swapchain>> a| include::{chapters}/VK_KHR_swapchain/wsi.adoc[tag=scremoved]
89e5c31af7Sopenharmony_ci|===
90e5c31af7Sopenharmony_ci
91e5c31af7Sopenharmony_ci== Extension Support
92e5c31af7Sopenharmony_ci
93e5c31af7Sopenharmony_ciVulkan SC supports a subset of the extensions supported in Base Vulkan.
94e5c31af7Sopenharmony_ciThis subset was decided by:
95e5c31af7Sopenharmony_ci
96e5c31af7Sopenharmony_ci  * Excluding any extensions that would pose significant difficulty to
97e5c31af7Sopenharmony_ci    certify their implementations.
98e5c31af7Sopenharmony_ci  * Excluding any extension that would not be used in deployed devices.
99e5c31af7Sopenharmony_ci    This was primarily extensions focused on application development and
100e5c31af7Sopenharmony_ci    debug.
101e5c31af7Sopenharmony_ci  * Excluding any extensions that are specific to an Operating System or
102e5c31af7Sopenharmony_ci    Windowing system that is highly unlikely to be used in the Safety
103e5c31af7Sopenharmony_ci    Critical space.
104e5c31af7Sopenharmony_ci  * Non-KHR or EXT extension are supported on request.
105e5c31af7Sopenharmony_ci
106e5c31af7Sopenharmony_ci[NOTE]
107e5c31af7Sopenharmony_ci.Note
108e5c31af7Sopenharmony_ci====
109e5c31af7Sopenharmony_ciDuring development it is likely that application developers will need
110e5c31af7Sopenharmony_ciadditional functionality in a Vulkan SC implementation beyond what is
111e5c31af7Sopenharmony_ciprovided by the supported extensions.
112e5c31af7Sopenharmony_ciThis can be achieved by implementing a development focused version of the
113e5c31af7Sopenharmony_ciimplementation that exposes additional Vulkan extensions and tools support
114e5c31af7Sopenharmony_cibut is non-conformant to the Vulkan SC specification.
115e5c31af7Sopenharmony_ci
116e5c31af7Sopenharmony_ciA Vulkan SC conformant implementation with this additional functionality
117e5c31af7Sopenharmony_ciremoved will be used on the end device.
118e5c31af7Sopenharmony_ci====
119e5c31af7Sopenharmony_ci
120e5c31af7Sopenharmony_ci== Fault and Error Handling
121e5c31af7Sopenharmony_ci
122e5c31af7Sopenharmony_ciVulkan SC maintains the use of <<fundamentals-returncodes>> on a small
123e5c31af7Sopenharmony_cinumber of commands.
124e5c31af7Sopenharmony_ciThese allow the command to confirm it completed successfully or return an
125e5c31af7Sopenharmony_cierror code for situations where a failure could be detected at runtime
126e5c31af7Sopenharmony_ciduring the execution of the command.
127e5c31af7Sopenharmony_ci
128e5c31af7Sopenharmony_ciIn addition to <<fundamentals-returncodes>> Vulkan SC adds
129e5c31af7Sopenharmony_ci<<fault-handling>> support.
130e5c31af7Sopenharmony_ciThis provides the implementation the ability to communicate information on
131e5c31af7Sopenharmony_cierrors or faults to the application that have been detected but are not
132e5c31af7Sopenharmony_cicovered by <<fundamentals-returncodes>> in the Vulkan SC API.
133e5c31af7Sopenharmony_ciThese could be runtime failures of the system or application faults that are
134e5c31af7Sopenharmony_cidetected asynchronously to the Vulkan API commands.
135e5c31af7Sopenharmony_ci
136e5c31af7Sopenharmony_ci== Undefined Behavior in the API
137e5c31af7Sopenharmony_ci
138e5c31af7Sopenharmony_ciIf an application uses the API incorrectly the behavior of the API is
139e5c31af7Sopenharmony_ciundefined:.
140e5c31af7Sopenharmony_ciThe Vulkan SC runtime will perform minimal error and state checking and it
141e5c31af7Sopenharmony_ciis assumed that applications are using the API correctly, see
142e5c31af7Sopenharmony_ci<<fundamentals-validusage>>.
143e5c31af7Sopenharmony_ci
144e5c31af7Sopenharmony_ciWith incorrect input to the API, the implementation could continue to
145e5c31af7Sopenharmony_cifunction correctly, generate unexpected output, become unstable, or be
146e5c31af7Sopenharmony_citerminated.
147e5c31af7Sopenharmony_ciThe exact behavior will vary and be dependent on the specifics of the
148e5c31af7Sopenharmony_ciinvalid usage and the implementation.
149e5c31af7Sopenharmony_ci
150e5c31af7Sopenharmony_ciIt is primarily the application's responsibility to ensure it always uses
151e5c31af7Sopenharmony_cithe API correctly.
152e5c31af7Sopenharmony_ciPotential methods to detect incorrect API usage include performing manual
153e5c31af7Sopenharmony_cicode inspection, use of validation layers during development, use of
154e5c31af7Sopenharmony_civalidation layers at runtime, or adding runtime checking to the application.
155e5c31af7Sopenharmony_ciOutside of this, Vulkan SC implementations can: add implementation-specific
156e5c31af7Sopenharmony_citargeted checks to detect invalid API usage that could significantly impact
157e5c31af7Sopenharmony_cithe correct operation of the application or implementation.
158e5c31af7Sopenharmony_ciThe <<fault-handling>> extension allows implementations to communicate
159e5c31af7Sopenharmony_ciinformation on such occurrences.
160e5c31af7Sopenharmony_ci
161e5c31af7Sopenharmony_ci== MISRA C:2012 Deviations
162e5c31af7Sopenharmony_ci
163e5c31af7Sopenharmony_ci`{core_header}` is intended to be compatible with safety coding standards
164e5c31af7Sopenharmony_cilike MISRA C:2012.
165e5c31af7Sopenharmony_ci
166e5c31af7Sopenharmony_ciThe following provides information on items a MISRA C code analysis tool
167e5c31af7Sopenharmony_cimay: report for a project using Vulkan SC.
168e5c31af7Sopenharmony_ci
169e5c31af7Sopenharmony_ciMISRA headline guidelines are copyright (C) The MISRA Consortium Limited and
170e5c31af7Sopenharmony_ciare reproduced with permission.
171e5c31af7Sopenharmony_ciFor further explanation of the directives and rules please see the _MISRA
172e5c31af7Sopenharmony_ciC:2012_ specification (https://www.misra.org.uk/misra-c/).
173e5c31af7Sopenharmony_ciSee _MISRA Compliance:2020_
174e5c31af7Sopenharmony_ci(https://www.misra.org.uk/app/uploads/2021/06/MISRA-Compliance-2020.pdf) for
175e5c31af7Sopenharmony_cia framework for handling deviations.
176e5c31af7Sopenharmony_ci
177e5c31af7Sopenharmony_ci=== Directives
178e5c31af7Sopenharmony_ci
179e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
180e5c31af7Sopenharmony_ci|===
181e5c31af7Sopenharmony_ci|Directive  |4.6: "_typedefs_ that indicate size and signedness should be used
182e5c31af7Sopenharmony_ci             in place of the basic numerical types"
183e5c31af7Sopenharmony_ci|Category   |Advisory
184e5c31af7Sopenharmony_ci|Note       |This is reported for every `char` and `float` variable used in the
185e5c31af7Sopenharmony_ci             API.
186e5c31af7Sopenharmony_ci|Rationale  |Vulkan SC maintains the Base Vulkan type conventions for
187e5c31af7Sopenharmony_ci             compatibility between APIs.
188e5c31af7Sopenharmony_ci|===
189e5c31af7Sopenharmony_ci
190e5c31af7Sopenharmony_ci=== Rules
191e5c31af7Sopenharmony_ci
192e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
193e5c31af7Sopenharmony_ci|===
194e5c31af7Sopenharmony_ci|Rule       |2.3: "A project should not contain unused type declarations"
195e5c31af7Sopenharmony_ci|Category   |Advisory
196e5c31af7Sopenharmony_ci|Note       |This is reported for any unused type definitions.
197e5c31af7Sopenharmony_ci|Rationale  |The `{core_header}` provides a complete API definition and it is
198e5c31af7Sopenharmony_ci             expected that an application may: not use all the provided type declarations.
199e5c31af7Sopenharmony_ci|===
200e5c31af7Sopenharmony_ci
201e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
202e5c31af7Sopenharmony_ci|===
203e5c31af7Sopenharmony_ci|Rule       |2.4: "A project should not contain unused tag declarations"
204e5c31af7Sopenharmony_ci|Category   |Advisory
205e5c31af7Sopenharmony_ci|Note       |This is reported for each instance of
206e5c31af7Sopenharmony_ci             `typedef struct VkStruct { ... } VkStruct;` and
207e5c31af7Sopenharmony_ci             `typedef enum VkEnum { ... } VkEnum;` where the tag declaration is
208e5c31af7Sopenharmony_ci             unused.
209e5c31af7Sopenharmony_ci|Rationale  |The `{core_header}` provides a complete API definition and it is
210e5c31af7Sopenharmony_ci             expected that an application may: not use all the provided tag
211e5c31af7Sopenharmony_ci             declarations.
212e5c31af7Sopenharmony_ci             Vulkan SC maintains the Base Vulkan type conventions for
213e5c31af7Sopenharmony_ci             compatibility between APIs.
214e5c31af7Sopenharmony_ci             Tag declarations are required in case an application wishes to
215e5c31af7Sopenharmony_ci             make forward declarations to API-defined types.
216e5c31af7Sopenharmony_ci|===
217e5c31af7Sopenharmony_ci
218e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
219e5c31af7Sopenharmony_ci|===
220e5c31af7Sopenharmony_ci|Rule       |2.5: "A project should not contain unused macro declarations"
221e5c31af7Sopenharmony_ci|Category   |Advisory
222e5c31af7Sopenharmony_ci|Note       |This is reported for every unused macro defined in the header.
223e5c31af7Sopenharmony_ci|Rationale  |The `{core_header}` provides a complete API definition and it is
224e5c31af7Sopenharmony_ci             expected that an application may: not use all the provided macro
225e5c31af7Sopenharmony_ci             declarations.
226e5c31af7Sopenharmony_ci|===
227e5c31af7Sopenharmony_ci
228e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
229e5c31af7Sopenharmony_ci|===
230e5c31af7Sopenharmony_ci|Rule       |5.1: "_External identifiers_ shall be distinct"
231e5c31af7Sopenharmony_ci|Category   |Required
232e5c31af7Sopenharmony_ci|Note       |This is reported for identifiers with names that do not differ in
233e5c31af7Sopenharmony_ci             the first 31 characters, such as
234e5c31af7Sopenharmony_ci             flink:vkGetPhysicalDeviceFormatProperties and
235e5c31af7Sopenharmony_ci             flink:vkGetPhysicalDeviceFormatProperties2.
236e5c31af7Sopenharmony_ci|Rationale  |Vulkan SC maintains the Base Vulkan naming conventions for
237e5c31af7Sopenharmony_ci             compatibility between APIs.
238e5c31af7Sopenharmony_ci             Vulkan SC applications must: be built using a compiler that treats
239e5c31af7Sopenharmony_ci             enough characters as significant.
240e5c31af7Sopenharmony_ci|===
241e5c31af7Sopenharmony_ci
242e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
243e5c31af7Sopenharmony_ci|===
244e5c31af7Sopenharmony_ci|Rule       |5.2: "Identifiers declared in the same _scope_ and name space
245e5c31af7Sopenharmony_ci             shall be distinct"
246e5c31af7Sopenharmony_ci|Category   |Required
247e5c31af7Sopenharmony_ci|Note       |This is reported for many code:typedef statements with long
248e5c31af7Sopenharmony_ci             identifiers.
249e5c31af7Sopenharmony_ci|Rationale  |Vulkan SC maintains the Base Vulkan type and naming conventions for
250e5c31af7Sopenharmony_ci             compatibility between APIs.
251e5c31af7Sopenharmony_ci             Vulkan SC applications must: be built using a compiler that treats
252e5c31af7Sopenharmony_ci             enough characters as significant.
253e5c31af7Sopenharmony_ci|===
254e5c31af7Sopenharmony_ci
255e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
256e5c31af7Sopenharmony_ci|===
257e5c31af7Sopenharmony_ci|Rule       |5.4: "_Macro identifiers_ shall be distinct"
258e5c31af7Sopenharmony_ci|Category   |Required
259e5c31af7Sopenharmony_ci|Note       |This is reported for macros with names that do not differ in the
260e5c31af7Sopenharmony_ci             first 31 characters, such as
261e5c31af7Sopenharmony_ci             ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT and
262e5c31af7Sopenharmony_ci             ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
263e5c31af7Sopenharmony_ci|Rationale  |Vulkan SC maintains the Base Vulkan naming conventions for
264e5c31af7Sopenharmony_ci             compatibility between APIs.
265e5c31af7Sopenharmony_ci             Vulkan SC applications must: be built using a compiler that treats
266e5c31af7Sopenharmony_ci             enough characters as significant.
267e5c31af7Sopenharmony_ci|===
268e5c31af7Sopenharmony_ci
269e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
270e5c31af7Sopenharmony_ci|===
271e5c31af7Sopenharmony_ci|Rule       |8.6: "An identifier with external linkage shall have exactly one
272e5c31af7Sopenharmony_ci             external definition"
273e5c31af7Sopenharmony_ci|Category   |Required
274e5c31af7Sopenharmony_ci|Note       |This is reported for every API entry point declaration, and the
275e5c31af7Sopenharmony_ci             external definitions are provided by the implementation.
276e5c31af7Sopenharmony_ci|Rationale  |It is expected that a Vulkan SC application will link against an
277e5c31af7Sopenharmony_ci             implementation that provides these definitions.
278e5c31af7Sopenharmony_ci|===
279e5c31af7Sopenharmony_ci
280e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
281e5c31af7Sopenharmony_ci|===
282e5c31af7Sopenharmony_ci|Rule       |19.2: "The _union_ keyword should not be used"
283e5c31af7Sopenharmony_ci|Category   |Advisory
284e5c31af7Sopenharmony_ci|Note       |This is reported on the slink:VkClearColorValue,
285e5c31af7Sopenharmony_ci             slink:VkClearValue, and slink:VkPerformanceCounterResultKHR
286e5c31af7Sopenharmony_ci             unions.
287e5c31af7Sopenharmony_ci|Rationale  |These are required to remain compatible with the Base Vulkan API.
288e5c31af7Sopenharmony_ci|===
289e5c31af7Sopenharmony_ci
290e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
291e5c31af7Sopenharmony_ci|===
292e5c31af7Sopenharmony_ci|Rule       |20.1: "_#include_ directives should only be preceded by
293e5c31af7Sopenharmony_ci             preprocessor directives or comments"
294e5c31af7Sopenharmony_ci|Category   |Advisory
295e5c31af7Sopenharmony_ci|Note       |This is reported because the entire Vulkan SC API definition is
296e5c31af7Sopenharmony_ci             wrapped in an `extern "C"` block.
297e5c31af7Sopenharmony_ci|Rationale  |This is expected because the Vulkan SC API is a C ABI and the
298e5c31af7Sopenharmony_ci             header may be included from C++ code.
299e5c31af7Sopenharmony_ci|===
300e5c31af7Sopenharmony_ci
301e5c31af7Sopenharmony_ci[width="100%",cols="15%,85%",options="header"]
302e5c31af7Sopenharmony_ci|===
303e5c31af7Sopenharmony_ci|Rule       |20.10: "The # and ## preprocessor operators should not be used"
304e5c31af7Sopenharmony_ci|Category   |Advisory
305e5c31af7Sopenharmony_ci|Note      a|This is reported for the two lines:
306e5c31af7Sopenharmony_ci[source,c]
307e5c31af7Sopenharmony_ci---------------------------------------------------
308e5c31af7Sopenharmony_ci#define VK_DEFINE_HANDLE(object) typedef struct object##_T* (object);
309e5c31af7Sopenharmony_ci#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *(object);
310e5c31af7Sopenharmony_ci---------------------------------------------------
311e5c31af7Sopenharmony_ci|Rationale  |This is expected usage of the macro expansion operation and there
312e5c31af7Sopenharmony_ci             are not multiple operators used in the statement.
313e5c31af7Sopenharmony_ci|===
314