1e5c31af7Sopenharmony_ci// Copyright (c) 2014-2020 Khronos Group.
2e5c31af7Sopenharmony_ci//
3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ci
6e5c31af7Sopenharmony_ci[[fault-handling]]
7e5c31af7Sopenharmony_ci== Fault Handling
8e5c31af7Sopenharmony_ci
9e5c31af7Sopenharmony_ciThe fault handling mechanism provides a method for the implementation to
10e5c31af7Sopenharmony_cipass fault information to the application.
11e5c31af7Sopenharmony_ciA fault indicates that an issue has occurred with the host or device that
12e5c31af7Sopenharmony_cicould impact the implementation's ability to function correctly.
13e5c31af7Sopenharmony_ciIt consists of a slink:VkFaultData structure that is used to communicate
14e5c31af7Sopenharmony_ciinformation about the fault between the implementation and the application,
15e5c31af7Sopenharmony_ciwith two methods to obtain the data.
16e5c31af7Sopenharmony_ciThe application can: obtain the fault data from the implementation using
17e5c31af7Sopenharmony_ciflink:vkGetFaultData.
18e5c31af7Sopenharmony_ciAlternatively, the implementation can: directly call a pre-registered fault
19e5c31af7Sopenharmony_cihandler function (tlink:PFN_vkFaultCallbackFunction) in the application when
20e5c31af7Sopenharmony_cia fault occurs.
21e5c31af7Sopenharmony_ci
22e5c31af7Sopenharmony_ciThe sname:VkFaultData structure provides categories the implementation must:
23e5c31af7Sopenharmony_ciset to provide basic information on a fault.
24e5c31af7Sopenharmony_ciThese allow the implementation to provide a coarse classification of a fault
25e5c31af7Sopenharmony_cito the application.
26e5c31af7Sopenharmony_ciAs the potential faults that could occur will vary between different
27e5c31af7Sopenharmony_ciplatforms, it is expected that an implementation would also provide
28e5c31af7Sopenharmony_ciadditional implementation-specific data on the fault, enabling the
29e5c31af7Sopenharmony_ciapplication to take appropriate action.
30e5c31af7Sopenharmony_ci
31e5c31af7Sopenharmony_ciThe implementation must: also define whether a particular fault results in
32e5c31af7Sopenharmony_cithe fault callback function being called, is communicated via
33e5c31af7Sopenharmony_ciflink:vkGetFaultData, or both.
34e5c31af7Sopenharmony_ciThis will be decided by several factors including:
35e5c31af7Sopenharmony_ci
36e5c31af7Sopenharmony_ci  * the severity of the fault,
37e5c31af7Sopenharmony_ci  * the application's ability to handle the fault, and
38e5c31af7Sopenharmony_ci  * how the application should handle the fault.
39e5c31af7Sopenharmony_ci
40e5c31af7Sopenharmony_ciThe implementation must: document the implementation-specific fault data,
41e5c31af7Sopenharmony_cihow the faults are communicated, and expected responses from the application
42e5c31af7Sopenharmony_cifor each of the faults that it can: report.
43e5c31af7Sopenharmony_ci
44e5c31af7Sopenharmony_ci[[fault-data]]
45e5c31af7Sopenharmony_ci=== Fault Data
46e5c31af7Sopenharmony_ci
47e5c31af7Sopenharmony_ci[open,refpage='VkFaultData',desc='structure describing fault data',type='structs']
48e5c31af7Sopenharmony_ci--
49e5c31af7Sopenharmony_ciThe information on a single fault is returned using the sname:VkFaultData
50e5c31af7Sopenharmony_cistructure.
51e5c31af7Sopenharmony_ciThe sname:VkFaultData structure is defined as:
52e5c31af7Sopenharmony_ci
53e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkFaultData.adoc[]
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
56e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
57e5c31af7Sopenharmony_ci    structure that provides implementation-specific data on the fault.
58e5c31af7Sopenharmony_ci  * pname:faultLevel is a elink:VkFaultLevel that provides the severity of
59e5c31af7Sopenharmony_ci    the fault.
60e5c31af7Sopenharmony_ci  * pname:faultType is a elink:VkFaultType that provides the type of the
61e5c31af7Sopenharmony_ci    fault.
62e5c31af7Sopenharmony_ci
63e5c31af7Sopenharmony_ciTo retrieve implementation-specific fault data, pname:pNext can: point to
64e5c31af7Sopenharmony_cione or more implementation-defined fault structures or `NULL` to not
65e5c31af7Sopenharmony_ciretrieve implementation-specific data.
66e5c31af7Sopenharmony_ci
67e5c31af7Sopenharmony_ci.Valid Usage
68e5c31af7Sopenharmony_ci****
69e5c31af7Sopenharmony_ci  * [[VUID-VkFaultData-pNext-05019]]
70e5c31af7Sopenharmony_ci    pname:pNext must: be `NULL` or a valid pointer to an
71e5c31af7Sopenharmony_ci    implementation-specific structure
72e5c31af7Sopenharmony_ci****
73e5c31af7Sopenharmony_ci
74e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkFaultData.adoc[]
75e5c31af7Sopenharmony_ci
76e5c31af7Sopenharmony_ci--
77e5c31af7Sopenharmony_ci
78e5c31af7Sopenharmony_ci[open,refpage='VkFaultLevel',desc='The different fault severity levels that can be returned',type='enums']
79e5c31af7Sopenharmony_ci--
80e5c31af7Sopenharmony_ciPossible values of slink:VkFaultData::pname:faultLevel, specifying the fault
81e5c31af7Sopenharmony_ciseverity, are:
82e5c31af7Sopenharmony_ci
83e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkFaultLevel.adoc[]
84e5c31af7Sopenharmony_ci
85e5c31af7Sopenharmony_ci  * ename:VK_FAULT_LEVEL_UNASSIGNED A fault level has not been assigned.
86e5c31af7Sopenharmony_ci  * ename:VK_FAULT_LEVEL_CRITICAL A fault that cannot: be recovered by the
87e5c31af7Sopenharmony_ci    application.
88e5c31af7Sopenharmony_ci  * ename:VK_FAULT_LEVEL_RECOVERABLE A fault that can: be recovered by the
89e5c31af7Sopenharmony_ci    application.
90e5c31af7Sopenharmony_ci  * ename:VK_FAULT_LEVEL_WARNING A fault that indicates a non-optimal
91e5c31af7Sopenharmony_ci    condition has occurred, but no recovery is necessary at this point.
92e5c31af7Sopenharmony_ci
93e5c31af7Sopenharmony_ci--
94e5c31af7Sopenharmony_ci
95e5c31af7Sopenharmony_ci[open,refpage='VkFaultType',desc='The different fault types that can be returned',type='enums']
96e5c31af7Sopenharmony_ci--
97e5c31af7Sopenharmony_ci
98e5c31af7Sopenharmony_ciPossible values of slink:VkFaultData::pname:faultType, specifying the fault
99e5c31af7Sopenharmony_citype, are:
100e5c31af7Sopenharmony_ci
101e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkFaultType.adoc[]
102e5c31af7Sopenharmony_ci
103e5c31af7Sopenharmony_ci  * ename:VK_FAULT_TYPE_INVALID The fault data does not contain a valid
104e5c31af7Sopenharmony_ci    fault.
105e5c31af7Sopenharmony_ci  * ename:VK_FAULT_TYPE_UNASSIGNED A fault type has not been assigned.
106e5c31af7Sopenharmony_ci  * ename:VK_FAULT_TYPE_IMPLEMENTATION Implementation-defined fault.
107e5c31af7Sopenharmony_ci  * ename:VK_FAULT_TYPE_SYSTEM A fault occurred in the system components.
108e5c31af7Sopenharmony_ci  * ename:VK_FAULT_TYPE_PHYSICAL_DEVICE A fault occurred with the physical
109e5c31af7Sopenharmony_ci    device.
110e5c31af7Sopenharmony_ci  * ename:VK_FAULT_TYPE_COMMAND_BUFFER_FULL Command buffer memory was
111e5c31af7Sopenharmony_ci    exhausted before flink:vkEndCommandBuffer was called.
112e5c31af7Sopenharmony_ci  * ename:VK_FAULT_TYPE_INVALID_API_USAGE Invalid usage of the API was
113e5c31af7Sopenharmony_ci    detected by the implementation.
114e5c31af7Sopenharmony_ci--
115e5c31af7Sopenharmony_ci
116e5c31af7Sopenharmony_ci
117e5c31af7Sopenharmony_ci[[querrying-fault]]
118e5c31af7Sopenharmony_ci=== Querying Fault Status
119e5c31af7Sopenharmony_ci
120e5c31af7Sopenharmony_ci[open,refpage='vkGetFaultData',desc='Query fault information',type='protos']
121e5c31af7Sopenharmony_ci--
122e5c31af7Sopenharmony_ci:refpage: vkGetFaultData
123e5c31af7Sopenharmony_ci
124e5c31af7Sopenharmony_ciTo query the number of current faults and obtain the fault data, call
125e5c31af7Sopenharmony_ciflink:vkGetFaultData.
126e5c31af7Sopenharmony_ci
127e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetFaultData.adoc[]
128e5c31af7Sopenharmony_ci
129e5c31af7Sopenharmony_ci  * pname:device is the logical device to obtain faults from.
130e5c31af7Sopenharmony_ci  * pname:faultQueryBehavior is a elink:VkFaultQueryBehavior that specifies
131e5c31af7Sopenharmony_ci    the types of faults to obtain from the implementation, and how those
132e5c31af7Sopenharmony_ci    faults should be handled.
133e5c31af7Sopenharmony_ci  * pname:pUnrecordedFaults is a return boolean that specifies if the logged
134e5c31af7Sopenharmony_ci    fault information is incomplete and does not contain entries for all
135e5c31af7Sopenharmony_ci    faults that have been detected by the implementation and may: be
136e5c31af7Sopenharmony_ci    reported via flink:vkGetFaultData.
137e5c31af7Sopenharmony_ci  * pname:pFaultCount is a pointer to an integer that specifies the number
138e5c31af7Sopenharmony_ci    of fault entries.
139e5c31af7Sopenharmony_ci  * pname:pFaults is either `NULL` or a pointer to an array of
140e5c31af7Sopenharmony_ci    pname:pFaultCount slink:VkFaultData structures to be updated with the
141e5c31af7Sopenharmony_ci    recorded fault data.
142e5c31af7Sopenharmony_ci
143e5c31af7Sopenharmony_ciAccess to fault data is internally synchronized, meaning
144e5c31af7Sopenharmony_ciflink:vkGetFaultData can: be called from multiple threads simultaneously.
145e5c31af7Sopenharmony_ci
146e5c31af7Sopenharmony_ciThe implementation must: not record more than <<limits-maxQueryFaultCount,
147e5c31af7Sopenharmony_cipname:maxQueryFaultCount>> faults to be reported by flink:vkGetFaultData.
148e5c31af7Sopenharmony_ci
149e5c31af7Sopenharmony_cipname:pUnrecordedFaults is set to ename:VK_TRUE if the implementation has
150e5c31af7Sopenharmony_cidetected one or more faults since the last successful retrieval of fault
151e5c31af7Sopenharmony_cidata using this command, but was unable to record fault information for all
152e5c31af7Sopenharmony_cifaults.
153e5c31af7Sopenharmony_ciOtherwise, pname:pUnrecordedFaults is set to ename:VK_FALSE.
154e5c31af7Sopenharmony_ci
155e5c31af7Sopenharmony_ciIf pname:pFaults is `NULL`, then the number of faults with the specified
156e5c31af7Sopenharmony_cipname:faultQueryBehavior characteristics associated with pname:device is
157e5c31af7Sopenharmony_cireturned in pname:pFaultCount, and pname:pUnrecordedFaults is set as
158e5c31af7Sopenharmony_ciindicated above.
159e5c31af7Sopenharmony_ciOtherwise, pname:pFaultCount must: point to a variable set by the user to
160e5c31af7Sopenharmony_cithe number of elements in the pname:pFaults array, and on return the
161e5c31af7Sopenharmony_civariable is overwritten with the number of faults actually written to
162e5c31af7Sopenharmony_cipname:pFaults.
163e5c31af7Sopenharmony_ciIf pname:pFaultCount is less than the number of recorded pname:device faults
164e5c31af7Sopenharmony_ciwith the specified pname:faultQueryBehavior characteristics, at most
165e5c31af7Sopenharmony_cipname:pFaultCount faults will be written, and ename:VK_INCOMPLETE will be
166e5c31af7Sopenharmony_cireturned instead of ename:VK_SUCCESS, to indicate that not all the available
167e5c31af7Sopenharmony_cifaults were returned.
168e5c31af7Sopenharmony_ci
169e5c31af7Sopenharmony_ciOn success, the fault information stored by the implementation for the
170e5c31af7Sopenharmony_cifaults that were returned will be handled as specified by
171e5c31af7Sopenharmony_cipname:faultQueryBehavior.
172e5c31af7Sopenharmony_ci
173e5c31af7Sopenharmony_ciFor each filled pname:pFaults entry, if pname:pNext is not `NULL`, the
174e5c31af7Sopenharmony_ciimplementation will fill in any implementation-specific structures
175e5c31af7Sopenharmony_ciapplicable to that fault that are included in the pname:pNext chain.
176e5c31af7Sopenharmony_ci
177e5c31af7Sopenharmony_ci[NOTE]
178e5c31af7Sopenharmony_ci.Note
179e5c31af7Sopenharmony_ci====
180e5c31af7Sopenharmony_ciIn order to simplify the application logic, an application could have a
181e5c31af7Sopenharmony_cistatic allocation sized to <<limits-maxQueryFaultCount,
182e5c31af7Sopenharmony_cipname:maxQueryFaultCount>> which it passes in to each call of
183e5c31af7Sopenharmony_ciflink:vkGetFaultData.
184e5c31af7Sopenharmony_ciThis allows an application to obtain all the faults available at this time
185e5c31af7Sopenharmony_ciin a single call to flink:vkGetFaultData.
186e5c31af7Sopenharmony_ciFurthermore, under this usage pattern, the command will never return
187e5c31af7Sopenharmony_ciename:VK_INCOMPLETE.
188e5c31af7Sopenharmony_ci====
189e5c31af7Sopenharmony_ci
190e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
191e5c31af7Sopenharmony_ci
192e5c31af7Sopenharmony_ci.Valid Usage
193e5c31af7Sopenharmony_ci****
194e5c31af7Sopenharmony_ci  * [[VUID-vkGetFaultData-pFaultCount-05020]]
195e5c31af7Sopenharmony_ci    pname:pFaultCount must: be less than or equal to
196e5c31af7Sopenharmony_ci    <<limits-maxQueryFaultCount,pname:maxQueryFaultCount>>
197e5c31af7Sopenharmony_ci****
198e5c31af7Sopenharmony_ci
199e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetFaultData.adoc[]
200e5c31af7Sopenharmony_ci--
201e5c31af7Sopenharmony_ci
202e5c31af7Sopenharmony_ci
203e5c31af7Sopenharmony_ci[open,refpage='VkFaultQueryBehavior',desc='Controls how the faults are retrieved by vkGetFaultData',type='enums']
204e5c31af7Sopenharmony_ci--
205e5c31af7Sopenharmony_ciPossible values that can: be set in elink:VkFaultQueryBehavior, specifying
206e5c31af7Sopenharmony_ciwhich faults to return, are:
207e5c31af7Sopenharmony_ci
208e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkFaultQueryBehavior.adoc[]
209e5c31af7Sopenharmony_ci
210e5c31af7Sopenharmony_ci  * ename:VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS All fault types
211e5c31af7Sopenharmony_ci    and severities are reported and are cleared from the internal fault
212e5c31af7Sopenharmony_ci    storage after retrieval.
213e5c31af7Sopenharmony_ci
214e5c31af7Sopenharmony_ci--
215e5c31af7Sopenharmony_ci
216e5c31af7Sopenharmony_ci[[fault-callback]]
217e5c31af7Sopenharmony_ci=== Fault Callback
218e5c31af7Sopenharmony_ci
219e5c31af7Sopenharmony_ciThe slink:VkFaultCallbackInfo structure allows an application to register a
220e5c31af7Sopenharmony_cifunction at device creation that the implementation can call to report
221e5c31af7Sopenharmony_cifaults when they occur.
222e5c31af7Sopenharmony_ciA callback function is registered by attaching a valid
223e5c31af7Sopenharmony_cisname:VkFaultCallbackInfo structure to the pname:pNext chain of the
224e5c31af7Sopenharmony_cislink:VkDeviceCreateInfo structure.
225e5c31af7Sopenharmony_ciThe callback function is only called by the implementation during a call to
226e5c31af7Sopenharmony_cithe API, using the same thread that is making the API call.
227e5c31af7Sopenharmony_ciThe sname:VkFaultCallbackInfo structure provides the function pointer to be
228e5c31af7Sopenharmony_cicalled by the implementation, and optionally, application memory to store
229e5c31af7Sopenharmony_cifault data.
230e5c31af7Sopenharmony_ci
231e5c31af7Sopenharmony_ci[open,refpage='VkFaultCallbackInfo',desc='Fault call back information',type='structs']
232e5c31af7Sopenharmony_ci--
233e5c31af7Sopenharmony_ci
234e5c31af7Sopenharmony_ciThe sname:VkFaultCallbackInfo structure is defined as:
235e5c31af7Sopenharmony_ci
236e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkFaultCallbackInfo.adoc[]
237e5c31af7Sopenharmony_ci
238e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
239e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or pointer to a structure extending this
240e5c31af7Sopenharmony_ci    structure.
241e5c31af7Sopenharmony_ci  * pname:faultCount is the number of reported faults in the array pointed
242e5c31af7Sopenharmony_ci    to by pname:pFaults.
243e5c31af7Sopenharmony_ci  * pname:pFaults is either `NULL` or a pointer to an array of
244e5c31af7Sopenharmony_ci    pname:faultCount slink:VkFaultData structures.
245e5c31af7Sopenharmony_ci  * pname:pfnFaultCallback is a function pointer to the fault handler
246e5c31af7Sopenharmony_ci    function that will be called by the implementation when a fault occurs.
247e5c31af7Sopenharmony_ci
248e5c31af7Sopenharmony_ciIf provided, the implementation may: make use of the pname:pFaults array to
249e5c31af7Sopenharmony_cireturn fault data to the application when using the fault callback.
250e5c31af7Sopenharmony_ci
251e5c31af7Sopenharmony_ci[NOTE]
252e5c31af7Sopenharmony_ci.Note
253e5c31af7Sopenharmony_ci====
254e5c31af7Sopenharmony_ciPrior to Vulkan SC 1.0.11, the application was required to provide the
255e5c31af7Sopenharmony_cipname:pFaults array for fault callback data.
256e5c31af7Sopenharmony_ciThis proved to be unwieldy for both applications and implementations and it
257e5c31af7Sopenharmony_ciwas made optional as of version 1.0.11.
258e5c31af7Sopenharmony_ciIt is expected that most implementations will ignore this and use stack or
259e5c31af7Sopenharmony_ciother preallocated memory for fault callback parameters.
260e5c31af7Sopenharmony_ci====
261e5c31af7Sopenharmony_ci
262e5c31af7Sopenharmony_ciIf provided, the application memory referenced by pname:pFaults must: remain
263e5c31af7Sopenharmony_ciaccessible throughout the lifetime of the logical device that was created
264e5c31af7Sopenharmony_ciwith this structure.
265e5c31af7Sopenharmony_ci
266e5c31af7Sopenharmony_ci[NOTE]
267e5c31af7Sopenharmony_ci.Note
268e5c31af7Sopenharmony_ci====
269e5c31af7Sopenharmony_ciThe memory pointed to by pname:pFaults will be updated by the implementation
270e5c31af7Sopenharmony_ciand should not be used or accessed by the application outside of the fault
271e5c31af7Sopenharmony_cihandling function pointed to by pname:pfnFaultCallback.
272e5c31af7Sopenharmony_ciThis restriction also applies to any implementation-specific structure
273e5c31af7Sopenharmony_cichained to an element of pname:pFaults by pname:pNext.
274e5c31af7Sopenharmony_ci
275e5c31af7Sopenharmony_ciIt is expected that implementations will maintain separate storage for fault
276e5c31af7Sopenharmony_ciinformation and populate the array pointed to by pname:pFaults ahead of
277e5c31af7Sopenharmony_cicalling the fault callback function.
278e5c31af7Sopenharmony_ci====
279e5c31af7Sopenharmony_ci
280e5c31af7Sopenharmony_ci.Valid Usage
281e5c31af7Sopenharmony_ci****
282e5c31af7Sopenharmony_ci  * [[VUID-VkFaultCallbackInfo-faultCount-05138]]
283e5c31af7Sopenharmony_ci    pname:faultCount must: either be 0, or equal to
284e5c31af7Sopenharmony_ci    <<limits-maxCallbackFaultCount,
285e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceVulkanSC10Properties::pname:maxCallbackFaultCount>>
286e5c31af7Sopenharmony_ci****
287e5c31af7Sopenharmony_ci
288e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkFaultCallbackInfo.adoc[]
289e5c31af7Sopenharmony_ci--
290e5c31af7Sopenharmony_ci
291e5c31af7Sopenharmony_ci[open,refpage='PFN_vkFaultCallbackFunction',desc='Fault Callback Function',type='funcpointers']
292e5c31af7Sopenharmony_ci--
293e5c31af7Sopenharmony_ci
294e5c31af7Sopenharmony_ciThe function pointer tlink:PFN_vkFaultCallbackFunction is defined as:
295e5c31af7Sopenharmony_ci
296e5c31af7Sopenharmony_ciinclude::{generated}/api/funcpointers/PFN_vkFaultCallbackFunction.adoc[]
297e5c31af7Sopenharmony_ci
298e5c31af7Sopenharmony_ci  * pname:unrecordedFaults is a boolean that specifies if the supplied fault
299e5c31af7Sopenharmony_ci    information is incomplete and does not contain entries for all faults
300e5c31af7Sopenharmony_ci    that have been detected by the implementation and may: be reported via
301e5c31af7Sopenharmony_ci    tlink:PFN_vkFaultCallbackFunction since the last call to this callback.
302e5c31af7Sopenharmony_ci  * pname:faultCount will contain the number of reported faults in the array
303e5c31af7Sopenharmony_ci    pointed to by pname:pFaults.
304e5c31af7Sopenharmony_ci  * pname:pFaults will point to an array of pname:faultCount
305e5c31af7Sopenharmony_ci    slink:VkFaultData structures containing the fault information.
306e5c31af7Sopenharmony_ci
307e5c31af7Sopenharmony_ciAn implementation must: only make calls to pname:pfnFaultCallback during the
308e5c31af7Sopenharmony_ciexecution of an API command.
309e5c31af7Sopenharmony_ciAn implementation must: only make calls into the application-provided fault
310e5c31af7Sopenharmony_cicallback from the same thread that called the API command.
311e5c31af7Sopenharmony_ciThe implementation should: not synchronize calls to the callback.
312e5c31af7Sopenharmony_ciIf synchronization is needed, the callback must: provide it.
313e5c31af7Sopenharmony_ci
314e5c31af7Sopenharmony_ciThe fault callback must: not call any Vulkan commands.
315e5c31af7Sopenharmony_ci
316e5c31af7Sopenharmony_ciIt is implementation-dependent whether faults reported by this callback are
317e5c31af7Sopenharmony_cialso reported via flink:vkGetFaultData, but each unique fault will be
318e5c31af7Sopenharmony_cireported by at most one callback.
319e5c31af7Sopenharmony_ci--
320e5c31af7Sopenharmony_ci
321e5c31af7Sopenharmony_ciifdef::hidden[]
322e5c31af7Sopenharmony_ci// tag::scaddition[]
323e5c31af7Sopenharmony_ci  * slink:VkFaultData <<SCID-6>>
324e5c31af7Sopenharmony_ci  * slink:VkFaultCallbackInfo <<SCID-6>>
325e5c31af7Sopenharmony_ci  * elink:VkFaultLevel <<SCID-6>>
326e5c31af7Sopenharmony_ci  * elink:VkFaultType <<SCID-6>>
327e5c31af7Sopenharmony_ci  * elink:VkFaultQueryBehavior <<SCID-6>>
328e5c31af7Sopenharmony_ci  * tlink:PFN_vkFaultCallbackFunction <<SCID-6>>
329e5c31af7Sopenharmony_ci  * flink:vkGetFaultData <<SCID-6>>
330e5c31af7Sopenharmony_ci// end::scaddition[]
331e5c31af7Sopenharmony_ciendif::hidden[]
332