1e5c31af7Sopenharmony_ci// Copyright 2015-2024 The Khronos Group Inc.
2e5c31af7Sopenharmony_ci//
3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ci[[devsandqueues]]
6e5c31af7Sopenharmony_ci= Devices and Queues
7e5c31af7Sopenharmony_ci
8e5c31af7Sopenharmony_ciOnce Vulkan is initialized, devices and queues are the primary objects used
9e5c31af7Sopenharmony_cito interact with a Vulkan implementation.
10e5c31af7Sopenharmony_ci
11e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDevice',desc='Opaque handle to a physical device object',type='handles']
12e5c31af7Sopenharmony_ci--
13e5c31af7Sopenharmony_ciVulkan separates the concept of _physical_ and _logical_ devices.
14e5c31af7Sopenharmony_ciA physical device usually represents a single complete implementation of
15e5c31af7Sopenharmony_ciVulkan (excluding instance-level functionality) available to the host, of
16e5c31af7Sopenharmony_ciwhich there are a finite number.
17e5c31af7Sopenharmony_ciA logical device represents an instance of that implementation with its own
18e5c31af7Sopenharmony_cistate and resources independent of other logical devices.
19e5c31af7Sopenharmony_ci
20e5c31af7Sopenharmony_ciPhysical devices are represented by sname:VkPhysicalDevice handles:
21e5c31af7Sopenharmony_ci
22e5c31af7Sopenharmony_ciinclude::{generated}/api/handles/VkPhysicalDevice.adoc[]
23e5c31af7Sopenharmony_ci--
24e5c31af7Sopenharmony_ci
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ci[[devsandqueues-physical-device-enumeration]]
27e5c31af7Sopenharmony_ci== Physical Devices
28e5c31af7Sopenharmony_ci
29e5c31af7Sopenharmony_ci[open,refpage='vkEnumeratePhysicalDevices',desc='Enumerates the physical devices accessible to a Vulkan instance',type='protos']
30e5c31af7Sopenharmony_ci--
31e5c31af7Sopenharmony_ciTo retrieve a list of physical device objects representing the physical
32e5c31af7Sopenharmony_cidevices installed in the system, call:
33e5c31af7Sopenharmony_ci
34e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkEnumeratePhysicalDevices.adoc[]
35e5c31af7Sopenharmony_ci
36e5c31af7Sopenharmony_ci  * pname:instance is a handle to a Vulkan instance previously created with
37e5c31af7Sopenharmony_ci    flink:vkCreateInstance.
38e5c31af7Sopenharmony_ci  * pname:pPhysicalDeviceCount is a pointer to an integer related to the
39e5c31af7Sopenharmony_ci    number of physical devices available or queried, as described below.
40e5c31af7Sopenharmony_ci  * pname:pPhysicalDevices is either `NULL` or a pointer to an array of
41e5c31af7Sopenharmony_ci    sname:VkPhysicalDevice handles.
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_ciIf pname:pPhysicalDevices is `NULL`, then the number of physical devices
44e5c31af7Sopenharmony_ciavailable is returned in pname:pPhysicalDeviceCount.
45e5c31af7Sopenharmony_ciOtherwise, pname:pPhysicalDeviceCount must: point to a variable set by the
46e5c31af7Sopenharmony_ciuser to the number of elements in the pname:pPhysicalDevices array, and on
47e5c31af7Sopenharmony_cireturn the variable is overwritten with the number of handles actually
48e5c31af7Sopenharmony_ciwritten to pname:pPhysicalDevices.
49e5c31af7Sopenharmony_ciIf pname:pPhysicalDeviceCount is less than the number of physical devices
50e5c31af7Sopenharmony_ciavailable, at most pname:pPhysicalDeviceCount structures will be written,
51e5c31af7Sopenharmony_ciand ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
52e5c31af7Sopenharmony_ciindicate that not all the available physical devices were returned.
53e5c31af7Sopenharmony_ci
54e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkEnumeratePhysicalDevices.adoc[]
55e5c31af7Sopenharmony_ci--
56e5c31af7Sopenharmony_ci
57e5c31af7Sopenharmony_ci[open,refpage='vkGetPhysicalDeviceProperties',desc='Returns properties of a physical device',type='protos']
58e5c31af7Sopenharmony_ci--
59e5c31af7Sopenharmony_ciTo query general properties of physical devices once enumerated, call:
60e5c31af7Sopenharmony_ci
61e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPhysicalDeviceProperties.adoc[]
62e5c31af7Sopenharmony_ci
63e5c31af7Sopenharmony_ci  * pname:physicalDevice is the handle to the physical device whose
64e5c31af7Sopenharmony_ci    properties will be queried.
65e5c31af7Sopenharmony_ci  * pname:pProperties is a pointer to a slink:VkPhysicalDeviceProperties
66e5c31af7Sopenharmony_ci    structure in which properties are returned.
67e5c31af7Sopenharmony_ci
68e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPhysicalDeviceProperties.adoc[]
69e5c31af7Sopenharmony_ci--
70e5c31af7Sopenharmony_ci
71e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceProperties',desc='Structure specifying physical device properties',type='structs']
72e5c31af7Sopenharmony_ci--
73e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceProperties structure is defined as:
74e5c31af7Sopenharmony_ci
75e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceProperties.adoc[]
76e5c31af7Sopenharmony_ci
77e5c31af7Sopenharmony_ci  * pname:apiVersion is the version of Vulkan supported by the device,
78e5c31af7Sopenharmony_ci    encoded as described in <<extendingvulkan-coreversions-versionnumbers>>.
79e5c31af7Sopenharmony_ci  * pname:driverVersion is the vendor-specified version of the driver.
80e5c31af7Sopenharmony_ci  * pname:vendorID is a unique identifier for the _vendor_ (see below) of
81e5c31af7Sopenharmony_ci    the physical device.
82e5c31af7Sopenharmony_ci  * pname:deviceID is a unique identifier for the physical device among
83e5c31af7Sopenharmony_ci    devices available from the vendor.
84e5c31af7Sopenharmony_ci  * pname:deviceType is a elink:VkPhysicalDeviceType specifying the type of
85e5c31af7Sopenharmony_ci    device.
86e5c31af7Sopenharmony_ci  * pname:deviceName is an array of ename:VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
87e5c31af7Sopenharmony_ci    code:char containing a null-terminated UTF-8 string which is the name of
88e5c31af7Sopenharmony_ci    the device.
89e5c31af7Sopenharmony_ci  * pname:pipelineCacheUUID is an array of ename:VK_UUID_SIZE code:uint8_t
90e5c31af7Sopenharmony_ci    values representing a universally unique identifier for the device.
91e5c31af7Sopenharmony_ci  * pname:limits is the slink:VkPhysicalDeviceLimits structure specifying
92e5c31af7Sopenharmony_ci    device-specific limits of the physical device.
93e5c31af7Sopenharmony_ci    See <<limits, Limits>> for details.
94e5c31af7Sopenharmony_ci  * pname:sparseProperties is the slink:VkPhysicalDeviceSparseProperties
95e5c31af7Sopenharmony_ci    structure specifying various sparse related properties of the physical
96e5c31af7Sopenharmony_ci    device.
97e5c31af7Sopenharmony_ci    See <<sparsememory-physicalprops, Sparse Properties>> for details.
98e5c31af7Sopenharmony_ci
99e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
100e5c31af7Sopenharmony_ci[NOTE]
101e5c31af7Sopenharmony_ci.Note
102e5c31af7Sopenharmony_ci====
103e5c31af7Sopenharmony_ciThe value of pname:apiVersion may: be different than the version returned by
104e5c31af7Sopenharmony_ciflink:vkEnumerateInstanceVersion; either higher or lower.
105e5c31af7Sopenharmony_ciIn such cases, the application must: not use functionality that exceeds the
106e5c31af7Sopenharmony_civersion of Vulkan associated with a given object.
107e5c31af7Sopenharmony_ciThe pname:pApiVersion parameter returned by flink:vkEnumerateInstanceVersion
108e5c31af7Sopenharmony_ciis the version associated with a slink:VkInstance and its children, except
109e5c31af7Sopenharmony_cifor a slink:VkPhysicalDevice and its children.
110e5c31af7Sopenharmony_cisname:VkPhysicalDeviceProperties::pname:apiVersion is the version associated
111e5c31af7Sopenharmony_ciwith a slink:VkPhysicalDevice and its children.
112e5c31af7Sopenharmony_ci====
113e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
114e5c31af7Sopenharmony_ci
115e5c31af7Sopenharmony_ci[NOTE]
116e5c31af7Sopenharmony_ci.Note
117e5c31af7Sopenharmony_ci====
118e5c31af7Sopenharmony_ciThe encoding of pname:driverVersion is implementation-defined.
119e5c31af7Sopenharmony_ciIt may: not use the same encoding as pname:apiVersion.
120e5c31af7Sopenharmony_ciApplications should follow information from the _vendor_ on how to extract
121e5c31af7Sopenharmony_cithe version information from pname:driverVersion.
122e5c31af7Sopenharmony_ci====
123e5c31af7Sopenharmony_ci
124e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3[]
125e5c31af7Sopenharmony_ciOn implementations that claim support for the <<roadmap-2022, Roadmap 2022>>
126e5c31af7Sopenharmony_ciprofile, the major and minor version expressed by pname:apiVersion must: be
127e5c31af7Sopenharmony_ciat least Vulkan 1.3.
128e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3[]
129e5c31af7Sopenharmony_ci
130e5c31af7Sopenharmony_ciThe pname:vendorID and pname:deviceID fields are provided to allow
131e5c31af7Sopenharmony_ciapplications to adapt to device characteristics that are not adequately
132e5c31af7Sopenharmony_ciexposed by other Vulkan queries.
133e5c31af7Sopenharmony_ci
134e5c31af7Sopenharmony_ci[NOTE]
135e5c31af7Sopenharmony_ci.Note
136e5c31af7Sopenharmony_ci====
137e5c31af7Sopenharmony_ciThese may: include performance profiles, hardware errata, or other
138e5c31af7Sopenharmony_cicharacteristics.
139e5c31af7Sopenharmony_ci====
140e5c31af7Sopenharmony_ci
141e5c31af7Sopenharmony_ciThe _vendor_ identified by pname:vendorID is the entity responsible for the
142e5c31af7Sopenharmony_cimost salient characteristics of the underlying implementation of the
143e5c31af7Sopenharmony_cislink:VkPhysicalDevice being queried.
144e5c31af7Sopenharmony_ci
145e5c31af7Sopenharmony_ci[NOTE]
146e5c31af7Sopenharmony_ci.Note
147e5c31af7Sopenharmony_ci====
148e5c31af7Sopenharmony_ciFor example, in the case of a discrete GPU implementation, this should: be
149e5c31af7Sopenharmony_cithe GPU chipset vendor.
150e5c31af7Sopenharmony_ciIn the case of a hardware accelerator integrated into a system-on-chip
151e5c31af7Sopenharmony_ci(SoC), this should: be the supplier of the silicon IP used to create the
152e5c31af7Sopenharmony_ciaccelerator.
153e5c31af7Sopenharmony_ci====
154e5c31af7Sopenharmony_ci
155e5c31af7Sopenharmony_ciIf the vendor has a https://pcisig.com/membership/member-companies[PCI
156e5c31af7Sopenharmony_civendor ID], the low 16 bits of pname:vendorID must: contain that PCI vendor
157e5c31af7Sopenharmony_ciID, and the remaining bits must: be set to zero.
158e5c31af7Sopenharmony_ciOtherwise, the value returned must: be a valid Khronos vendor ID, obtained
159e5c31af7Sopenharmony_cias described in the <<vulkan-styleguide,Vulkan Documentation and Extensions:
160e5c31af7Sopenharmony_ciProcedures and Conventions>> document in the section "`Registering a Vendor
161e5c31af7Sopenharmony_ciID with Khronos`".
162e5c31af7Sopenharmony_ciKhronos vendor IDs are allocated starting at 0x10000, to distinguish them
163e5c31af7Sopenharmony_cifrom the PCI vendor ID namespace.
164e5c31af7Sopenharmony_ciKhronos vendor IDs are symbolically defined in the elink:VkVendorId type.
165e5c31af7Sopenharmony_ci
166e5c31af7Sopenharmony_ciThe vendor is also responsible for the value returned in pname:deviceID.
167e5c31af7Sopenharmony_ciIf the implementation is driven primarily by a https://pcisig.com/[PCI
168e5c31af7Sopenharmony_cidevice] with a https://pcisig.com/[PCI device ID], the low 16 bits of
169e5c31af7Sopenharmony_cipname:deviceID must: contain that PCI device ID, and the remaining bits
170e5c31af7Sopenharmony_cimust: be set to zero.
171e5c31af7Sopenharmony_ciOtherwise, the choice of what values to return may: be dictated by operating
172e5c31af7Sopenharmony_cisystem or platform policies - but should: uniquely identify both the device
173e5c31af7Sopenharmony_civersion and any major configuration options (for example, core count in the
174e5c31af7Sopenharmony_cicase of multicore devices).
175e5c31af7Sopenharmony_ci
176e5c31af7Sopenharmony_ci[NOTE]
177e5c31af7Sopenharmony_ci.Note
178e5c31af7Sopenharmony_ci====
179e5c31af7Sopenharmony_ciThe same device ID should: be used for all physical implementations of that
180e5c31af7Sopenharmony_cidevice version and configuration.
181e5c31af7Sopenharmony_ciFor example, all uses of a specific silicon IP GPU version and configuration
182e5c31af7Sopenharmony_cishould: use the same device ID, even if those uses occur in different SoCs.
183e5c31af7Sopenharmony_ci====
184e5c31af7Sopenharmony_ci
185e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceProperties.adoc[]
186e5c31af7Sopenharmony_ci--
187e5c31af7Sopenharmony_ci
188e5c31af7Sopenharmony_ci[open,refpage='VkVendorId',desc='Khronos vendor IDs',type='enums']
189e5c31af7Sopenharmony_ci--
190e5c31af7Sopenharmony_ciKhronos vendor IDs which may: be returned in
191e5c31af7Sopenharmony_cislink:VkPhysicalDeviceProperties::pname:vendorID are:
192e5c31af7Sopenharmony_ci
193e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkVendorId.adoc[]
194e5c31af7Sopenharmony_ci
195e5c31af7Sopenharmony_ci[NOTE]
196e5c31af7Sopenharmony_ci.Note
197e5c31af7Sopenharmony_ci====
198e5c31af7Sopenharmony_ciKhronos vendor IDs may be allocated by vendors at any time.
199e5c31af7Sopenharmony_ciOnly the latest canonical versions of this Specification, of the
200e5c31af7Sopenharmony_cicorresponding `vk.xml` API Registry, and of the corresponding
201e5c31af7Sopenharmony_ci`{core_header}` header file must: contain all reserved Khronos vendor IDs.
202e5c31af7Sopenharmony_ci
203e5c31af7Sopenharmony_ciOnly Khronos vendor IDs are given symbolic names at present.
204e5c31af7Sopenharmony_ciPCI vendor IDs returned by the implementation can be looked up in the
205e5c31af7Sopenharmony_ciPCI-SIG database.
206e5c31af7Sopenharmony_ci====
207e5c31af7Sopenharmony_ci--
208e5c31af7Sopenharmony_ci
209e5c31af7Sopenharmony_ci[open,refpage='VK_MAX_PHYSICAL_DEVICE_NAME_SIZE',desc='Length of a physical device name string',type='consts']
210e5c31af7Sopenharmony_ci--
211e5c31af7Sopenharmony_ciename:VK_MAX_PHYSICAL_DEVICE_NAME_SIZE is the length in code:char values of
212e5c31af7Sopenharmony_cian array containing a physical device name string, as returned in
213e5c31af7Sopenharmony_cislink:VkPhysicalDeviceProperties::pname:deviceName.
214e5c31af7Sopenharmony_ci
215e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_PHYSICAL_DEVICE_NAME_SIZE.adoc[]
216e5c31af7Sopenharmony_ci--
217e5c31af7Sopenharmony_ci
218e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceType',desc='Supported physical device types',type='enums']
219e5c31af7Sopenharmony_ci--
220e5c31af7Sopenharmony_ciThe physical device types which may: be returned in
221e5c31af7Sopenharmony_cislink:VkPhysicalDeviceProperties::pname:deviceType are:
222e5c31af7Sopenharmony_ci
223e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPhysicalDeviceType.adoc[]
224e5c31af7Sopenharmony_ci
225e5c31af7Sopenharmony_ci  * ename:VK_PHYSICAL_DEVICE_TYPE_OTHER - the device does not match any
226e5c31af7Sopenharmony_ci    other available types.
227e5c31af7Sopenharmony_ci  * ename:VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU - the device is typically
228e5c31af7Sopenharmony_ci    one embedded in or tightly coupled with the host.
229e5c31af7Sopenharmony_ci  * ename:VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU - the device is typically a
230e5c31af7Sopenharmony_ci    separate processor connected to the host via an interlink.
231e5c31af7Sopenharmony_ci  * ename:VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU - the device is typically a
232e5c31af7Sopenharmony_ci    virtual node in a virtualization environment.
233e5c31af7Sopenharmony_ci  * ename:VK_PHYSICAL_DEVICE_TYPE_CPU - the device is typically running on
234e5c31af7Sopenharmony_ci    the same processors as the host.
235e5c31af7Sopenharmony_ci
236e5c31af7Sopenharmony_ciThe physical device type is advertised for informational purposes only, and
237e5c31af7Sopenharmony_cidoes not directly affect the operation of the system.
238e5c31af7Sopenharmony_ciHowever, the device type may: correlate with other advertised properties or
239e5c31af7Sopenharmony_cicapabilities of the system, such as how many memory heaps there are.
240e5c31af7Sopenharmony_ci--
241e5c31af7Sopenharmony_ci
242e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
243e5c31af7Sopenharmony_ci[open,refpage='vkGetPhysicalDeviceProperties2',desc='Returns properties of a physical device',type='protos']
244e5c31af7Sopenharmony_ci--
245e5c31af7Sopenharmony_ciTo query general properties of physical devices once enumerated, call:
246e5c31af7Sopenharmony_ci
247e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
248e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPhysicalDeviceProperties2.adoc[]
249e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
250e5c31af7Sopenharmony_ci
251e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
252e5c31af7Sopenharmony_ci
253e5c31af7Sopenharmony_ciifdef::VK_KHR_get_physical_device_properties2[]
254e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPhysicalDeviceProperties2KHR.adoc[]
255e5c31af7Sopenharmony_ciendif::VK_KHR_get_physical_device_properties2[]
256e5c31af7Sopenharmony_ci
257e5c31af7Sopenharmony_ci  * pname:physicalDevice is the handle to the physical device whose
258e5c31af7Sopenharmony_ci    properties will be queried.
259e5c31af7Sopenharmony_ci  * pname:pProperties is a pointer to a slink:VkPhysicalDeviceProperties2
260e5c31af7Sopenharmony_ci    structure in which properties are returned.
261e5c31af7Sopenharmony_ci
262e5c31af7Sopenharmony_ciEach structure in pname:pProperties and its pname:pNext chain contains
263e5c31af7Sopenharmony_cimembers corresponding to implementation-dependent properties, behaviors, or
264e5c31af7Sopenharmony_cilimits.
265e5c31af7Sopenharmony_cifname:vkGetPhysicalDeviceProperties2 fills in each member to specify the
266e5c31af7Sopenharmony_cicorresponding value for the implementation.
267e5c31af7Sopenharmony_ci
268e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPhysicalDeviceProperties2.adoc[]
269e5c31af7Sopenharmony_ci--
270e5c31af7Sopenharmony_ci
271e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceProperties2',desc='Structure specifying physical device properties',type='structs']
272e5c31af7Sopenharmony_ci--
273e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceProperties2 structure is defined as:
274e5c31af7Sopenharmony_ci
275e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceProperties2.adoc[]
276e5c31af7Sopenharmony_ci
277e5c31af7Sopenharmony_ciifdef::VK_KHR_get_physical_device_properties2[]
278e5c31af7Sopenharmony_cior the equivalent
279e5c31af7Sopenharmony_ci
280e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceProperties2KHR.adoc[]
281e5c31af7Sopenharmony_ciendif::VK_KHR_get_physical_device_properties2[]
282e5c31af7Sopenharmony_ci
283e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
284e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
285e5c31af7Sopenharmony_ci    structure.
286e5c31af7Sopenharmony_ci  * pname:properties is a slink:VkPhysicalDeviceProperties structure
287e5c31af7Sopenharmony_ci    describing properties of the physical device.
288e5c31af7Sopenharmony_ci    This structure is written with the same values as if it were written by
289e5c31af7Sopenharmony_ci    flink:vkGetPhysicalDeviceProperties.
290e5c31af7Sopenharmony_ci
291e5c31af7Sopenharmony_ciThe pname:pNext chain of this structure is used to extend the structure with
292e5c31af7Sopenharmony_ciproperties defined by extensions.
293e5c31af7Sopenharmony_ci
294e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceProperties2.adoc[]
295e5c31af7Sopenharmony_ci--
296e5c31af7Sopenharmony_ci
297e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2[]
298e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceVulkan11Properties',desc='Structure specifying physical device properties for functionality promoted to Vulkan 1.1',type='structs']
299e5c31af7Sopenharmony_ci--
300e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceVulkan11Properties structure is defined as:
301e5c31af7Sopenharmony_ci
302e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceVulkan11Properties.adoc[]
303e5c31af7Sopenharmony_ci
304e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
305e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
306e5c31af7Sopenharmony_ci    structure.
307e5c31af7Sopenharmony_ci
308e5c31af7Sopenharmony_ci:anchor-prefix:
309e5c31af7Sopenharmony_ciinclude::{chapters}/devsandqueues.adoc[tag=VK_KHR_external_memory_capabilities-properties]
310e5c31af7Sopenharmony_ci  * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the
311e5c31af7Sopenharmony_ci    default number of invocations in each subgroup.
312e5c31af7Sopenharmony_ci    pname:subgroupSize is at least 1 if any of the physical device's queues
313e5c31af7Sopenharmony_ci    support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
314e5c31af7Sopenharmony_ci    pname:subgroupSize is a power-of-two.
315e5c31af7Sopenharmony_ci  * [[{anchor-prefix}limits-subgroupSupportedStages]]
316e5c31af7Sopenharmony_ci    pname:subgroupSupportedStages is a bitfield of
317e5c31af7Sopenharmony_ci    elink:VkShaderStageFlagBits describing the shader stages that
318e5c31af7Sopenharmony_ci    <<shaders-group-operations, group operations>> with
319e5c31af7Sopenharmony_ci    <<shaders-scope-subgroup, subgroup scope>> are supported in.
320e5c31af7Sopenharmony_ci    pname:subgroupSupportedStages will have the
321e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
322e5c31af7Sopenharmony_ci    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
323e5c31af7Sopenharmony_ci  * pname:subgroupSupportedOperations is a bitmask of
324e5c31af7Sopenharmony_ci    elink:VkSubgroupFeatureFlagBits specifying the sets of
325e5c31af7Sopenharmony_ci    <<shaders-group-operations, group operations>> with
326e5c31af7Sopenharmony_ci    <<shaders-scope-subgroup, subgroup scope>> supported on this device.
327e5c31af7Sopenharmony_ci    pname:subgroupSupportedOperations will have the
328e5c31af7Sopenharmony_ci    ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical
329e5c31af7Sopenharmony_ci    device's queues support ename:VK_QUEUE_GRAPHICS_BIT or
330e5c31af7Sopenharmony_ci    ename:VK_QUEUE_COMPUTE_BIT.
331e5c31af7Sopenharmony_ci  * [[{anchor-prefix}limits-subgroupQuadOperationsInAllStages]]
332e5c31af7Sopenharmony_ci    pname:subgroupQuadOperationsInAllStages is a boolean specifying whether
333e5c31af7Sopenharmony_ci    <<shaders-quad-operations,quad group operations>> are available in all
334e5c31af7Sopenharmony_ci    stages, or are restricted to fragment and compute stages.
335e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_KHR_maintenance2-properties]
336e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_KHR_multiview-properties]
337e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_KHR_protected_memory-properties]
338e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_KHR_maintenance3-properties]
339e5c31af7Sopenharmony_ci
340e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceVulkan11Properties
341e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
342e5c31af7Sopenharmony_ci
343e5c31af7Sopenharmony_ciThese properties correspond to Vulkan 1.1 functionality.
344e5c31af7Sopenharmony_ci
345e5c31af7Sopenharmony_ciThe members of sname:VkPhysicalDeviceVulkan11Properties have the same values
346e5c31af7Sopenharmony_cias the corresponding members of slink:VkPhysicalDeviceIDProperties,
347e5c31af7Sopenharmony_cislink:VkPhysicalDeviceSubgroupProperties,
348e5c31af7Sopenharmony_cislink:VkPhysicalDevicePointClippingProperties,
349e5c31af7Sopenharmony_cislink:VkPhysicalDeviceMultiviewProperties,
350e5c31af7Sopenharmony_cislink:VkPhysicalDeviceProtectedMemoryProperties, and
351e5c31af7Sopenharmony_cislink:VkPhysicalDeviceMaintenance3Properties.
352e5c31af7Sopenharmony_ci
353e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceVulkan11Properties.adoc[]
354e5c31af7Sopenharmony_ci--
355e5c31af7Sopenharmony_ci
356e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceVulkan12Properties',desc='Structure specifying physical device properties for functionality promoted to Vulkan 1.2',type='structs']
357e5c31af7Sopenharmony_ci--
358e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceVulkan12Properties structure is defined as:
359e5c31af7Sopenharmony_ci
360e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceVulkan12Properties.adoc[]
361e5c31af7Sopenharmony_ci
362e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
363e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
364e5c31af7Sopenharmony_ci    structure.
365e5c31af7Sopenharmony_ci
366e5c31af7Sopenharmony_ci:anchor-prefix:
367e5c31af7Sopenharmony_ciinclude::{chapters}/devsandqueues.adoc[tag=VK_KHR_driver_properties-properties]
368e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_KHR_shader_float_controls-properties]
369e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_EXT_descriptor_indexing-properties]
370e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_KHR_depth_stencil_resolve-properties]
371e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_EXT_sampler_filter_minmax-properties]
372e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_KHR_timeline_semaphore-properties]
373e5c31af7Sopenharmony_ci  * [[limits-framebufferIntegerColorSampleCounts]]
374e5c31af7Sopenharmony_ci    pname:framebufferIntegerColorSampleCounts is a bitmask of
375e5c31af7Sopenharmony_ci    elink:VkSampleCountFlagBits indicating the color sample counts that are
376e5c31af7Sopenharmony_ci    supported for all framebuffer color attachments with integer formats.
377e5c31af7Sopenharmony_ci
378e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceVulkan12Properties
379e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
380e5c31af7Sopenharmony_ci
381e5c31af7Sopenharmony_ciThese properties correspond to Vulkan 1.2 functionality.
382e5c31af7Sopenharmony_ci
383e5c31af7Sopenharmony_ciThe members of sname:VkPhysicalDeviceVulkan12Properties must: have the same
384e5c31af7Sopenharmony_civalues as the corresponding members of
385e5c31af7Sopenharmony_cislink:VkPhysicalDeviceDriverProperties,
386e5c31af7Sopenharmony_cislink:VkPhysicalDeviceFloatControlsProperties,
387e5c31af7Sopenharmony_cislink:VkPhysicalDeviceDescriptorIndexingProperties,
388e5c31af7Sopenharmony_cislink:VkPhysicalDeviceDepthStencilResolveProperties,
389e5c31af7Sopenharmony_cislink:VkPhysicalDeviceSamplerFilterMinmaxProperties, and
390e5c31af7Sopenharmony_cislink:VkPhysicalDeviceTimelineSemaphoreProperties.
391e5c31af7Sopenharmony_ci
392e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceVulkan12Properties.adoc[]
393e5c31af7Sopenharmony_ci--
394e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2[]
395e5c31af7Sopenharmony_ci
396e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
397e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceVulkanSC10Properties',desc='Structure describing safety critical properties supported by an implementation',type='structs']
398e5c31af7Sopenharmony_ci--
399e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceVulkanSC10Properties structure is defined as:
400e5c31af7Sopenharmony_ci
401e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceVulkanSC10Properties.adoc[]
402e5c31af7Sopenharmony_ci
403e5c31af7Sopenharmony_ci:anchor-prefix:
404e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
405e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
406e5c31af7Sopenharmony_ci    structure.
407e5c31af7Sopenharmony_ci  * [[limits-deviceNoDynamicHostAllocations]]
408e5c31af7Sopenharmony_ci    pname:deviceNoDynamicHostAllocations indicates whether the
409e5c31af7Sopenharmony_ci    implementation will perform dynamic host memory allocations for physical
410e5c31af7Sopenharmony_ci    or logical device commands.
411e5c31af7Sopenharmony_ci    If pname:deviceNoDynamicHostAllocations is ename:VK_TRUE the
412e5c31af7Sopenharmony_ci    implementation will allocate host memory for objects based on the
413e5c31af7Sopenharmony_ci    provided slink:VkDeviceObjectReservationCreateInfo limits during
414e5c31af7Sopenharmony_ci    flink:vkCreateDevice.
415e5c31af7Sopenharmony_ci    Under valid API usage, ename:VK_ERROR_OUT_OF_HOST_MEMORY may: only be
416e5c31af7Sopenharmony_ci    returned by commands which do not explicitly disallow it.
417e5c31af7Sopenharmony_ci  * [[limits-deviceDestroyFreesMemory]] pname:deviceDestroyFreesMemory
418e5c31af7Sopenharmony_ci    indicates whether destroying the device frees all memory resources back
419e5c31af7Sopenharmony_ci    to the system.
420e5c31af7Sopenharmony_ci  * [[limits-commandPoolMultipleCommandBuffersRecording]]
421e5c31af7Sopenharmony_ci    pname:commandPoolMultipleCommandBuffersRecording indicates whether
422e5c31af7Sopenharmony_ci    multiple command buffers from the same command pool can: be in the
423e5c31af7Sopenharmony_ci    <<commandbuffers-lifecycle, recording state>> at the same time.
424e5c31af7Sopenharmony_ci  * [[limits-commandPoolResetCommandBuffer]]
425e5c31af7Sopenharmony_ci    pname:commandPoolResetCommandBuffer indicates whether command buffers
426e5c31af7Sopenharmony_ci    support flink:vkResetCommandBuffer, and flink:vkBeginCommandBuffer when
427e5c31af7Sopenharmony_ci    not in the <<commandbuffers-lifecycle, initial state>>.
428e5c31af7Sopenharmony_ci  * [[limits-commandBufferSimultaneousUse]]
429e5c31af7Sopenharmony_ci    pname:commandBufferSimultaneousUse indicates whether command buffers
430e5c31af7Sopenharmony_ci    support ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT.
431e5c31af7Sopenharmony_ci  * [[limits-secondaryCommandBufferNullOrImagelessFramebuffer]]
432e5c31af7Sopenharmony_ci    pname:secondaryCommandBufferNullOrImagelessFramebuffer indicates whether
433e5c31af7Sopenharmony_ci    the pname:framebuffer member of sname:VkCommandBufferInheritanceInfo
434e5c31af7Sopenharmony_ci    may: be equal to dlink:VK_NULL_HANDLE or be created with a
435e5c31af7Sopenharmony_ci    slink:VkFramebufferCreateInfo::pname:flags value that includes
436e5c31af7Sopenharmony_ci    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT if the command buffer will be
437e5c31af7Sopenharmony_ci    executed within a render pass instance.
438e5c31af7Sopenharmony_ci  * [[limits-recycleDescriptorSetMemory]] pname:recycleDescriptorSetMemory
439e5c31af7Sopenharmony_ci    indicates whether descriptor pools are able to immediately reuse pool
440e5c31af7Sopenharmony_ci    memory from descriptor sets that have been freed.
441e5c31af7Sopenharmony_ci    If this is ename:VK_FALSE, then memory may: only be reallocated after
442e5c31af7Sopenharmony_ci    flink:vkResetDescriptorPool is called.
443e5c31af7Sopenharmony_ci  * [[limits-recyclePipelineMemory]] pname:recyclePipelineMemory indicates
444e5c31af7Sopenharmony_ci    whether the memory for a pipeline is available for reuse by new
445e5c31af7Sopenharmony_ci    pipelines after the pipeline is destroyed.
446e5c31af7Sopenharmony_ci  * [[limits-maxRenderPassSubpasses]] pname:maxRenderPassSubpasses is the
447e5c31af7Sopenharmony_ci    maximum number of subpasses in a render pass.
448e5c31af7Sopenharmony_ci  * [[limits-maxRenderPassDependencies]] pname:maxRenderPassDependencies is
449e5c31af7Sopenharmony_ci    the maximum number of dependencies in a render pass.
450e5c31af7Sopenharmony_ci  * [[limits-maxSubpassInputAttachments]] pname:maxSubpassInputAttachments
451e5c31af7Sopenharmony_ci    is the maximum number of input attachments in a subpass.
452e5c31af7Sopenharmony_ci  * [[limits-maxSubpassPreserveAttachments]]
453e5c31af7Sopenharmony_ci    pname:maxSubpassPreserveAttachments is the maximum number of preserve
454e5c31af7Sopenharmony_ci    attachments in a subpass.
455e5c31af7Sopenharmony_ci  * [[limits-maxFramebufferAttachments]] pname:maxFramebufferAttachments is
456e5c31af7Sopenharmony_ci    the maximum number of attachments in a framebuffer, as well as the
457e5c31af7Sopenharmony_ci    maximum number of attachments in a render pass.
458e5c31af7Sopenharmony_ci  * [[limits-maxDescriptorSetLayoutBindings]]
459e5c31af7Sopenharmony_ci    pname:maxDescriptorSetLayoutBindings is the maximum number of bindings
460e5c31af7Sopenharmony_ci    in a descriptor set layout.
461e5c31af7Sopenharmony_ci  * [[limits-maxQueryFaultCount]] pname:maxQueryFaultCount is the maximum
462e5c31af7Sopenharmony_ci    number of faults that the implementation can: record, to be reported via
463e5c31af7Sopenharmony_ci    flink:vkGetFaultData.
464e5c31af7Sopenharmony_ci  * [[limits-maxCallbackFaultCount]] pname:maxCallbackFaultCount is the
465e5c31af7Sopenharmony_ci    maximum number of faults that the implementation can: report via a
466e5c31af7Sopenharmony_ci    single call to tlink:PFN_vkFaultCallbackFunction.
467e5c31af7Sopenharmony_ci  * [[limits-maxCommandPoolCommandBuffers]]
468e5c31af7Sopenharmony_ci    pname:maxCommandPoolCommandBuffers is the maximum number of command
469e5c31af7Sopenharmony_ci    buffers that can: be allocated from a single command pool.
470e5c31af7Sopenharmony_ci  * [[limits-maxCommandBufferSize]] pname:maxCommandBufferSize is the
471e5c31af7Sopenharmony_ci    maximum supported size of a single command buffer in bytes.
472e5c31af7Sopenharmony_ci    Applications can: use flink:vkGetCommandPoolMemoryConsumption to compare
473e5c31af7Sopenharmony_ci    a command buffer's current memory usage to this limit.
474e5c31af7Sopenharmony_ci
475e5c31af7Sopenharmony_ci[NOTE]
476e5c31af7Sopenharmony_ci.Note
477e5c31af7Sopenharmony_ci====
478e5c31af7Sopenharmony_ciImplementations that do not have a fixed upper bound on the number of
479e5c31af7Sopenharmony_cicommand buffers that may: be allocated from a command pool can: report
480e5c31af7Sopenharmony_ci0xFFFFFFFFU for pname:maxCommandPoolCommandBuffers.
481e5c31af7Sopenharmony_ci
482e5c31af7Sopenharmony_ciImplementations that do not have a fixed upper bound on the command buffer
483e5c31af7Sopenharmony_cisize can: report code:UINT64_MAX for pname:maxCommandBufferSize.
484e5c31af7Sopenharmony_ci====
485e5c31af7Sopenharmony_ci
486e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceVulkanSC10Properties
487e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
488e5c31af7Sopenharmony_ci
489e5c31af7Sopenharmony_ciThese properties correspond to Vulkan SC 1.0 functionality.
490e5c31af7Sopenharmony_ci
491e5c31af7Sopenharmony_ciifdef::hidden[]
492e5c31af7Sopenharmony_ci// tag::scaddition[]
493e5c31af7Sopenharmony_ci  * slink:VkPhysicalDeviceVulkanSC10Properties <<SCID-1>>
494e5c31af7Sopenharmony_ci// end::scaddition[]
495e5c31af7Sopenharmony_ciendif::hidden[]
496e5c31af7Sopenharmony_ci
497e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceVulkanSC10Properties.adoc[]
498e5c31af7Sopenharmony_ci--
499e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
500e5c31af7Sopenharmony_ci
501e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3[]
502e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceVulkan13Properties',desc='Structure specifying physical device properties for functionality promoted to Vulkan 1.3',type='structs']
503e5c31af7Sopenharmony_ci--
504e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceVulkan13Properties structure is defined as:
505e5c31af7Sopenharmony_ci
506e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceVulkan13Properties.adoc[]
507e5c31af7Sopenharmony_ci
508e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
509e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
510e5c31af7Sopenharmony_ci    structure.
511e5c31af7Sopenharmony_ci
512e5c31af7Sopenharmony_ci:anchor-prefix:
513e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_EXT_subgroup_size_control-properties]
514e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_EXT_inline_uniform_block-properties]
515e5c31af7Sopenharmony_ci  * [[{anchor-prefix}limits-maxInlineUniformTotalSize]]
516e5c31af7Sopenharmony_ci    pname:maxInlineUniformTotalSize is the maximum total size in bytes of
517e5c31af7Sopenharmony_ci    all inline uniform block bindings, across all pipeline shader stages and
518e5c31af7Sopenharmony_ci    descriptor set numbers, that can: be included in a pipeline layout.
519e5c31af7Sopenharmony_ci    Descriptor bindings with a descriptor type of
520e5c31af7Sopenharmony_ci    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK count against this limit.
521e5c31af7Sopenharmony_ciinclude::{chapters}/devsandqueues.adoc[tag=VK_KHR_shader_integer_dot_product-properties]
522e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_EXT_texel_buffer_alignment-properties]
523e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=VK_KHR_maintenance4-properties]
524e5c31af7Sopenharmony_ci
525e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceVulkan13Properties
526e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
527e5c31af7Sopenharmony_ci
528e5c31af7Sopenharmony_ciThese properties correspond to Vulkan 1.3 functionality.
529e5c31af7Sopenharmony_ci
530e5c31af7Sopenharmony_ciThe members of sname:VkPhysicalDeviceVulkan13Properties must: have the same
531e5c31af7Sopenharmony_civalues as the corresponding members of
532e5c31af7Sopenharmony_cislink:VkPhysicalDeviceInlineUniformBlockProperties and
533e5c31af7Sopenharmony_cislink:VkPhysicalDeviceSubgroupSizeControlProperties.
534e5c31af7Sopenharmony_ci
535e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceVulkan13Properties.adoc[]
536e5c31af7Sopenharmony_ci--
537e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3[]
538e5c31af7Sopenharmony_ci
539e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
540e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceIDProperties',desc='Structure specifying IDs related to the physical device',type='structs']
541e5c31af7Sopenharmony_ci--
542e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceIDProperties structure is defined as:
543e5c31af7Sopenharmony_ci
544e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceIDProperties.adoc[]
545e5c31af7Sopenharmony_ci
546e5c31af7Sopenharmony_ciifdef::VK_KHR_external_memory_capabilities[]
547e5c31af7Sopenharmony_cior the equivalent
548e5c31af7Sopenharmony_ci
549e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceIDPropertiesKHR.adoc[]
550e5c31af7Sopenharmony_ciendif::VK_KHR_external_memory_capabilities[]
551e5c31af7Sopenharmony_ci
552e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
553e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
554e5c31af7Sopenharmony_ci    structure.
555e5c31af7Sopenharmony_ci
556e5c31af7Sopenharmony_ci// Must have preceding whitespace
557e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
558e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_2[:anchor-prefix:]
559e5c31af7Sopenharmony_ci// tag::VK_KHR_external_memory_capabilities-properties[]
560e5c31af7Sopenharmony_ci  * pname:deviceUUID is an array of ename:VK_UUID_SIZE code:uint8_t values
561e5c31af7Sopenharmony_ci    representing a universally unique identifier for the device.
562e5c31af7Sopenharmony_ci  * pname:driverUUID is an array of ename:VK_UUID_SIZE code:uint8_t values
563e5c31af7Sopenharmony_ci    representing a universally unique identifier for the driver build in use
564e5c31af7Sopenharmony_ci    by the device.
565e5c31af7Sopenharmony_ci  * pname:deviceLUID is an array of ename:VK_LUID_SIZE code:uint8_t values
566e5c31af7Sopenharmony_ci    representing a locally unique identifier for the device.
567e5c31af7Sopenharmony_ci  * pname:deviceNodeMask is a code:uint32_t bitfield identifying the node
568e5c31af7Sopenharmony_ci    within a linked device adapter corresponding to the device.
569e5c31af7Sopenharmony_ci  * pname:deviceLUIDValid is a boolean value that will be ename:VK_TRUE if
570e5c31af7Sopenharmony_ci    pname:deviceLUID contains a valid LUID and pname:deviceNodeMask contains
571e5c31af7Sopenharmony_ci    a valid node mask, and ename:VK_FALSE if they do not.
572e5c31af7Sopenharmony_ci// end::VK_KHR_external_memory_capabilities-properties[]
573e5c31af7Sopenharmony_ci
574e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceIDProperties
575e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
576e5c31af7Sopenharmony_ci
577e5c31af7Sopenharmony_cipname:deviceUUID must: be immutable for a given device across instances,
578e5c31af7Sopenharmony_ciprocesses, driver APIs, driver versions, and system reboots.
579e5c31af7Sopenharmony_ci
580e5c31af7Sopenharmony_ciApplications can: compare the pname:driverUUID value across instance and
581e5c31af7Sopenharmony_ciprocess boundaries, and can: make similar queries in external APIs to
582e5c31af7Sopenharmony_cidetermine whether they are capable of sharing memory objects and resources
583e5c31af7Sopenharmony_ciusing them with the device.
584e5c31af7Sopenharmony_ci
585e5c31af7Sopenharmony_cipname:deviceUUID and/or pname:driverUUID must: be used to determine whether
586e5c31af7Sopenharmony_cia particular external object can be shared between driver components, where
587e5c31af7Sopenharmony_cisuch a restriction exists as defined in the compatibility table for the
588e5c31af7Sopenharmony_ciparticular object type:
589e5c31af7Sopenharmony_ci
590e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
591e5c31af7Sopenharmony_ci  * <<external-memory-handle-types-compatibility,External memory handle
592e5c31af7Sopenharmony_ci    types compatibility>>
593e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
594e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
595e5c31af7Sopenharmony_ci  * <<external-semaphore-handle-types-compatibility,External semaphore
596e5c31af7Sopenharmony_ci    handle types compatibility>>
597e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
598e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
599e5c31af7Sopenharmony_ci  * <<external-fence-handle-types-compatibility,External fence handle types
600e5c31af7Sopenharmony_ci    compatibility>>
601e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
602e5c31af7Sopenharmony_ci
603e5c31af7Sopenharmony_ciIf pname:deviceLUIDValid is ename:VK_FALSE, the values of pname:deviceLUID
604e5c31af7Sopenharmony_ciand pname:deviceNodeMask are undefined:.
605e5c31af7Sopenharmony_ciIf pname:deviceLUIDValid is ename:VK_TRUE and Vulkan is running on the
606e5c31af7Sopenharmony_ciWindows operating system, the contents of pname:deviceLUID can: be cast to
607e5c31af7Sopenharmony_cian code:LUID object and must: be equal to the locally unique identifier of a
608e5c31af7Sopenharmony_cicode:IDXGIAdapter1 object that corresponds to pname:physicalDevice.
609e5c31af7Sopenharmony_ciIf pname:deviceLUIDValid is ename:VK_TRUE, pname:deviceNodeMask must:
610e5c31af7Sopenharmony_cicontain exactly one bit.
611e5c31af7Sopenharmony_ciIf Vulkan is running on an operating system that supports the Direct3D 12
612e5c31af7Sopenharmony_ciAPI and pname:physicalDevice corresponds to an individual device in a linked
613e5c31af7Sopenharmony_cidevice adapter, pname:deviceNodeMask identifies the Direct3D 12 node
614e5c31af7Sopenharmony_cicorresponding to pname:physicalDevice.
615e5c31af7Sopenharmony_ciOtherwise, pname:deviceNodeMask must: be `1`.
616e5c31af7Sopenharmony_ci
617e5c31af7Sopenharmony_ci[NOTE]
618e5c31af7Sopenharmony_ci.Note
619e5c31af7Sopenharmony_ci====
620e5c31af7Sopenharmony_ciAlthough they have identical descriptions,
621e5c31af7Sopenharmony_cislink:VkPhysicalDeviceIDProperties::pname:deviceUUID may differ from
622e5c31af7Sopenharmony_cislink:VkPhysicalDeviceProperties2::pname:pipelineCacheUUID.
623e5c31af7Sopenharmony_ciThe former is intended to identify and correlate devices across API and
624e5c31af7Sopenharmony_cidriver boundaries, while the latter is used to identify a compatible device
625e5c31af7Sopenharmony_ciand driver combination to use when serializing and de-serializing pipeline
626e5c31af7Sopenharmony_cistate.
627e5c31af7Sopenharmony_ci
628e5c31af7Sopenharmony_ciImplementations should: return pname:deviceUUID values which are likely to
629e5c31af7Sopenharmony_cibe unique even in the presence of multiple Vulkan implementations (such as a
630e5c31af7Sopenharmony_ciGPU driver and a software renderer; two drivers for different GPUs; or the
631e5c31af7Sopenharmony_cisame Vulkan driver running on two logically different devices).
632e5c31af7Sopenharmony_ci
633e5c31af7Sopenharmony_ciKhronos' conformance testing is unable to guarantee that pname:deviceUUID
634e5c31af7Sopenharmony_civalues are actually unique, so implementors should: make their own best
635e5c31af7Sopenharmony_ciefforts to ensure this.
636e5c31af7Sopenharmony_ciIn particular, hard-coded pname:deviceUUID values, especially all-`0` bits,
637e5c31af7Sopenharmony_cishould: never be used.
638e5c31af7Sopenharmony_ci
639e5c31af7Sopenharmony_ciA combination of values unique to the vendor, the driver, and the hardware
640e5c31af7Sopenharmony_cienvironment can be used to provide a pname:deviceUUID which is unique to a
641e5c31af7Sopenharmony_cihigh degree of certainty.
642e5c31af7Sopenharmony_ciSome possible inputs to such a computation are:
643e5c31af7Sopenharmony_ci
644e5c31af7Sopenharmony_ci  * Information reported by flink:vkGetPhysicalDeviceProperties
645e5c31af7Sopenharmony_ci  * PCI device ID (if defined)
646e5c31af7Sopenharmony_ci  * PCI bus ID, or similar system configuration information.
647e5c31af7Sopenharmony_ci  * Driver binary checksums.
648e5c31af7Sopenharmony_ci====
649e5c31af7Sopenharmony_ci
650e5c31af7Sopenharmony_ci
651e5c31af7Sopenharmony_ci[NOTE]
652e5c31af7Sopenharmony_ci.Note
653e5c31af7Sopenharmony_ci====
654e5c31af7Sopenharmony_ciWhile slink:VkPhysicalDeviceIDProperties::pname:deviceUUID is specified to
655e5c31af7Sopenharmony_ciremain consistent across driver versions and system reboots, it is not
656e5c31af7Sopenharmony_ciintended to be usable as a serializable persistent identifier for a device.
657e5c31af7Sopenharmony_ciIt may change when a device is physically added to, removed from, or moved
658e5c31af7Sopenharmony_cito a different connector in a system while that system is powered down.
659e5c31af7Sopenharmony_ciFurther, there is no reasonable way to verify with conformance testing that
660e5c31af7Sopenharmony_cia given device retains the same UUID in a given system across all driver
661e5c31af7Sopenharmony_civersions supported in that system.
662e5c31af7Sopenharmony_ciWhile implementations should make every effort to report consistent device
663e5c31af7Sopenharmony_ciUUIDs across driver versions, applications should avoid relying on the
664e5c31af7Sopenharmony_cipersistence of this value for uses other than identifying compatible devices
665e5c31af7Sopenharmony_cifor external object sharing purposes.
666e5c31af7Sopenharmony_ci====
667e5c31af7Sopenharmony_ci
668e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceIDProperties.adoc[]
669e5c31af7Sopenharmony_ci--
670e5c31af7Sopenharmony_ci
671e5c31af7Sopenharmony_ci[open,refpage='VK_UUID_SIZE',desc='Length of a universally unique device or driver build identifier',type='consts']
672e5c31af7Sopenharmony_ci--
673e5c31af7Sopenharmony_ciename:VK_UUID_SIZE is the length in code:uint8_t values of an array
674e5c31af7Sopenharmony_cicontaining a universally unique device or driver build identifier, as
675e5c31af7Sopenharmony_cireturned in slink:VkPhysicalDeviceIDProperties::pname:deviceUUID and
676e5c31af7Sopenharmony_cislink:VkPhysicalDeviceIDProperties::pname:driverUUID.
677e5c31af7Sopenharmony_ci
678e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_UUID_SIZE.adoc[]
679e5c31af7Sopenharmony_ci--
680e5c31af7Sopenharmony_ci
681e5c31af7Sopenharmony_ci[open,refpage='VK_LUID_SIZE',desc='Length of a locally unique device identifier',type='consts',alias='VK_LUID_SIZE_KHR']
682e5c31af7Sopenharmony_ci--
683e5c31af7Sopenharmony_ciename:VK_LUID_SIZE is the length in code:uint8_t values of an array
684e5c31af7Sopenharmony_cicontaining a locally unique device identifier, as returned in
685e5c31af7Sopenharmony_cislink:VkPhysicalDeviceIDProperties::pname:deviceLUID.
686e5c31af7Sopenharmony_ci
687e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_LUID_SIZE.adoc[]
688e5c31af7Sopenharmony_ci
689e5c31af7Sopenharmony_ciifdef::VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
690e5c31af7Sopenharmony_cior the equivalent
691e5c31af7Sopenharmony_ci
692e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_LUID_SIZE_KHR.adoc[]
693e5c31af7Sopenharmony_ciendif::VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
694e5c31af7Sopenharmony_ci--
695e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
696e5c31af7Sopenharmony_ci
697e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_driver_properties[]
698e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceDriverProperties',desc='Structure containing driver identification information',type='structs',alias='VkPhysicalDeviceDriverPropertiesKHR']
699e5c31af7Sopenharmony_ci--
700e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceDriverProperties structure is defined as:
701e5c31af7Sopenharmony_ci
702e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceDriverProperties.adoc[]
703e5c31af7Sopenharmony_ci
704e5c31af7Sopenharmony_ciifdef::VK_KHR_driver_properties[]
705e5c31af7Sopenharmony_cior the equivalent
706e5c31af7Sopenharmony_ci
707e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceDriverPropertiesKHR.adoc[]
708e5c31af7Sopenharmony_ciendif::VK_KHR_driver_properties[]
709e5c31af7Sopenharmony_ci
710e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
711e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
712e5c31af7Sopenharmony_ci    structure.
713e5c31af7Sopenharmony_ci
714e5c31af7Sopenharmony_ci// Must have preceding whitespace
715e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
716e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_2[:anchor-prefix:]
717e5c31af7Sopenharmony_ci// tag::VK_KHR_driver_properties-properties[]
718e5c31af7Sopenharmony_ci  * pname:driverID is a unique identifier for the driver of the physical
719e5c31af7Sopenharmony_ci    device.
720e5c31af7Sopenharmony_ci  * pname:driverName is an array of ename:VK_MAX_DRIVER_NAME_SIZE code:char
721e5c31af7Sopenharmony_ci    containing a null-terminated UTF-8 string which is the name of the
722e5c31af7Sopenharmony_ci    driver.
723e5c31af7Sopenharmony_ci  * pname:driverInfo is an array of ename:VK_MAX_DRIVER_INFO_SIZE code:char
724e5c31af7Sopenharmony_ci    containing a null-terminated UTF-8 string with additional information
725e5c31af7Sopenharmony_ci    about the driver.
726e5c31af7Sopenharmony_ci  * pname:conformanceVersion is the version of the Vulkan conformance test
727e5c31af7Sopenharmony_ci    this driver is conformant against (see slink:VkConformanceVersion).
728e5c31af7Sopenharmony_ci// end::VK_KHR_driver_properties-properties[]
729e5c31af7Sopenharmony_ci
730e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceDriverProperties
731e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
732e5c31af7Sopenharmony_ci
733e5c31af7Sopenharmony_ciThese are properties of the driver corresponding to a physical device.
734e5c31af7Sopenharmony_ci
735e5c31af7Sopenharmony_cipname:driverID must: be immutable for a given driver across instances,
736e5c31af7Sopenharmony_ciprocesses, driver versions, and system reboots.
737e5c31af7Sopenharmony_ci
738e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceDriverProperties.adoc[]
739e5c31af7Sopenharmony_ci--
740e5c31af7Sopenharmony_ci
741e5c31af7Sopenharmony_ci[open,refpage='VkDriverId',desc='Khronos driver IDs',type='enums',alias='VkDriverIdKHR']
742e5c31af7Sopenharmony_ci--
743e5c31af7Sopenharmony_ciKhronos driver IDs which may: be returned in
744e5c31af7Sopenharmony_cislink:VkPhysicalDeviceDriverProperties::pname:driverID are:
745e5c31af7Sopenharmony_ci
746e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkDriverId.adoc[]
747e5c31af7Sopenharmony_ci
748e5c31af7Sopenharmony_ciifdef::VK_KHR_driver_properties[]
749e5c31af7Sopenharmony_cior the equivalent
750e5c31af7Sopenharmony_ci
751e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkDriverIdKHR.adoc[]
752e5c31af7Sopenharmony_ciendif::VK_KHR_driver_properties[]
753e5c31af7Sopenharmony_ci
754e5c31af7Sopenharmony_ci[NOTE]
755e5c31af7Sopenharmony_ci.Note
756e5c31af7Sopenharmony_ci====
757e5c31af7Sopenharmony_ciKhronos driver IDs may be allocated by vendors at any time.
758e5c31af7Sopenharmony_ciThere may be multiple driver IDs for the same vendor, representing different
759e5c31af7Sopenharmony_cidrivers (for e.g. different platforms, proprietary or open source, etc.).
760e5c31af7Sopenharmony_ciOnly the latest canonical versions of this Specification, of the
761e5c31af7Sopenharmony_cicorresponding `vk.xml` API Registry, and of the corresponding
762e5c31af7Sopenharmony_ci`{core_header}` header file must: contain all reserved Khronos driver IDs.
763e5c31af7Sopenharmony_ci
764e5c31af7Sopenharmony_ciOnly driver IDs registered with Khronos are given symbolic names.
765e5c31af7Sopenharmony_ciThere may: be unregistered driver IDs returned.
766e5c31af7Sopenharmony_ci====
767e5c31af7Sopenharmony_ci--
768e5c31af7Sopenharmony_ci
769e5c31af7Sopenharmony_ci[open,refpage='VK_MAX_DRIVER_NAME_SIZE',desc='Maximum length of a physical device driver name string',type='consts',alias='VK_MAX_DRIVER_NAME_SIZE_KHR']
770e5c31af7Sopenharmony_ci--
771e5c31af7Sopenharmony_ciename:VK_MAX_DRIVER_NAME_SIZE is the length in code:char values of an array
772e5c31af7Sopenharmony_cicontaining a driver name string, as returned in
773e5c31af7Sopenharmony_cislink:VkPhysicalDeviceDriverProperties::pname:driverName.
774e5c31af7Sopenharmony_ci
775e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_DRIVER_NAME_SIZE.adoc[]
776e5c31af7Sopenharmony_ci
777e5c31af7Sopenharmony_ciifdef::VK_KHR_driver_properties[]
778e5c31af7Sopenharmony_cior the equivalent
779e5c31af7Sopenharmony_ci
780e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_DRIVER_NAME_SIZE_KHR.adoc[]
781e5c31af7Sopenharmony_ciendif::VK_KHR_driver_properties[]
782e5c31af7Sopenharmony_ci--
783e5c31af7Sopenharmony_ci
784e5c31af7Sopenharmony_ci[open,refpage='VK_MAX_DRIVER_INFO_SIZE',desc='Length of a physical device driver information string',type='consts',alias='VK_MAX_DRIVER_INFO_SIZE_KHR']
785e5c31af7Sopenharmony_ci--
786e5c31af7Sopenharmony_ciename:VK_MAX_DRIVER_INFO_SIZE is the length in code:char values of an array
787e5c31af7Sopenharmony_cicontaining a driver information string, as returned in
788e5c31af7Sopenharmony_cislink:VkPhysicalDeviceDriverProperties::pname:driverInfo.
789e5c31af7Sopenharmony_ci
790e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_DRIVER_INFO_SIZE.adoc[]
791e5c31af7Sopenharmony_ci
792e5c31af7Sopenharmony_ciifdef::VK_KHR_driver_properties[]
793e5c31af7Sopenharmony_cior the equivalent
794e5c31af7Sopenharmony_ci
795e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_DRIVER_INFO_SIZE_KHR.adoc[]
796e5c31af7Sopenharmony_ciendif::VK_KHR_driver_properties[]
797e5c31af7Sopenharmony_ci--
798e5c31af7Sopenharmony_ci
799e5c31af7Sopenharmony_ci[open,refpage='VkConformanceVersion',desc='Structure containing the conformance test suite version the implementation is compliant with',type='structs',alias='VkConformanceVersionKHR']
800e5c31af7Sopenharmony_ci--
801e5c31af7Sopenharmony_ciThe conformance test suite version an implementation is compliant with is
802e5c31af7Sopenharmony_cidescribed with the sname:VkConformanceVersion structure:
803e5c31af7Sopenharmony_ci
804e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkConformanceVersion.adoc[]
805e5c31af7Sopenharmony_ci
806e5c31af7Sopenharmony_ciifdef::VK_KHR_driver_properties[]
807e5c31af7Sopenharmony_cior the equivalent
808e5c31af7Sopenharmony_ci
809e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkConformanceVersionKHR.adoc[]
810e5c31af7Sopenharmony_ciendif::VK_KHR_driver_properties[]
811e5c31af7Sopenharmony_ci
812e5c31af7Sopenharmony_ci  * pname:major is the major version number of the conformance test suite.
813e5c31af7Sopenharmony_ci  * pname:minor is the minor version number of the conformance test suite.
814e5c31af7Sopenharmony_ci  * pname:subminor is the subminor version number of the conformance test
815e5c31af7Sopenharmony_ci    suite.
816e5c31af7Sopenharmony_ci  * pname:patch is the patch version number of the conformance test suite.
817e5c31af7Sopenharmony_ci
818e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkConformanceVersion.adoc[]
819e5c31af7Sopenharmony_ci--
820e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_driver_properties[]
821e5c31af7Sopenharmony_ci
822e5c31af7Sopenharmony_ciifdef::VK_EXT_pci_bus_info[]
823e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDevicePCIBusInfoPropertiesEXT',desc='Structure containing PCI bus information of a physical device',type='structs']
824e5c31af7Sopenharmony_ci--
825e5c31af7Sopenharmony_ciThe sname:VkPhysicalDevicePCIBusInfoPropertiesEXT structure is defined as:
826e5c31af7Sopenharmony_ci
827e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDevicePCIBusInfoPropertiesEXT.adoc[]
828e5c31af7Sopenharmony_ci
829e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
830e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
831e5c31af7Sopenharmony_ci    structure.
832e5c31af7Sopenharmony_ci  * pname:pciDomain is the PCI bus domain.
833e5c31af7Sopenharmony_ci  * pname:pciBus is the PCI bus identifier.
834e5c31af7Sopenharmony_ci  * pname:pciDevice is the PCI device identifier.
835e5c31af7Sopenharmony_ci  * pname:pciFunction is the PCI device function identifier.
836e5c31af7Sopenharmony_ci
837e5c31af7Sopenharmony_ci:refpage: VkPhysicalDevicePCIBusInfoPropertiesEXT
838e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
839e5c31af7Sopenharmony_ci
840e5c31af7Sopenharmony_ciThese are properties of the PCI bus information of a physical device.
841e5c31af7Sopenharmony_ci
842e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDevicePCIBusInfoPropertiesEXT.adoc[]
843e5c31af7Sopenharmony_ci--
844e5c31af7Sopenharmony_ciendif::VK_EXT_pci_bus_info[]
845e5c31af7Sopenharmony_ci
846e5c31af7Sopenharmony_ciifdef::VK_EXT_physical_device_drm[]
847e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceDrmPropertiesEXT',desc='Structure containing DRM information of a physical device',type='structs']
848e5c31af7Sopenharmony_ci--
849e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceDrmPropertiesEXT structure is defined as:
850e5c31af7Sopenharmony_ci
851e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceDrmPropertiesEXT.adoc[]
852e5c31af7Sopenharmony_ci
853e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
854e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
855e5c31af7Sopenharmony_ci    structure.
856e5c31af7Sopenharmony_ci  * pname:hasPrimary is a boolean indicating whether the physical device has
857e5c31af7Sopenharmony_ci    a DRM primary node.
858e5c31af7Sopenharmony_ci  * pname:hasRender is a boolean indicating whether the physical device has
859e5c31af7Sopenharmony_ci    a DRM render node.
860e5c31af7Sopenharmony_ci  * pname:primaryMajor is the DRM primary node major number, if any.
861e5c31af7Sopenharmony_ci  * pname:primaryMinor is the DRM primary node minor number, if any.
862e5c31af7Sopenharmony_ci  * pname:renderMajor is the DRM render node major number, if any.
863e5c31af7Sopenharmony_ci  * pname:renderMinor is the DRM render node minor number, if any.
864e5c31af7Sopenharmony_ci
865e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceDrmPropertiesEXT
866e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
867e5c31af7Sopenharmony_ci
868e5c31af7Sopenharmony_ciThese are properties of the DRM information of a physical device.
869e5c31af7Sopenharmony_ci
870e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceDrmPropertiesEXT.adoc[]
871e5c31af7Sopenharmony_ci--
872e5c31af7Sopenharmony_ciendif::VK_EXT_physical_device_drm[]
873e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
874e5c31af7Sopenharmony_ci
875e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_shader_integer_dot_product[]
876e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceShaderIntegerDotProductProperties',desc='Structure containing information about integer dot product support for a physical device',type='structs',alias='VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR']
877e5c31af7Sopenharmony_ci--
878e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceShaderIntegerDotProductProperties structure is
879e5c31af7Sopenharmony_cidefined as:
880e5c31af7Sopenharmony_ci
881e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductProperties.adoc[]
882e5c31af7Sopenharmony_ci
883e5c31af7Sopenharmony_ciifdef::VK_KHR_shader_integer_dot_product[]
884e5c31af7Sopenharmony_cior the equivalent
885e5c31af7Sopenharmony_ci
886e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR.adoc[]
887e5c31af7Sopenharmony_ciendif::VK_KHR_shader_integer_dot_product[]
888e5c31af7Sopenharmony_ci
889e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
890e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
891e5c31af7Sopenharmony_ci    structure.
892e5c31af7Sopenharmony_ci
893e5c31af7Sopenharmony_ci// Must have preceding whitespace
894e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
895e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_3[:anchor-prefix:]
896e5c31af7Sopenharmony_ci// NOTE: none of these properties currently have anchors, so the
897e5c31af7Sopenharmony_ci// {anchor-prefix} is not used in the property descriptions.
898e5c31af7Sopenharmony_ci// tag::VK_KHR_shader_integer_dot_product-properties[]
899e5c31af7Sopenharmony_ci  * pname:integerDotProduct8BitUnsignedAccelerated is a boolean that will be
900e5c31af7Sopenharmony_ci    ename:VK_TRUE if the support for 8-bit unsigned dot product operations
901e5c31af7Sopenharmony_ci    using the code:OpUDotKHR SPIR-V instruction is accelerated
902e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
903e5c31af7Sopenharmony_ci  * pname:integerDotProduct8BitSignedAccelerated is a boolean that will be
904e5c31af7Sopenharmony_ci    ename:VK_TRUE if the support for 8-bit signed dot product operations
905e5c31af7Sopenharmony_ci    using the code:OpSDotKHR SPIR-V instruction is accelerated
906e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
907e5c31af7Sopenharmony_ci  * pname:integerDotProduct8BitMixedSignednessAccelerated is a boolean that
908e5c31af7Sopenharmony_ci    will be ename:VK_TRUE if the support for 8-bit mixed signedness dot
909e5c31af7Sopenharmony_ci    product operations using the code:OpSUDotKHR SPIR-V instruction is
910e5c31af7Sopenharmony_ci    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
911e5c31af7Sopenharmony_ci    below>>.
912e5c31af7Sopenharmony_ci  * pname:integerDotProduct4x8BitPackedUnsignedAccelerated is a boolean that
913e5c31af7Sopenharmony_ci    will be ename:VK_TRUE if the support for 8-bit unsigned dot product
914e5c31af7Sopenharmony_ci    operations from operands packed into 32-bit integers using the
915e5c31af7Sopenharmony_ci    code:OpUDotKHR SPIR-V instruction is accelerated
916e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
917e5c31af7Sopenharmony_ci  * pname:integerDotProduct4x8BitPackedSignedAccelerated is a boolean that
918e5c31af7Sopenharmony_ci    will be ename:VK_TRUE if the support for 8-bit signed dot product
919e5c31af7Sopenharmony_ci    operations from operands packed into 32-bit integers using the
920e5c31af7Sopenharmony_ci    code:OpSDotKHR SPIR-V instruction is accelerated
921e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
922e5c31af7Sopenharmony_ci  * pname:integerDotProduct4x8BitPackedMixedSignednessAccelerated is a
923e5c31af7Sopenharmony_ci    boolean that will be ename:VK_TRUE if the support for 8-bit mixed
924e5c31af7Sopenharmony_ci    signedness dot product operations from operands packed into 32-bit
925e5c31af7Sopenharmony_ci    integers using the code:OpSUDotKHR SPIR-V instruction is accelerated
926e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
927e5c31af7Sopenharmony_ci  * pname:integerDotProduct16BitUnsignedAccelerated is a boolean that will
928e5c31af7Sopenharmony_ci    be ename:VK_TRUE if the support for 16-bit unsigned dot product
929e5c31af7Sopenharmony_ci    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
930e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
931e5c31af7Sopenharmony_ci  * pname:integerDotProduct16BitSignedAccelerated is a boolean that will be
932e5c31af7Sopenharmony_ci    ename:VK_TRUE if the support for 16-bit signed dot product operations
933e5c31af7Sopenharmony_ci    using the code:OpSDotKHR SPIR-V instruction is accelerated
934e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
935e5c31af7Sopenharmony_ci  * pname:integerDotProduct16BitMixedSignednessAccelerated is a boolean that
936e5c31af7Sopenharmony_ci    will be ename:VK_TRUE if the support for 16-bit mixed signedness dot
937e5c31af7Sopenharmony_ci    product operations using the code:OpSUDotKHR SPIR-V instruction is
938e5c31af7Sopenharmony_ci    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
939e5c31af7Sopenharmony_ci    below>>.
940e5c31af7Sopenharmony_ci  * pname:integerDotProduct32BitUnsignedAccelerated is a boolean that will
941e5c31af7Sopenharmony_ci    be ename:VK_TRUE if the support for 32-bit unsigned dot product
942e5c31af7Sopenharmony_ci    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
943e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
944e5c31af7Sopenharmony_ci  * pname:integerDotProduct32BitSignedAccelerated is a boolean that will be
945e5c31af7Sopenharmony_ci    ename:VK_TRUE if the support for 32-bit signed dot product operations
946e5c31af7Sopenharmony_ci    using the code:OpSDotKHR SPIR-V instruction is accelerated
947e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
948e5c31af7Sopenharmony_ci  * pname:integerDotProduct32BitMixedSignednessAccelerated is a boolean that
949e5c31af7Sopenharmony_ci    will be ename:VK_TRUE if the support for 32-bit mixed signedness dot
950e5c31af7Sopenharmony_ci    product operations using the code:OpSUDotKHR SPIR-V instruction is
951e5c31af7Sopenharmony_ci    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
952e5c31af7Sopenharmony_ci    below>>.
953e5c31af7Sopenharmony_ci  * pname:integerDotProduct64BitUnsignedAccelerated is a boolean that will
954e5c31af7Sopenharmony_ci    be ename:VK_TRUE if the support for 64-bit unsigned dot product
955e5c31af7Sopenharmony_ci    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
956e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
957e5c31af7Sopenharmony_ci  * pname:integerDotProduct64BitSignedAccelerated is a boolean that will be
958e5c31af7Sopenharmony_ci    ename:VK_TRUE if the support for 64-bit signed dot product operations
959e5c31af7Sopenharmony_ci    using the code:OpSDotKHR SPIR-V instruction is accelerated
960e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
961e5c31af7Sopenharmony_ci  * pname:integerDotProduct64BitMixedSignednessAccelerated is a boolean that
962e5c31af7Sopenharmony_ci    will be ename:VK_TRUE if the support for 64-bit mixed signedness dot
963e5c31af7Sopenharmony_ci    product operations using the code:OpSUDotKHR SPIR-V instruction is
964e5c31af7Sopenharmony_ci    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
965e5c31af7Sopenharmony_ci    below>>.
966e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating8BitUnsignedAccelerated is
967e5c31af7Sopenharmony_ci    a boolean that will be ename:VK_TRUE if the support for 8-bit unsigned
968e5c31af7Sopenharmony_ci    accumulating saturating dot product operations using the
969e5c31af7Sopenharmony_ci    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
970e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
971e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating8BitSignedAccelerated is a
972e5c31af7Sopenharmony_ci    boolean that will be ename:VK_TRUE if the support for 8-bit signed
973e5c31af7Sopenharmony_ci    accumulating saturating dot product operations using the
974e5c31af7Sopenharmony_ci    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
975e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
976e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated
977e5c31af7Sopenharmony_ci    is a boolean that will be ename:VK_TRUE if the support for 8-bit mixed
978e5c31af7Sopenharmony_ci    signedness accumulating saturating dot product operations using the
979e5c31af7Sopenharmony_ci    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
980e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
981e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated
982e5c31af7Sopenharmony_ci    is a boolean that will be ename:VK_TRUE if the support for 8-bit
983e5c31af7Sopenharmony_ci    unsigned accumulating saturating dot product operations from operands
984e5c31af7Sopenharmony_ci    packed into 32-bit integers using the code:OpUDotAccSatKHR SPIR-V
985e5c31af7Sopenharmony_ci    instruction is accelerated
986e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
987e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated
988e5c31af7Sopenharmony_ci    is a boolean that will be ename:VK_TRUE if the support for 8-bit signed
989e5c31af7Sopenharmony_ci    accumulating saturating dot product operations from operands packed into
990e5c31af7Sopenharmony_ci    32-bit integers using the code:OpSDotAccSatKHR SPIR-V instruction is
991e5c31af7Sopenharmony_ci    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
992e5c31af7Sopenharmony_ci    below>>.
993e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated
994e5c31af7Sopenharmony_ci    is a boolean that will be ename:VK_TRUE if the support for 8-bit mixed
995e5c31af7Sopenharmony_ci    signedness accumulating saturating dot product operations from operands
996e5c31af7Sopenharmony_ci    packed into 32-bit integers using the code:OpSUDotAccSatKHR SPIR-V
997e5c31af7Sopenharmony_ci    instruction is accelerated
998e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
999e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating16BitUnsignedAccelerated is
1000e5c31af7Sopenharmony_ci    a boolean that will be ename:VK_TRUE if the support for 16-bit unsigned
1001e5c31af7Sopenharmony_ci    accumulating saturating dot product operations using the
1002e5c31af7Sopenharmony_ci    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
1003e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1004e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating16BitSignedAccelerated is a
1005e5c31af7Sopenharmony_ci    boolean that will be ename:VK_TRUE if the support for 16-bit signed
1006e5c31af7Sopenharmony_ci    accumulating saturating dot product operations using the
1007e5c31af7Sopenharmony_ci    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
1008e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1009e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated
1010e5c31af7Sopenharmony_ci    is a boolean that will be ename:VK_TRUE if the support for 16-bit mixed
1011e5c31af7Sopenharmony_ci    signedness accumulating saturating dot product operations using the
1012e5c31af7Sopenharmony_ci    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
1013e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1014e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating32BitUnsignedAccelerated is
1015e5c31af7Sopenharmony_ci    a boolean that will be ename:VK_TRUE if the support for 32-bit unsigned
1016e5c31af7Sopenharmony_ci    accumulating saturating dot product operations using the
1017e5c31af7Sopenharmony_ci    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
1018e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1019e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating32BitSignedAccelerated is a
1020e5c31af7Sopenharmony_ci    boolean that will be ename:VK_TRUE if the support for 32-bit signed
1021e5c31af7Sopenharmony_ci    accumulating saturating dot product operations using the
1022e5c31af7Sopenharmony_ci    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
1023e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1024e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated
1025e5c31af7Sopenharmony_ci    is a boolean that will be ename:VK_TRUE if the support for 32-bit mixed
1026e5c31af7Sopenharmony_ci    signedness accumulating saturating dot product operations using the
1027e5c31af7Sopenharmony_ci    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
1028e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1029e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating64BitUnsignedAccelerated is
1030e5c31af7Sopenharmony_ci    a boolean that will be ename:VK_TRUE if the support for 64-bit unsigned
1031e5c31af7Sopenharmony_ci    accumulating saturating dot product operations using the
1032e5c31af7Sopenharmony_ci    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
1033e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1034e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating64BitSignedAccelerated is a
1035e5c31af7Sopenharmony_ci    boolean that will be ename:VK_TRUE if the support for 64-bit signed
1036e5c31af7Sopenharmony_ci    accumulating saturating dot product operations using the
1037e5c31af7Sopenharmony_ci    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
1038e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1039e5c31af7Sopenharmony_ci  * pname:integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated
1040e5c31af7Sopenharmony_ci    is a boolean that will be ename:VK_TRUE if the support for 64-bit mixed
1041e5c31af7Sopenharmony_ci    signedness accumulating saturating dot product operations using the
1042e5c31af7Sopenharmony_ci    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
1043e5c31af7Sopenharmony_ci    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
1044e5c31af7Sopenharmony_ci// end::VK_KHR_shader_integer_dot_product-properties[]
1045e5c31af7Sopenharmony_ci
1046e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceShaderIntegerDotProductProperties
1047e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
1048e5c31af7Sopenharmony_ci
1049e5c31af7Sopenharmony_ciThese are properties of the integer dot product acceleration information of
1050e5c31af7Sopenharmony_cia physical device.
1051e5c31af7Sopenharmony_ci
1052e5c31af7Sopenharmony_ci[[devsandqueues-integer-dot-product-accelerated]]
1053e5c31af7Sopenharmony_ci[NOTE]
1054e5c31af7Sopenharmony_ci.Note
1055e5c31af7Sopenharmony_ci====
1056e5c31af7Sopenharmony_ciA dot product operation is deemed accelerated if its implementation provides
1057e5c31af7Sopenharmony_cia performance advantage over application-provided code composed from
1058e5c31af7Sopenharmony_cielementary instructions and/or other dot product instructions, either
1059e5c31af7Sopenharmony_cibecause the implementation uses optimized machine code sequences whose
1060e5c31af7Sopenharmony_cigeneration from application-provided code cannot be guaranteed or because it
1061e5c31af7Sopenharmony_ciuses hardware features that cannot otherwise be targeted from
1062e5c31af7Sopenharmony_ciapplication-provided code.
1063e5c31af7Sopenharmony_ci====
1064e5c31af7Sopenharmony_ci
1065e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerDotProductProperties.adoc[]
1066e5c31af7Sopenharmony_ci--
1067e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_shader_integer_dot_product[]
1068e5c31af7Sopenharmony_ci
1069e5c31af7Sopenharmony_ciifdef::VK_QCOM_image_processing[]
1070e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceImageProcessingPropertiesQCOM',desc='Structure containing image processing properties',type='structs']
1071e5c31af7Sopenharmony_ci--
1072e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceImageProcessingPropertiesQCOM structure is defined
1073e5c31af7Sopenharmony_cias:
1074e5c31af7Sopenharmony_ci
1075e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceImageProcessingPropertiesQCOM.adoc[]
1076e5c31af7Sopenharmony_ci
1077e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1078e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1079e5c31af7Sopenharmony_ci    structure.
1080e5c31af7Sopenharmony_ci  * [[limits-weightfilter-phases]] pname:maxWeightFilterPhases is the
1081e5c31af7Sopenharmony_ci    maximum value that can: be specified for
1082e5c31af7Sopenharmony_ci    slink:VkImageViewSampleWeightCreateInfoQCOM::pname:numPhases in
1083e5c31af7Sopenharmony_ci    <<textures-weightimage-filterphases, weight image sampling>> operations.
1084e5c31af7Sopenharmony_ci  * [[limits-weightfilter-maxdimension]] pname:maxWeightFilterDimension is a
1085e5c31af7Sopenharmony_ci    slink:VkExtent2D describing the largest dimensions (pname:width and
1086e5c31af7Sopenharmony_ci    pname:height) that can: be specified for
1087e5c31af7Sopenharmony_ci    slink:VkImageViewSampleWeightCreateInfoQCOM::pname:filterSize.
1088e5c31af7Sopenharmony_ci  * [[limits-blockmatch-maxblocksize]] pname:maxBlockMatchRegion is a
1089e5c31af7Sopenharmony_ci    slink:VkExtent2D describing the largest dimensions (pname:width and
1090e5c31af7Sopenharmony_ci    pname:height) that can: be specified for code:blockSize in
1091e5c31af7Sopenharmony_ci    <<textures-blockmatch,block matching>> operations.
1092e5c31af7Sopenharmony_ci  * [[limits-boxfilter-maxblocksize]] pname:maxBoxFilterBlockSize is a
1093e5c31af7Sopenharmony_ci    slink:VkExtent2D describing the maximum dimensions (pname:width and
1094e5c31af7Sopenharmony_ci    pname:height) that can: be specified for code:blocksize in
1095e5c31af7Sopenharmony_ci    <<textures-boxfilter,box filter sampling>> operations.
1096e5c31af7Sopenharmony_ci
1097e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceImageProcessingPropertiesQCOM
1098e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
1099e5c31af7Sopenharmony_ci
1100e5c31af7Sopenharmony_ciThese are properties of the image processing information of a physical
1101e5c31af7Sopenharmony_cidevice.
1102e5c31af7Sopenharmony_ci
1103e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceImageProcessingPropertiesQCOM.adoc[]
1104e5c31af7Sopenharmony_ci--
1105e5c31af7Sopenharmony_ciendif::VK_QCOM_image_processing[]
1106e5c31af7Sopenharmony_ci
1107e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_tile_image[]
1108e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceShaderTileImagePropertiesEXT',desc='Structure containing information about tile image support for a physical device',type='structs']
1109e5c31af7Sopenharmony_ci--
1110e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceShaderTileImagePropertiesEXT structure is defined
1111e5c31af7Sopenharmony_cias:
1112e5c31af7Sopenharmony_ci
1113e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceShaderTileImagePropertiesEXT.adoc[]
1114e5c31af7Sopenharmony_ci
1115e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1116e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1117e5c31af7Sopenharmony_ci    structure.
1118e5c31af7Sopenharmony_ci  * pname:shaderTileImageCoherentReadAccelerated is a boolean that will be
1119e5c31af7Sopenharmony_ci    ename:VK_TRUE if coherent reads of tile image data is accelerated.
1120e5c31af7Sopenharmony_ci  * pname:shaderTileImageReadSampleFromPixelRateInvocation is a boolean that
1121e5c31af7Sopenharmony_ci    will be ename:VK_TRUE if reading from samples from a pixel rate fragment
1122e5c31af7Sopenharmony_ci    invocation is supported when
1123e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples > 1.
1124e5c31af7Sopenharmony_ci  * pname:shaderTileImageReadFromHelperInvocation is a boolean that will be
1125e5c31af7Sopenharmony_ci    ename:VK_TRUE if reads of tile image data from helper fragment
1126e5c31af7Sopenharmony_ci    invocations result in valid values.
1127e5c31af7Sopenharmony_ci
1128e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceShaderTileImagePropertiesEXT
1129e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
1130e5c31af7Sopenharmony_ci
1131e5c31af7Sopenharmony_ciThese are properties of the tile image information of a physical device.
1132e5c31af7Sopenharmony_ci
1133e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceShaderTileImagePropertiesEXT.adoc[]
1134e5c31af7Sopenharmony_ci--
1135e5c31af7Sopenharmony_ciendif::VK_EXT_shader_tile_image[]
1136e5c31af7Sopenharmony_ci
1137e5c31af7Sopenharmony_ciifdef::VK_QCOM_image_processing2[]
1138e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceImageProcessing2PropertiesQCOM',desc='Structure containing image processing2 properties',type='structs']
1139e5c31af7Sopenharmony_ci--
1140e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceImageProcessing2PropertiesQCOM structure is
1141e5c31af7Sopenharmony_cidefined as:
1142e5c31af7Sopenharmony_ci
1143e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceImageProcessing2PropertiesQCOM.adoc[]
1144e5c31af7Sopenharmony_ci
1145e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1146e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1147e5c31af7Sopenharmony_ci    structure.
1148e5c31af7Sopenharmony_ci
1149e5c31af7Sopenharmony_ci  * [[limits-blockmatch-maxWindowExtent]] pname:maxBlockMatchWindow is a
1150e5c31af7Sopenharmony_ci    slink:VkExtent2D describing the largest dimensions (pname:width and
1151e5c31af7Sopenharmony_ci    pname:height) that can: be specified for the block match window.
1152e5c31af7Sopenharmony_ci
1153e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceImageProcessing2PropertiesQCOM
1154e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
1155e5c31af7Sopenharmony_ci
1156e5c31af7Sopenharmony_ciThese are properties of the image processing2 information of a physical
1157e5c31af7Sopenharmony_cidevice.
1158e5c31af7Sopenharmony_ci
1159e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceImageProcessing2PropertiesQCOM.adoc[]
1160e5c31af7Sopenharmony_ci--
1161e5c31af7Sopenharmony_ciendif::VK_QCOM_image_processing2[]
1162e5c31af7Sopenharmony_ci
1163e5c31af7Sopenharmony_ciifdef::VK_MSFT_layered_driver[]
1164e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceLayeredDriverPropertiesMSFT',desc='Structure containing information about driver layering for a physical device',type='structs']
1165e5c31af7Sopenharmony_ci--
1166e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceLayeredDriverPropertiesMSFT structure is defined
1167e5c31af7Sopenharmony_cias:
1168e5c31af7Sopenharmony_ci
1169e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceLayeredDriverPropertiesMSFT.adoc[]
1170e5c31af7Sopenharmony_ci
1171e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1172e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1173e5c31af7Sopenharmony_ci    structure.
1174e5c31af7Sopenharmony_ci  * pname:underlyingAPI is a elink:VkLayeredDriverUnderlyingApiMSFT value
1175e5c31af7Sopenharmony_ci    indicating which underlying API is used to implement the layered driver,
1176e5c31af7Sopenharmony_ci    or ename:VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT if the driver is not
1177e5c31af7Sopenharmony_ci    layered.
1178e5c31af7Sopenharmony_ci
1179e5c31af7Sopenharmony_ciThese are properties of the driver layering information of a physical
1180e5c31af7Sopenharmony_cidevice.
1181e5c31af7Sopenharmony_ci
1182e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceLayeredDriverPropertiesMSFT.adoc[]
1183e5c31af7Sopenharmony_ci--
1184e5c31af7Sopenharmony_ci
1185e5c31af7Sopenharmony_ci[open,refpage='VkLayeredDriverUnderlyingApiMSFT',desc='Layered driver underlying APIs',type='enums']
1186e5c31af7Sopenharmony_ci--
1187e5c31af7Sopenharmony_ciUnderlying APIs which may: be returned in
1188e5c31af7Sopenharmony_cislink:VkPhysicalDeviceLayeredDriverPropertiesMSFT::pname:underlyingAPI are:
1189e5c31af7Sopenharmony_ci
1190e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkLayeredDriverUnderlyingApiMSFT.adoc[]
1191e5c31af7Sopenharmony_ci--
1192e5c31af7Sopenharmony_ciendif::VK_MSFT_layered_driver[]
1193e5c31af7Sopenharmony_ci
1194e5c31af7Sopenharmony_ciifdef::VK_ARM_scheduling_controls[]
1195e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceSchedulingControlsPropertiesARM',desc='Structure containing scheduling control properties of a physical device',type='structs']
1196e5c31af7Sopenharmony_ci--
1197e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceSchedulingControlsPropertiesARM structure is
1198e5c31af7Sopenharmony_cidefined as:
1199e5c31af7Sopenharmony_ci
1200e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceSchedulingControlsPropertiesARM.adoc[]
1201e5c31af7Sopenharmony_ci
1202e5c31af7Sopenharmony_ci  * [[limits-schedulingControlsFlags]]pname:schedulingControlsFlags
1203e5c31af7Sopenharmony_ci    specifies the specific scheduling controls that a physical device
1204e5c31af7Sopenharmony_ci    supports.
1205e5c31af7Sopenharmony_ci
1206e5c31af7Sopenharmony_ci:refpage: VkPhysicalDeviceSchedulingControlsPropertiesARM
1207e5c31af7Sopenharmony_ciinclude::{chapters}/limits.adoc[tag=limits_desc]
1208e5c31af7Sopenharmony_ci
1209e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceSchedulingControlsPropertiesARM.adoc[]
1210e5c31af7Sopenharmony_ci--
1211e5c31af7Sopenharmony_ci
1212e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceSchedulingControlsFlagBitsARM',desc='Bitmask specifying scheduling controls supported by a physical device',type='enums']
1213e5c31af7Sopenharmony_ci--
1214e5c31af7Sopenharmony_ciBits which can: be set in
1215e5c31af7Sopenharmony_cislink:VkPhysicalDeviceSchedulingControlsPropertiesARM::pname:schedulingControlsFlags,
1216e5c31af7Sopenharmony_cispecifying supported scheduling controls, are:
1217e5c31af7Sopenharmony_ci
1218e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPhysicalDeviceSchedulingControlsFlagBitsARM.adoc[]
1219e5c31af7Sopenharmony_ci
1220e5c31af7Sopenharmony_ci  * ename:VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM
1221e5c31af7Sopenharmony_ci    indicates that a slink:VkDeviceQueueShaderCoreControlCreateInfoARM
1222e5c31af7Sopenharmony_ci    structure may: be included in the pname:pNext chain of a
1223e5c31af7Sopenharmony_ci    slink:VkDeviceQueueCreateInfo or slink:VkDeviceCreateInfo structure.
1224e5c31af7Sopenharmony_ci--
1225e5c31af7Sopenharmony_ci
1226e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceSchedulingControlsFlagsARM',desc='Bitmask of VkPhysicalDeviceSchedulingControlsFlagBitsARM',type='flags']
1227e5c31af7Sopenharmony_ci--
1228e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkPhysicalDeviceSchedulingControlsFlagsARM.adoc[]
1229e5c31af7Sopenharmony_ci
1230e5c31af7Sopenharmony_citname:VkPhysicalDeviceSchedulingControlsFlagsARM is a bitmask type for
1231e5c31af7Sopenharmony_cisetting a mask of zero or more
1232e5c31af7Sopenharmony_cielink:VkPhysicalDeviceSchedulingControlsFlagBitsARM.
1233e5c31af7Sopenharmony_ci--
1234e5c31af7Sopenharmony_ciendif::VK_ARM_scheduling_controls[]
1235e5c31af7Sopenharmony_ci
1236e5c31af7Sopenharmony_ci[open,refpage='vkGetPhysicalDeviceQueueFamilyProperties',desc='Reports properties of the queues of the specified physical device',type='protos']
1237e5c31af7Sopenharmony_ci--
1238e5c31af7Sopenharmony_ciTo query properties of queues available on a physical device, call:
1239e5c31af7Sopenharmony_ci
1240e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties.adoc[]
1241e5c31af7Sopenharmony_ci
1242e5c31af7Sopenharmony_ci  * pname:physicalDevice is the handle to the physical device whose
1243e5c31af7Sopenharmony_ci    properties will be queried.
1244e5c31af7Sopenharmony_ci  * pname:pQueueFamilyPropertyCount is a pointer to an integer related to
1245e5c31af7Sopenharmony_ci    the number of queue families available or queried, as described below.
1246e5c31af7Sopenharmony_ci  * pname:pQueueFamilyProperties is either `NULL` or a pointer to an array
1247e5c31af7Sopenharmony_ci    of slink:VkQueueFamilyProperties structures.
1248e5c31af7Sopenharmony_ci
1249e5c31af7Sopenharmony_ciIf pname:pQueueFamilyProperties is `NULL`, then the number of queue families
1250e5c31af7Sopenharmony_ciavailable is returned in pname:pQueueFamilyPropertyCount.
1251e5c31af7Sopenharmony_ciImplementations must: support at least one queue family.
1252e5c31af7Sopenharmony_ciOtherwise, pname:pQueueFamilyPropertyCount must: point to a variable set by
1253e5c31af7Sopenharmony_cithe user to the number of elements in the pname:pQueueFamilyProperties
1254e5c31af7Sopenharmony_ciarray, and on return the variable is overwritten with the number of
1255e5c31af7Sopenharmony_cistructures actually written to pname:pQueueFamilyProperties.
1256e5c31af7Sopenharmony_ciIf pname:pQueueFamilyPropertyCount is less than the number of queue families
1257e5c31af7Sopenharmony_ciavailable, at most pname:pQueueFamilyPropertyCount structures will be
1258e5c31af7Sopenharmony_ciwritten.
1259e5c31af7Sopenharmony_ci
1260e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPhysicalDeviceQueueFamilyProperties.adoc[]
1261e5c31af7Sopenharmony_ci--
1262e5c31af7Sopenharmony_ci
1263e5c31af7Sopenharmony_ci[open,refpage='VkQueueFamilyProperties',desc='Structure providing information about a queue family',type='structs']
1264e5c31af7Sopenharmony_ci--
1265e5c31af7Sopenharmony_ciThe sname:VkQueueFamilyProperties structure is defined as:
1266e5c31af7Sopenharmony_ci
1267e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkQueueFamilyProperties.adoc[]
1268e5c31af7Sopenharmony_ci
1269e5c31af7Sopenharmony_ci  * pname:queueFlags is a bitmask of elink:VkQueueFlagBits indicating
1270e5c31af7Sopenharmony_ci    capabilities of the queues in this queue family.
1271e5c31af7Sopenharmony_ci  * pname:queueCount is the unsigned integer count of queues in this queue
1272e5c31af7Sopenharmony_ci    family.
1273e5c31af7Sopenharmony_ci    Each queue family must: support at least one queue.
1274e5c31af7Sopenharmony_ci  * pname:timestampValidBits is the unsigned integer count of meaningful
1275e5c31af7Sopenharmony_ci    bits in the timestamps written via
1276e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
1277e5c31af7Sopenharmony_ci    flink:vkCmdWriteTimestamp2 or
1278e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_synchronization2[]
1279e5c31af7Sopenharmony_ci    flink:vkCmdWriteTimestamp.
1280e5c31af7Sopenharmony_ci    The valid range for the count is 36 to 64 bits, or a value of 0,
1281e5c31af7Sopenharmony_ci    indicating no support for timestamps.
1282e5c31af7Sopenharmony_ci    Bits outside the valid range are guaranteed to be zeros.
1283e5c31af7Sopenharmony_ci  * pname:minImageTransferGranularity is the minimum granularity supported
1284e5c31af7Sopenharmony_ci    for image transfer operations on the queues in this queue family.
1285e5c31af7Sopenharmony_ci
1286e5c31af7Sopenharmony_ciThe value returned in pname:minImageTransferGranularity has a unit of
1287e5c31af7Sopenharmony_cicompressed texel blocks for images having a block-compressed format, and a
1288e5c31af7Sopenharmony_ciunit of texels otherwise.
1289e5c31af7Sopenharmony_ci
1290e5c31af7Sopenharmony_ciPossible values of pname:minImageTransferGranularity are:
1291e5c31af7Sopenharmony_ci
1292e5c31af7Sopenharmony_ci  * [eq]#(0,0,0)# specifies that only whole mip levels must: be transferred
1293e5c31af7Sopenharmony_ci    using the image transfer operations on the corresponding queues.
1294e5c31af7Sopenharmony_ci    In this case, the following restrictions apply to all offset and extent
1295e5c31af7Sopenharmony_ci    parameters of image transfer operations:
1296e5c31af7Sopenharmony_ci  ** The pname:x, pname:y, and pname:z members of a slink:VkOffset3D
1297e5c31af7Sopenharmony_ci     parameter must: always be zero.
1298e5c31af7Sopenharmony_ci  ** The pname:width, pname:height, and pname:depth members of a
1299e5c31af7Sopenharmony_ci     slink:VkExtent3D parameter must: always match the width, height, and
1300e5c31af7Sopenharmony_ci     depth of the image subresource corresponding to the parameter,
1301e5c31af7Sopenharmony_ci     respectively.
1302e5c31af7Sopenharmony_ci  * [eq]#(A~x~, A~y~, A~z~)# where [eq]#A~x~#, [eq]#A~y~#, and [eq]#A~z~#
1303e5c31af7Sopenharmony_ci    are all integer powers of two.
1304e5c31af7Sopenharmony_ci    In this case the following restrictions apply to all image transfer
1305e5c31af7Sopenharmony_ci    operations:
1306e5c31af7Sopenharmony_ci  ** pname:x, pname:y, and pname:z of a slink:VkOffset3D parameter must: be
1307e5c31af7Sopenharmony_ci     integer multiples of [eq]#A~x~#, [eq]#A~y~#, and [eq]#A~z~#,
1308e5c31af7Sopenharmony_ci     respectively.
1309e5c31af7Sopenharmony_ci  ** pname:width of a slink:VkExtent3D parameter must: be an integer
1310e5c31af7Sopenharmony_ci     multiple of [eq]#A~x~#, or else [eq]#pname:x {plus} pname:width# must:
1311e5c31af7Sopenharmony_ci     equal the width of the image subresource corresponding to the
1312e5c31af7Sopenharmony_ci     parameter.
1313e5c31af7Sopenharmony_ci  ** pname:height of a slink:VkExtent3D parameter must: be an integer
1314e5c31af7Sopenharmony_ci     multiple of [eq]#A~y~#, or else [eq]#pname:y {plus} pname:height# must:
1315e5c31af7Sopenharmony_ci     equal the height of the image subresource corresponding to the
1316e5c31af7Sopenharmony_ci     parameter.
1317e5c31af7Sopenharmony_ci  ** pname:depth of a slink:VkExtent3D parameter must: be an integer
1318e5c31af7Sopenharmony_ci     multiple of [eq]#A~z~#, or else [eq]#pname:z {plus} pname:depth# must:
1319e5c31af7Sopenharmony_ci     equal the depth of the image subresource corresponding to the
1320e5c31af7Sopenharmony_ci     parameter.
1321e5c31af7Sopenharmony_ci  ** If the format of the image corresponding to the parameters is one of
1322e5c31af7Sopenharmony_ci     the block-compressed formats then for the purposes of the above
1323e5c31af7Sopenharmony_ci     calculations the granularity must: be scaled up by the compressed texel
1324e5c31af7Sopenharmony_ci     block dimensions.
1325e5c31af7Sopenharmony_ci
1326e5c31af7Sopenharmony_ciQueues supporting graphics and/or compute operations must: report
1327e5c31af7Sopenharmony_ci[eq]#(1,1,1)# in pname:minImageTransferGranularity, meaning that there are
1328e5c31af7Sopenharmony_cino additional restrictions on the granularity of image transfer operations
1329e5c31af7Sopenharmony_cifor these queues.
1330e5c31af7Sopenharmony_ciOther queues supporting image transfer operations are only required: to
1331e5c31af7Sopenharmony_cisupport whole mip level transfers, thus pname:minImageTransferGranularity
1332e5c31af7Sopenharmony_cifor queues belonging to such queue families may: be [eq]#(0,0,0)#.
1333e5c31af7Sopenharmony_ci
1334e5c31af7Sopenharmony_ciThe <<memory-device,Device Memory>> section describes memory properties
1335e5c31af7Sopenharmony_ciqueried from the physical device.
1336e5c31af7Sopenharmony_ci
1337e5c31af7Sopenharmony_ciFor physical device feature queries see the <<features, Features>> chapter.
1338e5c31af7Sopenharmony_ci
1339e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkQueueFamilyProperties.adoc[]
1340e5c31af7Sopenharmony_ci--
1341e5c31af7Sopenharmony_ci
1342e5c31af7Sopenharmony_ci[open,refpage='VkQueueFlagBits',desc='Bitmask specifying capabilities of queues in a queue family',type='enums']
1343e5c31af7Sopenharmony_ci--
1344e5c31af7Sopenharmony_ciBits which may: be set in slink:VkQueueFamilyProperties::pname:queueFlags,
1345e5c31af7Sopenharmony_ciindicating capabilities of queues in a queue family are:
1346e5c31af7Sopenharmony_ci
1347e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkQueueFlagBits.adoc[]
1348e5c31af7Sopenharmony_ci
1349e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_GRAPHICS_BIT specifies that queues in this queue family
1350e5c31af7Sopenharmony_ci    support graphics operations.
1351e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_COMPUTE_BIT specifies that queues in this queue family
1352e5c31af7Sopenharmony_ci    support compute operations.
1353e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_TRANSFER_BIT specifies that queues in this queue family
1354e5c31af7Sopenharmony_ci    support transfer operations.
1355e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_SPARSE_BINDING_BIT specifies that queues in this queue
1356e5c31af7Sopenharmony_ci    family support sparse memory management operations (see
1357e5c31af7Sopenharmony_ci    <<sparsememory,Sparse Resources>>).
1358e5c31af7Sopenharmony_ci    If any of the sparse resource features are enabled, then at least one
1359e5c31af7Sopenharmony_ci    queue family must: support this bit.
1360e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1361e5c31af7Sopenharmony_ci    This flag is not supported in Vulkan SC <<SCID-8>>.
1362e5c31af7Sopenharmony_ciifdef::hidden[]
1363e5c31af7Sopenharmony_ci// tag::scremoved[]
1364e5c31af7Sopenharmony_ci  * elink:VkQueueFlagBits
1365e5c31af7Sopenharmony_ci  ** ename:VK_QUEUE_SPARSE_BINDING_BIT <<SCID-8>>
1366e5c31af7Sopenharmony_ci// end::scremoved[]
1367e5c31af7Sopenharmony_ciendif::hidden[]
1368e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1369e5c31af7Sopenharmony_ciifdef::VK_KHR_video_decode_queue[]
1370e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR specifies that queues in this queue
1371e5c31af7Sopenharmony_ci    family support <<video-decode-operations,video decode operations>>.
1372e5c31af7Sopenharmony_ciendif::VK_KHR_video_decode_queue[]
1373e5c31af7Sopenharmony_ciifdef::VK_KHR_video_encode_queue[]
1374e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR specifies that queues in this queue
1375e5c31af7Sopenharmony_ci    family support <<video-encode-operations,video encode operations>>.
1376e5c31af7Sopenharmony_ciendif::VK_KHR_video_encode_queue[]
1377e5c31af7Sopenharmony_ciifdef::VK_NV_optical_flow[]
1378e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_OPTICAL_FLOW_BIT_NV specifies that queues in this queue
1379e5c31af7Sopenharmony_ci    family support optical flow operations.
1380e5c31af7Sopenharmony_ciendif::VK_NV_optical_flow[]
1381e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
1382e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_PROTECTED_BIT specifies that queues in this queue family
1383e5c31af7Sopenharmony_ci    support the ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit.
1384e5c31af7Sopenharmony_ci    (see <<memory-protected-memory,Protected Memory>>).
1385e5c31af7Sopenharmony_ci    If the physical device supports the <<features-protectedMemory,
1386e5c31af7Sopenharmony_ci    pname:protectedMemory>> feature, at least one of its queue families
1387e5c31af7Sopenharmony_ci    must: support this bit.
1388e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
1389e5c31af7Sopenharmony_ci
1390e5c31af7Sopenharmony_ciIf an implementation exposes any queue family that supports graphics
1391e5c31af7Sopenharmony_cioperations, at least one queue family of at least one physical device
1392e5c31af7Sopenharmony_ciexposed by the implementation must: support both graphics and compute
1393e5c31af7Sopenharmony_cioperations.
1394e5c31af7Sopenharmony_ci
1395e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
1396e5c31af7Sopenharmony_ciFurthermore, if the <<features-protectedMemory, pname:protectedMemory>>
1397e5c31af7Sopenharmony_ciphysical device feature is supported, then at least one queue family of at
1398e5c31af7Sopenharmony_cileast one physical device exposed by the implementation must: support
1399e5c31af7Sopenharmony_cigraphics operations, compute operations, and protected memory operations.
1400e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
1401e5c31af7Sopenharmony_ci
1402e5c31af7Sopenharmony_ci[NOTE]
1403e5c31af7Sopenharmony_ci.Note
1404e5c31af7Sopenharmony_ci====
1405e5c31af7Sopenharmony_ciAll commands that are allowed on a queue that supports transfer operations
1406e5c31af7Sopenharmony_ciare also allowed on a queue that supports either graphics or compute
1407e5c31af7Sopenharmony_cioperations.
1408e5c31af7Sopenharmony_ciThus, if the capabilities of a queue family include
1409e5c31af7Sopenharmony_ciename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT, then reporting
1410e5c31af7Sopenharmony_cithe ename:VK_QUEUE_TRANSFER_BIT capability separately for that queue family
1411e5c31af7Sopenharmony_ciis optional:.
1412e5c31af7Sopenharmony_ci====
1413e5c31af7Sopenharmony_ci
1414e5c31af7Sopenharmony_ciFor further details see <<devsandqueues-queues,Queues>>.
1415e5c31af7Sopenharmony_ci--
1416e5c31af7Sopenharmony_ci
1417e5c31af7Sopenharmony_ci[open,refpage='VkQueueFlags',desc='Bitmask of VkQueueFlagBits',type='flags']
1418e5c31af7Sopenharmony_ci--
1419e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkQueueFlags.adoc[]
1420e5c31af7Sopenharmony_ci
1421e5c31af7Sopenharmony_citname:VkQueueFlags is a bitmask type for setting a mask of zero or more
1422e5c31af7Sopenharmony_cielink:VkQueueFlagBits.
1423e5c31af7Sopenharmony_ci--
1424e5c31af7Sopenharmony_ci
1425e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
1426e5c31af7Sopenharmony_ci[open,refpage='vkGetPhysicalDeviceQueueFamilyProperties2',desc='Reports properties of the queues of the specified physical device',type='protos']
1427e5c31af7Sopenharmony_ci--
1428e5c31af7Sopenharmony_ciTo query properties of queues available on a physical device, call:
1429e5c31af7Sopenharmony_ci
1430e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
1431e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties2.adoc[]
1432e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
1433e5c31af7Sopenharmony_ci
1434e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
1435e5c31af7Sopenharmony_ci
1436e5c31af7Sopenharmony_ciifdef::VK_KHR_get_physical_device_properties2[]
1437e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties2KHR.adoc[]
1438e5c31af7Sopenharmony_ciendif::VK_KHR_get_physical_device_properties2[]
1439e5c31af7Sopenharmony_ci
1440e5c31af7Sopenharmony_ci  * pname:physicalDevice is the handle to the physical device whose
1441e5c31af7Sopenharmony_ci    properties will be queried.
1442e5c31af7Sopenharmony_ci  * pname:pQueueFamilyPropertyCount is a pointer to an integer related to
1443e5c31af7Sopenharmony_ci    the number of queue families available or queried, as described in
1444e5c31af7Sopenharmony_ci    flink:vkGetPhysicalDeviceQueueFamilyProperties.
1445e5c31af7Sopenharmony_ci  * pname:pQueueFamilyProperties is either `NULL` or a pointer to an array
1446e5c31af7Sopenharmony_ci    of slink:VkQueueFamilyProperties2 structures.
1447e5c31af7Sopenharmony_ci
1448e5c31af7Sopenharmony_cifname:vkGetPhysicalDeviceQueueFamilyProperties2 behaves similarly to
1449e5c31af7Sopenharmony_ciflink:vkGetPhysicalDeviceQueueFamilyProperties, with the ability to return
1450e5c31af7Sopenharmony_ciextended information in a pname:pNext chain of output structures.
1451e5c31af7Sopenharmony_ci
1452e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPhysicalDeviceQueueFamilyProperties2.adoc[]
1453e5c31af7Sopenharmony_ci--
1454e5c31af7Sopenharmony_ci
1455e5c31af7Sopenharmony_ci[open,refpage='VkQueueFamilyProperties2',desc='Structure providing information about a queue family',type='structs']
1456e5c31af7Sopenharmony_ci--
1457e5c31af7Sopenharmony_ciThe sname:VkQueueFamilyProperties2 structure is defined as:
1458e5c31af7Sopenharmony_ci
1459e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkQueueFamilyProperties2.adoc[]
1460e5c31af7Sopenharmony_ci
1461e5c31af7Sopenharmony_ciifdef::VK_KHR_get_physical_device_properties2[]
1462e5c31af7Sopenharmony_cior the equivalent
1463e5c31af7Sopenharmony_ci
1464e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkQueueFamilyProperties2KHR.adoc[]
1465e5c31af7Sopenharmony_ciendif::VK_KHR_get_physical_device_properties2[]
1466e5c31af7Sopenharmony_ci
1467e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1468e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1469e5c31af7Sopenharmony_ci    structure.
1470e5c31af7Sopenharmony_ci  * pname:queueFamilyProperties is a slink:VkQueueFamilyProperties structure
1471e5c31af7Sopenharmony_ci    which is populated with the same values as in
1472e5c31af7Sopenharmony_ci    flink:vkGetPhysicalDeviceQueueFamilyProperties.
1473e5c31af7Sopenharmony_ci
1474e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkQueueFamilyProperties2.adoc[]
1475e5c31af7Sopenharmony_ci--
1476e5c31af7Sopenharmony_ci
1477e5c31af7Sopenharmony_ciifdef::VK_EXT_global_priority_query,VK_KHR_global_priority[]
1478e5c31af7Sopenharmony_ci[open,refpage='VkQueueFamilyGlobalPriorityPropertiesKHR',desc='Return structure for queue family global priority information query',type='structs']
1479e5c31af7Sopenharmony_ci--
1480e5c31af7Sopenharmony_ciThe definition of slink:VkQueueFamilyGlobalPriorityPropertiesKHR is:
1481e5c31af7Sopenharmony_ci
1482e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkQueueFamilyGlobalPriorityPropertiesKHR.adoc[]
1483e5c31af7Sopenharmony_ciifdef::VK_EXT_global_priority_query[]
1484e5c31af7Sopenharmony_cior the equivalent
1485e5c31af7Sopenharmony_ci
1486e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkQueueFamilyGlobalPriorityPropertiesEXT.adoc[]
1487e5c31af7Sopenharmony_ciendif::VK_EXT_global_priority_query[]
1488e5c31af7Sopenharmony_ci
1489e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1490e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1491e5c31af7Sopenharmony_ci    structure.
1492e5c31af7Sopenharmony_ci  * pname:priorityCount is the number of supported global queue priorities
1493e5c31af7Sopenharmony_ci    in this queue family, and it must: be greater than 0.
1494e5c31af7Sopenharmony_ci  * pname:priorities is an array of ename:VK_MAX_GLOBAL_PRIORITY_SIZE_EXT
1495e5c31af7Sopenharmony_ci    elink:VkQueueGlobalPriorityEXT enums representing all supported global
1496e5c31af7Sopenharmony_ci    queue priorities in this queue family.
1497e5c31af7Sopenharmony_ci    The first pname:priorityCount elements of the array will be valid.
1498e5c31af7Sopenharmony_ci
1499e5c31af7Sopenharmony_ciIf the sname:VkQueueFamilyGlobalPriorityPropertiesKHR structure is included
1500e5c31af7Sopenharmony_ciin the pname:pNext chain of the slink:VkQueueFamilyProperties2 structure
1501e5c31af7Sopenharmony_cipassed to flink:vkGetPhysicalDeviceQueueFamilyProperties2, it is filled in
1502e5c31af7Sopenharmony_ciwith the list of supported global queue priorities for the indicated family.
1503e5c31af7Sopenharmony_ci
1504e5c31af7Sopenharmony_ciThe valid elements of pname:priorities must: not contain any duplicate
1505e5c31af7Sopenharmony_civalues.
1506e5c31af7Sopenharmony_ci
1507e5c31af7Sopenharmony_ciThe valid elements of pname:priorities must: be a continuous sequence of
1508e5c31af7Sopenharmony_cielink:VkQueueGlobalPriorityKHR enums in the ascending order.
1509e5c31af7Sopenharmony_ci
1510e5c31af7Sopenharmony_ci[NOTE]
1511e5c31af7Sopenharmony_ci.Note
1512e5c31af7Sopenharmony_ci====
1513e5c31af7Sopenharmony_ciFor example, returning pname:priorityCount as 3 with supported
1514e5c31af7Sopenharmony_cipname:priorities as ename:VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR,
1515e5c31af7Sopenharmony_ciename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR and
1516e5c31af7Sopenharmony_ciename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR is not allowed.
1517e5c31af7Sopenharmony_ci====
1518e5c31af7Sopenharmony_ci
1519e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkQueueFamilyGlobalPriorityPropertiesKHR.adoc[]
1520e5c31af7Sopenharmony_ci--
1521e5c31af7Sopenharmony_ci
1522e5c31af7Sopenharmony_ci[open,refpage='VK_MAX_GLOBAL_PRIORITY_SIZE_KHR',desc='Length of an array of global queue priorities',type='consts']
1523e5c31af7Sopenharmony_ci--
1524e5c31af7Sopenharmony_ciename:VK_MAX_GLOBAL_PRIORITY_SIZE_KHR is the length of an array of
1525e5c31af7Sopenharmony_cielink:VkQueueGlobalPriorityKHR enumerants representing supported queue
1526e5c31af7Sopenharmony_cipriorities, as returned in
1527e5c31af7Sopenharmony_cislink:VkQueueFamilyGlobalPriorityPropertiesKHR::pname:priorities.
1528e5c31af7Sopenharmony_ci
1529e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_GLOBAL_PRIORITY_SIZE_KHR.adoc[]
1530e5c31af7Sopenharmony_ci
1531e5c31af7Sopenharmony_ciifdef::VK_EXT_global_priority_query[]
1532e5c31af7Sopenharmony_cior the equivalent
1533e5c31af7Sopenharmony_ci
1534e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_GLOBAL_PRIORITY_SIZE_EXT.adoc[]
1535e5c31af7Sopenharmony_ciendif::VK_EXT_global_priority_query[]
1536e5c31af7Sopenharmony_ci--
1537e5c31af7Sopenharmony_ciendif::VK_EXT_global_priority_query,VK_KHR_global_priority[]
1538e5c31af7Sopenharmony_ci
1539e5c31af7Sopenharmony_ciifdef::VK_NV_device_diagnostic_checkpoints[]
1540e5c31af7Sopenharmony_ciinclude::{chapters}/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.adoc[]
1541e5c31af7Sopenharmony_ciendif::VK_NV_device_diagnostic_checkpoints[]
1542e5c31af7Sopenharmony_ci
1543e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
1544e5c31af7Sopenharmony_ci
1545e5c31af7Sopenharmony_ciifdef::VK_KHR_video_queue[]
1546e5c31af7Sopenharmony_ci[open,refpage='VkQueueFamilyVideoPropertiesKHR',desc='Structure describing video codec operations supported by a queue family',type='structs']
1547e5c31af7Sopenharmony_ci--
1548e5c31af7Sopenharmony_ciThe slink:VkQueueFamilyVideoPropertiesKHR structure is defined as:
1549e5c31af7Sopenharmony_ci
1550e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkQueueFamilyVideoPropertiesKHR.adoc[]
1551e5c31af7Sopenharmony_ci
1552e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1553e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1554e5c31af7Sopenharmony_ci    structure.
1555e5c31af7Sopenharmony_ci  * pname:videoCodecOperations is a bitmask of
1556e5c31af7Sopenharmony_ci    elink:VkVideoCodecOperationFlagBitsKHR that indicates the set of video
1557e5c31af7Sopenharmony_ci    codec operations supported by the queue family.
1558e5c31af7Sopenharmony_ci
1559e5c31af7Sopenharmony_ciIf this structure is included in the pname:pNext chain of the
1560e5c31af7Sopenharmony_cislink:VkQueueFamilyProperties2 structure passed to
1561e5c31af7Sopenharmony_ciflink:vkGetPhysicalDeviceQueueFamilyProperties2, then it is filled with the
1562e5c31af7Sopenharmony_ciset of video codec operations supported by the specified queue family.
1563e5c31af7Sopenharmony_ci
1564e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkQueueFamilyVideoPropertiesKHR.adoc[]
1565e5c31af7Sopenharmony_ci--
1566e5c31af7Sopenharmony_ci
1567e5c31af7Sopenharmony_ci[open,refpage='VkQueueFamilyQueryResultStatusPropertiesKHR',desc='Structure specifying support for result status query',type='structs']
1568e5c31af7Sopenharmony_ci--
1569e5c31af7Sopenharmony_ciThe slink:VkQueueFamilyQueryResultStatusPropertiesKHR structure is defined
1570e5c31af7Sopenharmony_cias:
1571e5c31af7Sopenharmony_ci
1572e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkQueueFamilyQueryResultStatusPropertiesKHR.adoc[]
1573e5c31af7Sopenharmony_ci
1574e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1575e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1576e5c31af7Sopenharmony_ci    structure.
1577e5c31af7Sopenharmony_ci  * pname:queryResultStatusSupport reports ename:VK_TRUE if query type
1578e5c31af7Sopenharmony_ci    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR and use of
1579e5c31af7Sopenharmony_ci    ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR are supported.
1580e5c31af7Sopenharmony_ci
1581e5c31af7Sopenharmony_ciIf this structure is included in the pname:pNext chain of the
1582e5c31af7Sopenharmony_cislink:VkQueueFamilyProperties2 structure passed to
1583e5c31af7Sopenharmony_ciflink:vkGetPhysicalDeviceQueueFamilyProperties2, then it is filled with
1584e5c31af7Sopenharmony_ciinformation about whether <<queries-result-status-only,result status
1585e5c31af7Sopenharmony_ciqueries>> are supported by the specified queue family.
1586e5c31af7Sopenharmony_ci
1587e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkQueueFamilyQueryResultStatusPropertiesKHR.adoc[]
1588e5c31af7Sopenharmony_ci--
1589e5c31af7Sopenharmony_ciendif::VK_KHR_video_queue[]
1590e5c31af7Sopenharmony_ci
1591e5c31af7Sopenharmony_ciifdef::VK_KHR_performance_query[]
1592e5c31af7Sopenharmony_ciinclude::{chapters}/VK_KHR_performance_query/queuefamily.adoc[]
1593e5c31af7Sopenharmony_ciendif::VK_KHR_performance_query[]
1594e5c31af7Sopenharmony_ci
1595e5c31af7Sopenharmony_ci
1596e5c31af7Sopenharmony_ci[[devsandqueues-devices]]
1597e5c31af7Sopenharmony_ci== Devices
1598e5c31af7Sopenharmony_ci
1599e5c31af7Sopenharmony_ciDevice objects represent logical connections to physical devices.
1600e5c31af7Sopenharmony_ciEach device exposes a number of _queue families_ each having one or more
1601e5c31af7Sopenharmony_ci_queues_.
1602e5c31af7Sopenharmony_ciAll queues in a queue family support the same operations.
1603e5c31af7Sopenharmony_ci
1604e5c31af7Sopenharmony_ciAs described in <<devsandqueues-physical-device-enumeration,Physical
1605e5c31af7Sopenharmony_ciDevices>>, a Vulkan application will first query for all physical devices in
1606e5c31af7Sopenharmony_cia system.
1607e5c31af7Sopenharmony_ciEach physical device can: then be queried for its capabilities, including
1608e5c31af7Sopenharmony_ciits queue and queue family properties.
1609e5c31af7Sopenharmony_ciOnce an acceptable physical device is identified, an application will create
1610e5c31af7Sopenharmony_cia corresponding logical device.
1611e5c31af7Sopenharmony_ciThe created logical device is then the primary interface to the physical
1612e5c31af7Sopenharmony_cidevice.
1613e5c31af7Sopenharmony_ci
1614e5c31af7Sopenharmony_ciHow to enumerate the physical devices in a system and query those physical
1615e5c31af7Sopenharmony_cidevices for their queue family properties is described in the
1616e5c31af7Sopenharmony_ci<<devsandqueues-physical-device-enumeration, Physical Device Enumeration>>
1617e5c31af7Sopenharmony_cisection above.
1618e5c31af7Sopenharmony_ci
1619e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
1620e5c31af7Sopenharmony_ci
1621e5c31af7Sopenharmony_ciA single logical device can: be created from multiple physical devices, if
1622e5c31af7Sopenharmony_cithose physical devices belong to the same device group.
1623e5c31af7Sopenharmony_ciA _device group_ is a set of physical devices that support accessing each
1624e5c31af7Sopenharmony_ciother's memory and recording a single command buffer that can: be executed
1625e5c31af7Sopenharmony_cion all the physical devices.
1626e5c31af7Sopenharmony_ciDevice groups are enumerated by calling
1627e5c31af7Sopenharmony_ciflink:vkEnumeratePhysicalDeviceGroups, and a logical device is created from
1628e5c31af7Sopenharmony_cia subset of the physical devices in a device group by passing the physical
1629e5c31af7Sopenharmony_cidevices through slink:VkDeviceGroupDeviceCreateInfo.
1630e5c31af7Sopenharmony_ciFor two physical devices to be in the same device group, they must: support
1631e5c31af7Sopenharmony_ciidentical extensions, features, and properties.
1632e5c31af7Sopenharmony_ci
1633e5c31af7Sopenharmony_ci[NOTE]
1634e5c31af7Sopenharmony_ci.Note
1635e5c31af7Sopenharmony_ci====
1636e5c31af7Sopenharmony_ciPhysical devices in the same device group must: be so similar because there
1637e5c31af7Sopenharmony_ciare no rules for how different features/properties would interact.
1638e5c31af7Sopenharmony_ciThey must: return the same values for nearly every invariant
1639e5c31af7Sopenharmony_ciftext:vkGetPhysicalDevice* feature, property, capability, etc., but could
1640e5c31af7Sopenharmony_cipotentially differ for certain queries based on things like having a
1641e5c31af7Sopenharmony_cidifferent display connected, or a different compositor.
1642e5c31af7Sopenharmony_ciThe specification does not attempt to enumerate which state is in each
1643e5c31af7Sopenharmony_cicategory, because such a list would quickly become out of date.
1644e5c31af7Sopenharmony_ci====
1645e5c31af7Sopenharmony_ci
1646e5c31af7Sopenharmony_ci[open,refpage='vkEnumeratePhysicalDeviceGroups',desc='Enumerates groups of physical devices that can be used to create a single logical device',type='protos']
1647e5c31af7Sopenharmony_ci--
1648e5c31af7Sopenharmony_ciTo retrieve a list of the device groups present in the system, call:
1649e5c31af7Sopenharmony_ci
1650e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
1651e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkEnumeratePhysicalDeviceGroups.adoc[]
1652e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
1653e5c31af7Sopenharmony_ci
1654e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1+VK_KHR_device_group_creation[or the equivalent command]
1655e5c31af7Sopenharmony_ci
1656e5c31af7Sopenharmony_ciifdef::VK_KHR_device_group_creation[]
1657e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkEnumeratePhysicalDeviceGroupsKHR.adoc[]
1658e5c31af7Sopenharmony_ciendif::VK_KHR_device_group_creation[]
1659e5c31af7Sopenharmony_ci
1660e5c31af7Sopenharmony_ci  * pname:instance is a handle to a Vulkan instance previously created with
1661e5c31af7Sopenharmony_ci    flink:vkCreateInstance.
1662e5c31af7Sopenharmony_ci  * pname:pPhysicalDeviceGroupCount is a pointer to an integer related to
1663e5c31af7Sopenharmony_ci    the number of device groups available or queried, as described below.
1664e5c31af7Sopenharmony_ci  * pname:pPhysicalDeviceGroupProperties is either `NULL` or a pointer to an
1665e5c31af7Sopenharmony_ci    array of slink:VkPhysicalDeviceGroupProperties structures.
1666e5c31af7Sopenharmony_ci
1667e5c31af7Sopenharmony_ciIf pname:pPhysicalDeviceGroupProperties is `NULL`, then the number of device
1668e5c31af7Sopenharmony_cigroups available is returned in pname:pPhysicalDeviceGroupCount.
1669e5c31af7Sopenharmony_ciOtherwise, pname:pPhysicalDeviceGroupCount must: point to a variable set by
1670e5c31af7Sopenharmony_cithe user to the number of elements in the
1671e5c31af7Sopenharmony_cipname:pPhysicalDeviceGroupProperties array, and on return the variable is
1672e5c31af7Sopenharmony_cioverwritten with the number of structures actually written to
1673e5c31af7Sopenharmony_cipname:pPhysicalDeviceGroupProperties.
1674e5c31af7Sopenharmony_ciIf pname:pPhysicalDeviceGroupCount is less than the number of device groups
1675e5c31af7Sopenharmony_ciavailable, at most pname:pPhysicalDeviceGroupCount structures will be
1676e5c31af7Sopenharmony_ciwritten, and ename:VK_INCOMPLETE will be returned instead of
1677e5c31af7Sopenharmony_ciename:VK_SUCCESS, to indicate that not all the available device groups were
1678e5c31af7Sopenharmony_cireturned.
1679e5c31af7Sopenharmony_ci
1680e5c31af7Sopenharmony_ciEvery physical device must: be in exactly one device group.
1681e5c31af7Sopenharmony_ci
1682e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkEnumeratePhysicalDeviceGroups.adoc[]
1683e5c31af7Sopenharmony_ci--
1684e5c31af7Sopenharmony_ci
1685e5c31af7Sopenharmony_ci[open,refpage='VkPhysicalDeviceGroupProperties',desc='Structure specifying physical device group properties',type='structs']
1686e5c31af7Sopenharmony_ci--
1687e5c31af7Sopenharmony_ciThe sname:VkPhysicalDeviceGroupProperties structure is defined as:
1688e5c31af7Sopenharmony_ci
1689e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceGroupProperties.adoc[]
1690e5c31af7Sopenharmony_ci
1691e5c31af7Sopenharmony_ciifdef::VK_KHR_device_group_creation[]
1692e5c31af7Sopenharmony_cior the equivalent
1693e5c31af7Sopenharmony_ci
1694e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPhysicalDeviceGroupPropertiesKHR.adoc[]
1695e5c31af7Sopenharmony_ciendif::VK_KHR_device_group_creation[]
1696e5c31af7Sopenharmony_ci
1697e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1698e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1699e5c31af7Sopenharmony_ci    structure.
1700e5c31af7Sopenharmony_ci  * pname:physicalDeviceCount is the number of physical devices in the
1701e5c31af7Sopenharmony_ci    group.
1702e5c31af7Sopenharmony_ci  * pname:physicalDevices is an array of ename:VK_MAX_DEVICE_GROUP_SIZE
1703e5c31af7Sopenharmony_ci    slink:VkPhysicalDevice handles representing all physical devices in the
1704e5c31af7Sopenharmony_ci    group.
1705e5c31af7Sopenharmony_ci    The first pname:physicalDeviceCount elements of the array will be valid.
1706e5c31af7Sopenharmony_ci  * pname:subsetAllocation specifies whether logical devices created from
1707e5c31af7Sopenharmony_ci    the group support allocating device memory on a subset of devices, via
1708e5c31af7Sopenharmony_ci    the pname:deviceMask member of the slink:VkMemoryAllocateFlagsInfo.
1709e5c31af7Sopenharmony_ci    If this is ename:VK_FALSE, then all device memory allocations are made
1710e5c31af7Sopenharmony_ci    across all physical devices in the group.
1711e5c31af7Sopenharmony_ci    If pname:physicalDeviceCount is `1`, then pname:subsetAllocation must:
1712e5c31af7Sopenharmony_ci    be ename:VK_FALSE.
1713e5c31af7Sopenharmony_ci
1714e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPhysicalDeviceGroupProperties.adoc[]
1715e5c31af7Sopenharmony_ci--
1716e5c31af7Sopenharmony_ci
1717e5c31af7Sopenharmony_ci[open,refpage='VK_MAX_DEVICE_GROUP_SIZE',desc='Length of a physical device handle array',type='consts',alias='VK_MAX_DEVICE_GROUP_SIZE_KHR']
1718e5c31af7Sopenharmony_ci--
1719e5c31af7Sopenharmony_ciename:VK_MAX_DEVICE_GROUP_SIZE is the length of an array containing
1720e5c31af7Sopenharmony_cislink:VkPhysicalDevice handle values representing all physical devices in a
1721e5c31af7Sopenharmony_cigroup, as returned in
1722e5c31af7Sopenharmony_cislink:VkPhysicalDeviceGroupProperties::pname:physicalDevices.
1723e5c31af7Sopenharmony_ci
1724e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_DEVICE_GROUP_SIZE.adoc[]
1725e5c31af7Sopenharmony_ci
1726e5c31af7Sopenharmony_ciifdef::VK_KHR_device_group_creation[]
1727e5c31af7Sopenharmony_cior the equivalent
1728e5c31af7Sopenharmony_ci
1729e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_MAX_DEVICE_GROUP_SIZE_KHR.adoc[]
1730e5c31af7Sopenharmony_ciendif::VK_KHR_device_group_creation[]
1731e5c31af7Sopenharmony_ci--
1732e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
1733e5c31af7Sopenharmony_ci
1734e5c31af7Sopenharmony_ci
1735e5c31af7Sopenharmony_ci[[devsandqueues-device-creation]]
1736e5c31af7Sopenharmony_ci=== Device Creation
1737e5c31af7Sopenharmony_ci
1738e5c31af7Sopenharmony_ci[open,refpage='VkDevice',desc='Opaque handle to a device object',type='handles']
1739e5c31af7Sopenharmony_ci--
1740e5c31af7Sopenharmony_ciLogical devices are represented by sname:VkDevice handles:
1741e5c31af7Sopenharmony_ci
1742e5c31af7Sopenharmony_ciinclude::{generated}/api/handles/VkDevice.adoc[]
1743e5c31af7Sopenharmony_ci--
1744e5c31af7Sopenharmony_ci
1745e5c31af7Sopenharmony_ci[open,refpage='vkCreateDevice',desc='Create a new device instance',type='protos']
1746e5c31af7Sopenharmony_ci--
1747e5c31af7Sopenharmony_ciA logical device is created as a _connection_ to a physical device.
1748e5c31af7Sopenharmony_ciTo create a logical device, call:
1749e5c31af7Sopenharmony_ci
1750e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCreateDevice.adoc[]
1751e5c31af7Sopenharmony_ci
1752e5c31af7Sopenharmony_ci  * pname:physicalDevice must: be one of the device handles returned from a
1753e5c31af7Sopenharmony_ci    call to fname:vkEnumeratePhysicalDevices (see
1754e5c31af7Sopenharmony_ci    <<devsandqueues-physical-device-enumeration, Physical Device
1755e5c31af7Sopenharmony_ci    Enumeration>>).
1756e5c31af7Sopenharmony_ci  * pname:pCreateInfo is a pointer to a slink:VkDeviceCreateInfo structure
1757e5c31af7Sopenharmony_ci    containing information about how to create the device.
1758e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
1759e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
1760e5c31af7Sopenharmony_ci  * pname:pDevice is a pointer to a handle in which the created
1761e5c31af7Sopenharmony_ci    slink:VkDevice is returned.
1762e5c31af7Sopenharmony_ci
1763e5c31af7Sopenharmony_cifname:vkCreateDevice verifies that extensions and features requested in the
1764e5c31af7Sopenharmony_cipname:ppEnabledExtensionNames and pname:pEnabledFeatures members of
1765e5c31af7Sopenharmony_cipname:pCreateInfo, respectively, are supported by the implementation.
1766e5c31af7Sopenharmony_ciIf any requested extension is not supported, fname:vkCreateDevice must:
1767e5c31af7Sopenharmony_cireturn ename:VK_ERROR_EXTENSION_NOT_PRESENT.
1768e5c31af7Sopenharmony_ciIf any requested feature is not supported, fname:vkCreateDevice must: return
1769e5c31af7Sopenharmony_ciename:VK_ERROR_FEATURE_NOT_PRESENT.
1770e5c31af7Sopenharmony_ciSupport for extensions can: be checked before creating a device by querying
1771e5c31af7Sopenharmony_ciflink:vkEnumerateDeviceExtensionProperties.
1772e5c31af7Sopenharmony_ciSupport for features can: similarly be checked by querying
1773e5c31af7Sopenharmony_ciflink:vkGetPhysicalDeviceFeatures.
1774e5c31af7Sopenharmony_ci
1775e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1776e5c31af7Sopenharmony_cifname:vkCreateDevice also verifies that mandatory structures and features
1777e5c31af7Sopenharmony_cifor Vulkan SC are present and enabled:
1778e5c31af7Sopenharmony_ci
1779e5c31af7Sopenharmony_ci  * The pname:pNext chain must: include a
1780e5c31af7Sopenharmony_ci    slink:VkDeviceObjectReservationCreateInfo structure.
1781e5c31af7Sopenharmony_ci  * The pname:pNext chain must: include a
1782e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkanSC10Features structure.
1783e5c31af7Sopenharmony_ciifdef::hidden[]
1784e5c31af7Sopenharmony_ci// tag::scdeviation[]
1785e5c31af7Sopenharmony_ci  * The slink:VkDeviceCreateInfo::pname:pNext chain must: include a
1786e5c31af7Sopenharmony_ci    slink:VkDeviceObjectReservationCreateInfo structure <<SCID-4>>.
1787e5c31af7Sopenharmony_ci  * The slink:VkDeviceCreateInfo::pname:pNext chain must: include a
1788e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkanSC10Features structure <<SCID-1>>.
1789e5c31af7Sopenharmony_ci// end::scdeviation[]
1790e5c31af7Sopenharmony_ciendif::hidden[]
1791e5c31af7Sopenharmony_ci
1792e5c31af7Sopenharmony_ciIf any of these conditions are not met, fname:vkCreateDevice must: return
1793e5c31af7Sopenharmony_ciename:VK_ERROR_INITIALIZATION_FAILED.
1794e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1795e5c31af7Sopenharmony_ci
1796e5c31af7Sopenharmony_ciAfter verifying and enabling the extensions the sname:VkDevice object is
1797e5c31af7Sopenharmony_cicreated and returned to the application.
1798e5c31af7Sopenharmony_ci
1799e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
1800e5c31af7Sopenharmony_ciMultiple logical devices can: be created from the same physical device.
1801e5c31af7Sopenharmony_ciLogical device creation may: fail due to lack of device-specific resources
1802e5c31af7Sopenharmony_ci(in addition to other errors).
1803e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1804e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1805e5c31af7Sopenharmony_ciAn implementation may: allow multiple logical devices to be created from the
1806e5c31af7Sopenharmony_cisame physical device.
1807e5c31af7Sopenharmony_ciLogical device creation may: fail due to lack of device-specific resources,
1808e5c31af7Sopenharmony_ciincluding too many other logical devices, in addition to other errors.
1809e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1810e5c31af7Sopenharmony_ciIf that occurs, fname:vkCreateDevice will return
1811e5c31af7Sopenharmony_ciename:VK_ERROR_TOO_MANY_OBJECTS.
1812e5c31af7Sopenharmony_ci
1813e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1814e5c31af7Sopenharmony_ciIf the pipeline cache data pointed to by the pname:pInitialData member of
1815e5c31af7Sopenharmony_ciany element of
1816e5c31af7Sopenharmony_cislink:VkDeviceObjectReservationCreateInfo::pname:pPipelineCacheCreateInfos
1817e5c31af7Sopenharmony_ciis not compatible with the device, then fname:vkCreateDevice will return
1818e5c31af7Sopenharmony_ciename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA.
1819e5c31af7Sopenharmony_ciifdef::hidden[]
1820e5c31af7Sopenharmony_ci// tag::scdeviation[]
1821e5c31af7Sopenharmony_ci  * flink:vkCreateDevice returns ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA
1822e5c31af7Sopenharmony_ci    if the pname:pInitialData member of any element of
1823e5c31af7Sopenharmony_ci    slink:VkDeviceObjectReservationCreateInfo::pname:pPipelineCacheCreateInfos
1824e5c31af7Sopenharmony_ci    is a pointer to incompatible pipeline cache data <<SCID-1>>.
1825e5c31af7Sopenharmony_ci// end::scdeviation[]
1826e5c31af7Sopenharmony_ciendif::hidden[]
1827e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1828e5c31af7Sopenharmony_ci
1829e5c31af7Sopenharmony_ciifdef::VK_EXT_application_parameters[]
1830e5c31af7Sopenharmony_ciTo provide _application parameters_ at device creation time, an application
1831e5c31af7Sopenharmony_cican: link one or more slink:VkApplicationParametersEXT structures to the
1832e5c31af7Sopenharmony_cipname:pNext chain of the sname:VkDeviceCreateInfo structure.
1833e5c31af7Sopenharmony_ci
1834e5c31af7Sopenharmony_ciIf the slink:VkApplicationParametersEXT::pname:vendorID and
1835e5c31af7Sopenharmony_cislink:VkApplicationParametersEXT::pname:deviceID values do not match the
1836e5c31af7Sopenharmony_cislink:VkPhysicalDeviceProperties::pname:vendorID and
1837e5c31af7Sopenharmony_cislink:VkPhysicalDeviceProperties::pname:deviceID of pname:physicalDevice,
1838e5c31af7Sopenharmony_ciflink:vkCreateDevice must: return ename:VK_ERROR_INITIALIZATION_FAILED.
1839e5c31af7Sopenharmony_ci
1840e5c31af7Sopenharmony_ciIf slink:VkApplicationParametersEXT::pname:key is not a valid
1841e5c31af7Sopenharmony_ciimplementation-defined application parameter key for the device being
1842e5c31af7Sopenharmony_cicreated, or if pname:value is not a valid value for the specified pname:key,
1843e5c31af7Sopenharmony_ciflink:vkCreateDevice will fail and return
1844e5c31af7Sopenharmony_ciename:VK_ERROR_INITIALIZATION_FAILED.
1845e5c31af7Sopenharmony_ci
1846e5c31af7Sopenharmony_ciFor any implementation-defined application parameter pname:key that exists
1847e5c31af7Sopenharmony_cibut is not set by the application, the implementation-specific default value
1848e5c31af7Sopenharmony_ciis used.
1849e5c31af7Sopenharmony_ciendif::VK_EXT_application_parameters[]
1850e5c31af7Sopenharmony_ci
1851e5c31af7Sopenharmony_ci.Valid Usage
1852e5c31af7Sopenharmony_ci****
1853e5c31af7Sopenharmony_ci  * [[VUID-vkCreateDevice-ppEnabledExtensionNames-01387]]
1854e5c31af7Sopenharmony_ci    All <<extendingvulkan-extensions-extensiondependencies, required device
1855e5c31af7Sopenharmony_ci    extensions>> for each extension in the
1856e5c31af7Sopenharmony_ci    slink:VkDeviceCreateInfo::pname:ppEnabledExtensionNames list must: also
1857e5c31af7Sopenharmony_ci    be present in that list
1858e5c31af7Sopenharmony_ciifdef::VK_EXT_application_parameters[]
1859e5c31af7Sopenharmony_ci  * [[VUID-vkCreateDevice-key-05092]]
1860e5c31af7Sopenharmony_ci    The pname:key value of each slink:VkApplicationParametersEXT structure
1861e5c31af7Sopenharmony_ci    in the slink:VkDeviceCreateInfo::pname:pNext chain must: be unique
1862e5c31af7Sopenharmony_ciendif::VK_EXT_application_parameters[]
1863e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1864e5c31af7Sopenharmony_ci  * [[VUID-vkCreateDevice-deviceMemoryRequestCount-05095]]
1865e5c31af7Sopenharmony_ci    The sum of pname:deviceMemoryRequestCount over all
1866e5c31af7Sopenharmony_ci    sname:VkDeviceObjectReservationCreateInfo structures included in the
1867e5c31af7Sopenharmony_ci    slink:VkDeviceCreateInfo::pname:pNext chain must: be less than or equal
1868e5c31af7Sopenharmony_ci    to slink:VkPhysicalDeviceLimits::pname:maxMemoryAllocationCount
1869e5c31af7Sopenharmony_ci  * [[VUID-vkCreateDevice-samplerRequestCount-05096]]
1870e5c31af7Sopenharmony_ci    The sum of pname:samplerRequestCount over all
1871e5c31af7Sopenharmony_ci    sname:VkDeviceObjectReservationCreateInfo structures included in the
1872e5c31af7Sopenharmony_ci    slink:VkDeviceCreateInfo::pname:pNext chain must: be less than or equal
1873e5c31af7Sopenharmony_ci    to slink:VkPhysicalDeviceLimits::pname:maxSamplerAllocationCount
1874e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1875e5c31af7Sopenharmony_ci****
1876e5c31af7Sopenharmony_ci
1877e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCreateDevice.adoc[]
1878e5c31af7Sopenharmony_ci--
1879e5c31af7Sopenharmony_ci
1880e5c31af7Sopenharmony_ci[open,refpage='VkDeviceCreateInfo',desc='Structure specifying parameters of a newly created device',type='structs']
1881e5c31af7Sopenharmony_ci--
1882e5c31af7Sopenharmony_ciThe sname:VkDeviceCreateInfo structure is defined as:
1883e5c31af7Sopenharmony_ci
1884e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceCreateInfo.adoc[]
1885e5c31af7Sopenharmony_ci
1886e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1887e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1888e5c31af7Sopenharmony_ci    structure.
1889e5c31af7Sopenharmony_ci  * pname:flags is reserved for future use.
1890e5c31af7Sopenharmony_ci  * pname:queueCreateInfoCount is the unsigned integer size of the
1891e5c31af7Sopenharmony_ci    pname:pQueueCreateInfos array.
1892e5c31af7Sopenharmony_ci    Refer to the <<devsandqueues-queue-creation,Queue Creation>> section
1893e5c31af7Sopenharmony_ci    below for further details.
1894e5c31af7Sopenharmony_ci  * pname:pQueueCreateInfos is a pointer to an array of
1895e5c31af7Sopenharmony_ci    slink:VkDeviceQueueCreateInfo structures describing the queues that are
1896e5c31af7Sopenharmony_ci    requested to be created along with the logical device.
1897e5c31af7Sopenharmony_ci    Refer to the <<devsandqueues-queue-creation,Queue Creation>> section
1898e5c31af7Sopenharmony_ci    below for further details.
1899e5c31af7Sopenharmony_ci  * pname:enabledLayerCount is deprecated and ignored.
1900e5c31af7Sopenharmony_ci  * pname:ppEnabledLayerNames is deprecated and ignored.
1901e5c31af7Sopenharmony_ci    See <<extendingvulkan-layers-devicelayerdeprecation>>.
1902e5c31af7Sopenharmony_ci  * pname:enabledExtensionCount is the number of device extensions to
1903e5c31af7Sopenharmony_ci    enable.
1904e5c31af7Sopenharmony_ci  * pname:ppEnabledExtensionNames is a pointer to an array of
1905e5c31af7Sopenharmony_ci    pname:enabledExtensionCount null-terminated UTF-8 strings containing the
1906e5c31af7Sopenharmony_ci    names of extensions to enable for the created device.
1907e5c31af7Sopenharmony_ci    See the <<extendingvulkan-extensions>> section for further details.
1908e5c31af7Sopenharmony_ci  * pname:pEnabledFeatures is `NULL` or a pointer to a
1909e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceFeatures structure containing boolean indicators
1910e5c31af7Sopenharmony_ci    of all the features to be enabled.
1911e5c31af7Sopenharmony_ci    Refer to the <<features, Features>> section for further details.
1912e5c31af7Sopenharmony_ci
1913e5c31af7Sopenharmony_ci.Valid Usage
1914e5c31af7Sopenharmony_ci****
1915e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-queueFamilyIndex-02802]]
1916e5c31af7Sopenharmony_ci    The pname:queueFamilyIndex member of each element of
1917e5c31af7Sopenharmony_ci    pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos
1918e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
1919e5c31af7Sopenharmony_ci    , except that two members can share the same pname:queueFamilyIndex if
1920e5c31af7Sopenharmony_ci    one describes protected-capable queues and one describes queues that are
1921e5c31af7Sopenharmony_ci    not protected-capable
1922e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
1923e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
1924e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pQueueCreateInfos-06755]]
1925e5c31af7Sopenharmony_ci    If multiple elements of pname:pQueueCreateInfos share the same
1926e5c31af7Sopenharmony_ci    pname:queueFamilyIndex, the sum of their pname:queueCount members must:
1927e5c31af7Sopenharmony_ci    be less than or equal to the pname:queueCount member of the
1928e5c31af7Sopenharmony_ci    sname:VkQueueFamilyProperties structure, as returned by
1929e5c31af7Sopenharmony_ci    fname:vkGetPhysicalDeviceQueueFamilyProperties in the
1930e5c31af7Sopenharmony_ci    pname:pQueueFamilyProperties[queueFamilyIndex]
1931e5c31af7Sopenharmony_ciifdef::VK_KHR_global_priority,VK_EXT_global_priority[]
1932e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pQueueCreateInfos-06654]]
1933e5c31af7Sopenharmony_ci    If multiple elements of pname:pQueueCreateInfos share the same
1934e5c31af7Sopenharmony_ci    pname:queueFamilyIndex, then all of such elements must: have the same
1935e5c31af7Sopenharmony_ci    global priority level, which can: be specified explicitly by the
1936e5c31af7Sopenharmony_ci    including a slink:VkDeviceQueueGlobalPriorityCreateInfoKHR structure in
1937e5c31af7Sopenharmony_ci    the pname:pNext chain, or by the implicit default value
1938e5c31af7Sopenharmony_ciendif::VK_KHR_global_priority,VK_EXT_global_priority[]
1939e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
1940e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
1941e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pNext-00373]]
1942e5c31af7Sopenharmony_ci    If the pname:pNext chain includes a slink:VkPhysicalDeviceFeatures2
1943e5c31af7Sopenharmony_ci    structure, then pname:pEnabledFeatures must: be `NULL`
1944e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
1945e5c31af7Sopenharmony_ciifdef::VK_AMD_negative_viewport_height[]
1946e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
1947e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-01840]]
1948e5c31af7Sopenharmony_ci    If slink:VkPhysicalDeviceProperties::pname:apiVersion advertises Vulkan
1949e5c31af7Sopenharmony_ci    1.1 or later, pname:ppEnabledExtensionNames must: not contain
1950e5c31af7Sopenharmony_ci    `apiext:VK_AMD_negative_viewport_height`
1951e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
1952e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance1[]
1953e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-00374]]
1954e5c31af7Sopenharmony_ci    pname:ppEnabledExtensionNames must: not contain both
1955e5c31af7Sopenharmony_ci    `apiext:VK_KHR_maintenance1` and
1956e5c31af7Sopenharmony_ci    `apiext:VK_AMD_negative_viewport_height`
1957e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance1[]
1958e5c31af7Sopenharmony_ciendif::VK_AMD_negative_viewport_height[]
1959e5c31af7Sopenharmony_ciifdef::VK_EXT_buffer_device_address+VK_KHR_buffer_device_address[]
1960e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-03328]]
1961e5c31af7Sopenharmony_ci    pname:ppEnabledExtensionNames must: not contain both
1962e5c31af7Sopenharmony_ci    `apiext:VK_KHR_buffer_device_address` and
1963e5c31af7Sopenharmony_ci    `apiext:VK_EXT_buffer_device_address`
1964e5c31af7Sopenharmony_ciendif::VK_EXT_buffer_device_address+VK_KHR_buffer_device_address[]
1965e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2[]
1966e5c31af7Sopenharmony_ciifdef::VK_EXT_buffer_device_address[]
1967e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pNext-04748]]
1968e5c31af7Sopenharmony_ci    If the pname:pNext chain includes a
1969e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan12Features structure and
1970e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress is
1971e5c31af7Sopenharmony_ci    ename:VK_TRUE, pname:ppEnabledExtensionNames must: not contain
1972e5c31af7Sopenharmony_ci    `apiext:VK_EXT_buffer_device_address`
1973e5c31af7Sopenharmony_ciendif::VK_EXT_buffer_device_address[]
1974e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pNext-02829]]
1975e5c31af7Sopenharmony_ci    If the pname:pNext chain includes a
1976e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan11Features structure, then it must: not
1977e5c31af7Sopenharmony_ci    include a slink:VkPhysicalDevice16BitStorageFeatures,
1978e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceMultiviewFeatures,
1979e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVariablePointersFeatures,
1980e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceProtectedMemoryFeatures,
1981e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures, or
1982e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceShaderDrawParametersFeatures structure
1983e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pNext-02830]]
1984e5c31af7Sopenharmony_ci    If the pname:pNext chain includes a
1985e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan12Features structure, then it must: not
1986e5c31af7Sopenharmony_ci    include a slink:VkPhysicalDevice8BitStorageFeatures,
1987e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceShaderAtomicInt64Features,
1988e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceShaderFloat16Int8Features,
1989e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceDescriptorIndexingFeatures,
1990e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceScalarBlockLayoutFeatures,
1991e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceImagelessFramebufferFeatures,
1992e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceUniformBufferStandardLayoutFeatures,
1993e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures,
1994e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures,
1995e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceHostQueryResetFeatures,
1996e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceTimelineSemaphoreFeatures,
1997e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceBufferDeviceAddressFeatures, or
1998e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkanMemoryModelFeatures structure
1999e5c31af7Sopenharmony_ciifdef::VK_KHR_shader_draw_parameters[]
2000e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-04476]]
2001e5c31af7Sopenharmony_ci    If pname:ppEnabledExtensionNames contains
2002e5c31af7Sopenharmony_ci    `"VK_KHR_shader_draw_parameters"` and the pname:pNext chain includes a
2003e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan11Features structure, then
2004e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceVulkan11Features::pname:shaderDrawParameters must:
2005e5c31af7Sopenharmony_ci    be ename:VK_TRUE
2006e5c31af7Sopenharmony_ciendif::VK_KHR_shader_draw_parameters[]
2007e5c31af7Sopenharmony_ciifdef::VK_KHR_draw_indirect_count[]
2008e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02831]]
2009e5c31af7Sopenharmony_ci    If pname:ppEnabledExtensionNames contains `"VK_KHR_draw_indirect_count"`
2010e5c31af7Sopenharmony_ci    and the pname:pNext chain includes a
2011e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan12Features structure, then
2012e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceVulkan12Features::pname:drawIndirectCount must: be
2013e5c31af7Sopenharmony_ci    ename:VK_TRUE
2014e5c31af7Sopenharmony_ciendif::VK_KHR_draw_indirect_count[]
2015e5c31af7Sopenharmony_ciifdef::VK_KHR_sampler_mirror_clamp_to_edge[]
2016e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02832]]
2017e5c31af7Sopenharmony_ci    If pname:ppEnabledExtensionNames contains
2018e5c31af7Sopenharmony_ci    `"VK_KHR_sampler_mirror_clamp_to_edge"` and the pname:pNext chain
2019e5c31af7Sopenharmony_ci    includes a slink:VkPhysicalDeviceVulkan12Features structure, then
2020e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceVulkan12Features::pname:samplerMirrorClampToEdge
2021e5c31af7Sopenharmony_ci    must: be ename:VK_TRUE
2022e5c31af7Sopenharmony_ciendif::VK_KHR_sampler_mirror_clamp_to_edge[]
2023e5c31af7Sopenharmony_ciifdef::VK_EXT_descriptor_indexing[]
2024e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02833]]
2025e5c31af7Sopenharmony_ci    If pname:ppEnabledExtensionNames contains `"VK_EXT_descriptor_indexing"`
2026e5c31af7Sopenharmony_ci    and the pname:pNext chain includes a
2027e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan12Features structure, then
2028e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing must:
2029e5c31af7Sopenharmony_ci    be ename:VK_TRUE
2030e5c31af7Sopenharmony_ciendif::VK_EXT_descriptor_indexing[]
2031e5c31af7Sopenharmony_ciifdef::VK_EXT_sampler_filter_minmax[]
2032e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02834]]
2033e5c31af7Sopenharmony_ci    If pname:ppEnabledExtensionNames contains
2034e5c31af7Sopenharmony_ci    `"VK_EXT_sampler_filter_minmax"` and the pname:pNext chain includes a
2035e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan12Features structure, then
2036e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceVulkan12Features::pname:samplerFilterMinmax must:
2037e5c31af7Sopenharmony_ci    be ename:VK_TRUE
2038e5c31af7Sopenharmony_ciendif::VK_EXT_sampler_filter_minmax[]
2039e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_viewport_index_layer[]
2040e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02835]]
2041e5c31af7Sopenharmony_ci    If pname:ppEnabledExtensionNames contains
2042e5c31af7Sopenharmony_ci    `"VK_EXT_shader_viewport_index_layer"` and the pname:pNext chain
2043e5c31af7Sopenharmony_ci    includes a slink:VkPhysicalDeviceVulkan12Features structure, then
2044e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceVulkan12Features::pname:shaderOutputViewportIndex
2045e5c31af7Sopenharmony_ci    and sname:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer
2046e5c31af7Sopenharmony_ci    must: both be ename:VK_TRUE
2047e5c31af7Sopenharmony_ciendif::VK_EXT_shader_viewport_index_layer[]
2048e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2[]
2049e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3[]
2050e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pNext-06532]]
2051e5c31af7Sopenharmony_ci    If the pname:pNext chain includes a
2052e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkan13Features structure, then it must: not
2053e5c31af7Sopenharmony_ci    include a slink:VkPhysicalDeviceDynamicRenderingFeatures,
2054e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceImageRobustnessFeatures,
2055e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceInlineUniformBlockFeatures,
2056e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceMaintenance4Features,
2057e5c31af7Sopenharmony_ci    slink:VkPhysicalDevicePipelineCreationCacheControlFeatures,
2058e5c31af7Sopenharmony_ci    slink:VkPhysicalDevicePrivateDataFeatures,
2059e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures,
2060e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceShaderIntegerDotProductFeatures,
2061e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceShaderTerminateInvocationFeatures,
2062e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceSubgroupSizeControlFeatures,
2063e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceSynchronization2Features,
2064e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceTextureCompressionASTCHDRFeatures, or
2065e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures structure
2066e5c31af7Sopenharmony_ci// Jon 1.3 TBD - add extension-specific VUs specifying when Vulkan13Features
2067e5c31af7Sopenharmony_ci// members must: be true.
2068e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3[]
2069e5c31af7Sopenharmony_ciifdef::VK_KHR_portability_subset[]
2070e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pProperties-04451]]
2071e5c31af7Sopenharmony_ci    If the `apiext:VK_KHR_portability_subset` extension is included in
2072e5c31af7Sopenharmony_ci    pname:pProperties of flink:vkEnumerateDeviceExtensionProperties,
2073e5c31af7Sopenharmony_ci    pname:ppEnabledExtensionNames must: include
2074e5c31af7Sopenharmony_ci    `"VK_KHR_portability_subset"`
2075e5c31af7Sopenharmony_ciendif::VK_KHR_portability_subset[]
2076e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[]
2077e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04478]]
2078e5c31af7Sopenharmony_ci    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
2079e5c31af7Sopenharmony_ci    enabled, the <<features-pipelineFragmentShadingRate,
2080e5c31af7Sopenharmony_ci    pname:pipelineFragmentShadingRate>> feature must: not be enabled
2081e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04479]]
2082e5c31af7Sopenharmony_ci    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
2083e5c31af7Sopenharmony_ci    enabled, the <<features-primitiveFragmentShadingRate,
2084e5c31af7Sopenharmony_ci    pname:primitiveFragmentShadingRate>> feature must: not be enabled
2085e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04480]]
2086e5c31af7Sopenharmony_ci    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
2087e5c31af7Sopenharmony_ci    enabled, the <<features-attachmentFragmentShadingRate,
2088e5c31af7Sopenharmony_ci    pname:attachmentFragmentShadingRate>> feature must: not be enabled
2089e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[]
2090e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate+VK_EXT_fragment_density_map[]
2091e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04481]]
2092e5c31af7Sopenharmony_ci    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
2093e5c31af7Sopenharmony_ci    is enabled, the <<features-pipelineFragmentShadingRate,
2094e5c31af7Sopenharmony_ci    pname:pipelineFragmentShadingRate>> feature must: not be enabled
2095e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04482]]
2096e5c31af7Sopenharmony_ci    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
2097e5c31af7Sopenharmony_ci    is enabled, the <<features-primitiveFragmentShadingRate,
2098e5c31af7Sopenharmony_ci    pname:primitiveFragmentShadingRate>> feature must: not be enabled
2099e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04483]]
2100e5c31af7Sopenharmony_ci    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
2101e5c31af7Sopenharmony_ci    is enabled, the <<features-attachmentFragmentShadingRate,
2102e5c31af7Sopenharmony_ci    pname:attachmentFragmentShadingRate>> feature must: not be enabled
2103e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate+VK_EXT_fragment_density_map[]
2104e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_image_atomic_int64[]
2105e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-None-04896]]
2106e5c31af7Sopenharmony_ci    If <<features-sparseImageInt64Atomics, pname:sparseImageInt64Atomics>>
2107e5c31af7Sopenharmony_ci    is enabled, <<features-shaderImageInt64Atomics,
2108e5c31af7Sopenharmony_ci    pname:shaderImageInt64Atomics>> must: be enabled
2109e5c31af7Sopenharmony_ciendif::VK_EXT_shader_image_atomic_int64[]
2110e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_atomic_float[]
2111e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-None-04897]]
2112e5c31af7Sopenharmony_ci    If <<features-sparseImageFloat32Atomics,
2113e5c31af7Sopenharmony_ci    pname:sparseImageFloat32Atomics>> is enabled,
2114e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>
2115e5c31af7Sopenharmony_ci    must: be enabled
2116e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-None-04898]]
2117e5c31af7Sopenharmony_ci    If <<features-sparseImageFloat32AtomicAdd,
2118e5c31af7Sopenharmony_ci    pname:sparseImageFloat32AtomicAdd>> is enabled,
2119e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32AtomicAdd,
2120e5c31af7Sopenharmony_ci    pname:shaderImageFloat32AtomicAdd>> must: be enabled
2121e5c31af7Sopenharmony_ciendif::VK_EXT_shader_atomic_float[]
2122e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_atomic_float2[]
2123e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-sparseImageFloat32AtomicMinMax-04975]]
2124e5c31af7Sopenharmony_ci    If <<features-sparseImageFloat32AtomicMinMax,
2125e5c31af7Sopenharmony_ci    pname:sparseImageFloat32AtomicMinMax>> is enabled,
2126e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32AtomicMinMax,
2127e5c31af7Sopenharmony_ci    pname:shaderImageFloat32AtomicMinMax>> must: be enabled
2128e5c31af7Sopenharmony_ciendif::VK_EXT_shader_atomic_float2[]
2129e5c31af7Sopenharmony_ciifdef::VK_EXT_descriptor_buffer[]
2130e5c31af7Sopenharmony_ciifdef::VK_AMD_shader_fragment_mask[]
2131e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-None-08095]]
2132e5c31af7Sopenharmony_ci    If <<features-descriptorBuffer, pname:descriptorBuffer>> is enabled,
2133e5c31af7Sopenharmony_ci    pname:ppEnabledExtensionNames must: not contain
2134e5c31af7Sopenharmony_ci    `apiext:VK_AMD_shader_fragment_mask`
2135e5c31af7Sopenharmony_ciendif::VK_AMD_shader_fragment_mask[]
2136e5c31af7Sopenharmony_ciendif::VK_EXT_descriptor_buffer[]
2137e5c31af7Sopenharmony_ciifdef::VK_ARM_scheduling_controls[]
2138e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pNext-09396]]
2139e5c31af7Sopenharmony_ci    If the pname:pNext chain includes a
2140e5c31af7Sopenharmony_ci    slink:VkDeviceQueueShaderCoreControlCreateInfoARM structure, then it
2141e5c31af7Sopenharmony_ci    must: not be included in the pname:pNext chain of any of the
2142e5c31af7Sopenharmony_ci    slink:VkDeviceQueueCreateInfo structures in pname:pQueueCreateInfos.
2143e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceCreateInfo-pNext-09397]]
2144e5c31af7Sopenharmony_ci    If the pname:pNext chain includes a
2145e5c31af7Sopenharmony_ci    slink:VkDeviceQueueShaderCoreControlCreateInfoARM structure then
2146e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceSchedulingControlsPropertiesARM::pname:schedulingControlsFlags
2147e5c31af7Sopenharmony_ci    must: contain
2148e5c31af7Sopenharmony_ci    ename:VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM.
2149e5c31af7Sopenharmony_ciendif::VK_ARM_scheduling_controls[]
2150e5c31af7Sopenharmony_ci****
2151e5c31af7Sopenharmony_ci
2152e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceCreateInfo.adoc[]
2153e5c31af7Sopenharmony_ci--
2154e5c31af7Sopenharmony_ci
2155e5c31af7Sopenharmony_ci[open,refpage='VkDeviceCreateFlags',desc='Reserved for future use',type='flags']
2156e5c31af7Sopenharmony_ci--
2157e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkDeviceCreateFlags.adoc[]
2158e5c31af7Sopenharmony_ci
2159e5c31af7Sopenharmony_citname:VkDeviceCreateFlags is a bitmask type for setting a mask, but is
2160e5c31af7Sopenharmony_cicurrently reserved for future use.
2161e5c31af7Sopenharmony_ci--
2162e5c31af7Sopenharmony_ci
2163e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
2164e5c31af7Sopenharmony_ci[open,refpage='VkDeviceGroupDeviceCreateInfo',desc='Create a logical device from multiple physical devices',type='structs']
2165e5c31af7Sopenharmony_ci--
2166e5c31af7Sopenharmony_ciA logical device can: be created that connects to one or more physical
2167e5c31af7Sopenharmony_cidevices by adding a sname:VkDeviceGroupDeviceCreateInfo structure to the
2168e5c31af7Sopenharmony_cipname:pNext chain of slink:VkDeviceCreateInfo.
2169e5c31af7Sopenharmony_ciThe sname:VkDeviceGroupDeviceCreateInfo structure is defined as:
2170e5c31af7Sopenharmony_ci
2171e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceGroupDeviceCreateInfo.adoc[]
2172e5c31af7Sopenharmony_ci
2173e5c31af7Sopenharmony_ciifdef::VK_KHR_device_group_creation[]
2174e5c31af7Sopenharmony_cior the equivalent
2175e5c31af7Sopenharmony_ci
2176e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceGroupDeviceCreateInfoKHR.adoc[]
2177e5c31af7Sopenharmony_ciendif::VK_KHR_device_group_creation[]
2178e5c31af7Sopenharmony_ci
2179e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2180e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2181e5c31af7Sopenharmony_ci    structure.
2182e5c31af7Sopenharmony_ci  * pname:physicalDeviceCount is the number of elements in the
2183e5c31af7Sopenharmony_ci    pname:pPhysicalDevices array.
2184e5c31af7Sopenharmony_ci  * pname:pPhysicalDevices is a pointer to an array of physical device
2185e5c31af7Sopenharmony_ci    handles belonging to the same device group.
2186e5c31af7Sopenharmony_ci
2187e5c31af7Sopenharmony_ciThe elements of the pname:pPhysicalDevices array are an ordered list of the
2188e5c31af7Sopenharmony_ciphysical devices that the logical device represents.
2189e5c31af7Sopenharmony_ciThese must: be a subset of a single device group, and need not be in the
2190e5c31af7Sopenharmony_cisame order as they were enumerated.
2191e5c31af7Sopenharmony_ciThe order of the physical devices in the pname:pPhysicalDevices array
2192e5c31af7Sopenharmony_cidetermines the _device index_ of each physical device, with element [eq]#i#
2193e5c31af7Sopenharmony_cibeing assigned a device index of [eq]#i#.
2194e5c31af7Sopenharmony_ciCertain commands and structures refer to one or more physical devices by
2195e5c31af7Sopenharmony_ciusing device indices or _device masks_ formed using device indices.
2196e5c31af7Sopenharmony_ci
2197e5c31af7Sopenharmony_ciA logical device created without using sname:VkDeviceGroupDeviceCreateInfo,
2198e5c31af7Sopenharmony_cior with pname:physicalDeviceCount equal to zero, is equivalent to a
2199e5c31af7Sopenharmony_cipname:physicalDeviceCount of one and pname:pPhysicalDevices pointing to the
2200e5c31af7Sopenharmony_cipname:physicalDevice parameter to flink:vkCreateDevice.
2201e5c31af7Sopenharmony_ciIn particular, the device index of that physical device is zero.
2202e5c31af7Sopenharmony_ci
2203e5c31af7Sopenharmony_ci.Valid Usage
2204e5c31af7Sopenharmony_ci****
2205e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00375]]
2206e5c31af7Sopenharmony_ci    Each element of pname:pPhysicalDevices must: be unique
2207e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00376]]
2208e5c31af7Sopenharmony_ci    All elements of pname:pPhysicalDevices must: be in the same device group
2209e5c31af7Sopenharmony_ci    as enumerated by flink:vkEnumeratePhysicalDeviceGroups
2210e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceGroupDeviceCreateInfo-physicalDeviceCount-00377]]
2211e5c31af7Sopenharmony_ci    If pname:physicalDeviceCount is not `0`, the pname:physicalDevice
2212e5c31af7Sopenharmony_ci    parameter of flink:vkCreateDevice must: be an element of
2213e5c31af7Sopenharmony_ci    pname:pPhysicalDevices
2214e5c31af7Sopenharmony_ci****
2215e5c31af7Sopenharmony_ci
2216e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceGroupDeviceCreateInfo.adoc[]
2217e5c31af7Sopenharmony_ci--
2218e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
2219e5c31af7Sopenharmony_ci
2220e5c31af7Sopenharmony_ciifdef::VK_AMD_memory_overallocation_behavior[]
2221e5c31af7Sopenharmony_ci[open,refpage='VkDeviceMemoryOverallocationCreateInfoAMD',desc='Specify memory overallocation behavior for a Vulkan device',type='structs']
2222e5c31af7Sopenharmony_ci--
2223e5c31af7Sopenharmony_ciTo specify whether device memory allocation is allowed beyond the size
2224e5c31af7Sopenharmony_cireported by slink:VkPhysicalDeviceMemoryProperties, add a
2225e5c31af7Sopenharmony_cislink:VkDeviceMemoryOverallocationCreateInfoAMD structure to the pname:pNext
2226e5c31af7Sopenharmony_cichain of the slink:VkDeviceCreateInfo structure.
2227e5c31af7Sopenharmony_ciIf this structure is not specified, it is as if the
2228e5c31af7Sopenharmony_ciename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD value is used.
2229e5c31af7Sopenharmony_ci
2230e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceMemoryOverallocationCreateInfoAMD.adoc[]
2231e5c31af7Sopenharmony_ci
2232e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2233e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2234e5c31af7Sopenharmony_ci    structure.
2235e5c31af7Sopenharmony_ci  * pname:overallocationBehavior is the desired overallocation behavior.
2236e5c31af7Sopenharmony_ci
2237e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceMemoryOverallocationCreateInfoAMD.adoc[]
2238e5c31af7Sopenharmony_ci--
2239e5c31af7Sopenharmony_ci
2240e5c31af7Sopenharmony_ci[open,refpage='VkMemoryOverallocationBehaviorAMD',desc='Specify memory overallocation behavior',type='enums']
2241e5c31af7Sopenharmony_ci--
2242e5c31af7Sopenharmony_ciPossible values for
2243e5c31af7Sopenharmony_cislink:VkDeviceMemoryOverallocationCreateInfoAMD::pname:overallocationBehavior
2244e5c31af7Sopenharmony_ciinclude:
2245e5c31af7Sopenharmony_ci
2246e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkMemoryOverallocationBehaviorAMD.adoc[]
2247e5c31af7Sopenharmony_ci
2248e5c31af7Sopenharmony_ci  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD lets the
2249e5c31af7Sopenharmony_ci    implementation decide if overallocation is allowed.
2250e5c31af7Sopenharmony_ci  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD specifies
2251e5c31af7Sopenharmony_ci    overallocation is allowed if platform permits.
2252e5c31af7Sopenharmony_ci  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD specifies the
2253e5c31af7Sopenharmony_ci    application is not allowed to allocate device memory beyond the heap
2254e5c31af7Sopenharmony_ci    sizes reported by slink:VkPhysicalDeviceMemoryProperties.
2255e5c31af7Sopenharmony_ci    Allocations that are not explicitly made by the application within the
2256e5c31af7Sopenharmony_ci    scope of the Vulkan instance are not accounted for.
2257e5c31af7Sopenharmony_ci--
2258e5c31af7Sopenharmony_ciendif::VK_AMD_memory_overallocation_behavior[]
2259e5c31af7Sopenharmony_ci
2260e5c31af7Sopenharmony_ciifdef::VK_NV_device_diagnostics_config[]
2261e5c31af7Sopenharmony_ci[open,refpage='VkDeviceDiagnosticsConfigCreateInfoNV',desc='Specify diagnostics config for a Vulkan device',type='structs']
2262e5c31af7Sopenharmony_ci--
2263e5c31af7Sopenharmony_ciWhen using the Nsight^(TM)^ Aftermath SDK, to configure how device crash
2264e5c31af7Sopenharmony_cidumps are created, add a slink:VkDeviceDiagnosticsConfigCreateInfoNV
2265e5c31af7Sopenharmony_cistructure to the pname:pNext chain of the slink:VkDeviceCreateInfo
2266e5c31af7Sopenharmony_cistructure.
2267e5c31af7Sopenharmony_ci
2268e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceDiagnosticsConfigCreateInfoNV.adoc[]
2269e5c31af7Sopenharmony_ci
2270e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2271e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2272e5c31af7Sopenharmony_ci    structure.
2273e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkDeviceDiagnosticsConfigFlagBitsNV
2274e5c31af7Sopenharmony_ci    specifying additional parameters for configuring diagnostic tools.
2275e5c31af7Sopenharmony_ci
2276e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceDiagnosticsConfigCreateInfoNV.adoc[]
2277e5c31af7Sopenharmony_ci--
2278e5c31af7Sopenharmony_ci
2279e5c31af7Sopenharmony_ci[open,refpage='VkDeviceDiagnosticsConfigFlagBitsNV',desc='Bitmask specifying diagnostics flags',type='enums']
2280e5c31af7Sopenharmony_ci--
2281e5c31af7Sopenharmony_ciBits which can: be set in
2282e5c31af7Sopenharmony_cislink:VkDeviceDiagnosticsConfigCreateInfoNV::pname:flags include:
2283e5c31af7Sopenharmony_ci
2284e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkDeviceDiagnosticsConfigFlagBitsNV.adoc[]
2285e5c31af7Sopenharmony_ci
2286e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV
2287e5c31af7Sopenharmony_ci    enables the generation of debug information for shaders.
2288e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV
2289e5c31af7Sopenharmony_ci    enables driver side tracking of resources (images, buffers, etc.) used
2290e5c31af7Sopenharmony_ci    to augment the device fault information.
2291e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV
2292e5c31af7Sopenharmony_ci    enables automatic insertion of <<device-diagnostic-checkpoints,
2293e5c31af7Sopenharmony_ci    diagnostic checkpoints>> for draw calls, dispatches,
2294e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
2295e5c31af7Sopenharmony_ci    trace rays,
2296e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
2297e5c31af7Sopenharmony_ci    and copies.
2298e5c31af7Sopenharmony_ci    The CPU call stack at the time of the command will be associated as the
2299e5c31af7Sopenharmony_ci    marker data for the automatically inserted checkpoints.
2300e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV
2301e5c31af7Sopenharmony_ci    enables shader error reporting.
2302e5c31af7Sopenharmony_ci--
2303e5c31af7Sopenharmony_ci
2304e5c31af7Sopenharmony_ci[open,refpage='VkDeviceDiagnosticsConfigFlagsNV',desc='Bitmask of VkDeviceDiagnosticsConfigFlagBitsNV',type='flags']
2305e5c31af7Sopenharmony_ci--
2306e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkDeviceDiagnosticsConfigFlagsNV.adoc[]
2307e5c31af7Sopenharmony_ci
2308e5c31af7Sopenharmony_citname:VkDeviceDiagnosticsConfigFlagsNV is a bitmask type for setting a mask
2309e5c31af7Sopenharmony_ciof zero or more elink:VkDeviceDiagnosticsConfigFlagBitsNV.
2310e5c31af7Sopenharmony_ci--
2311e5c31af7Sopenharmony_ciendif::VK_NV_device_diagnostics_config[]
2312e5c31af7Sopenharmony_ci
2313e5c31af7Sopenharmony_ciifdef::VK_EXT_device_memory_report[]
2314e5c31af7Sopenharmony_ci[open,refpage='VkDeviceDeviceMemoryReportCreateInfoEXT',desc='Register device memory report callbacks for a Vulkan device',type='structs']
2315e5c31af7Sopenharmony_ci--
2316e5c31af7Sopenharmony_ciTo register callbacks for underlying device memory events of type
2317e5c31af7Sopenharmony_cielink:VkDeviceMemoryReportEventTypeEXT, add one or multiple
2318e5c31af7Sopenharmony_cislink:VkDeviceDeviceMemoryReportCreateInfoEXT structures to the pname:pNext
2319e5c31af7Sopenharmony_cichain of the slink:VkDeviceCreateInfo structure.
2320e5c31af7Sopenharmony_ci
2321e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceDeviceMemoryReportCreateInfoEXT.adoc[]
2322e5c31af7Sopenharmony_ci
2323e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2324e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2325e5c31af7Sopenharmony_ci    structure.
2326e5c31af7Sopenharmony_ci  * pname:flags is 0 and reserved for future use.
2327e5c31af7Sopenharmony_ci  * pname:pfnUserCallback is the application callback function to call.
2328e5c31af7Sopenharmony_ci  * pname:pUserData is user data to be passed to the callback.
2329e5c31af7Sopenharmony_ci
2330e5c31af7Sopenharmony_ciThe callback may: be called from multiple threads simultaneously.
2331e5c31af7Sopenharmony_ci
2332e5c31af7Sopenharmony_ciThe callback must: be called only once by the implementation when a
2333e5c31af7Sopenharmony_cielink:VkDeviceMemoryReportEventTypeEXT event occurs.
2334e5c31af7Sopenharmony_ci
2335e5c31af7Sopenharmony_ci[NOTE]
2336e5c31af7Sopenharmony_ci.Note
2337e5c31af7Sopenharmony_ci====
2338e5c31af7Sopenharmony_ciThe callback could be called from a background thread other than the thread
2339e5c31af7Sopenharmony_cicalling the Vulkan commands.
2340e5c31af7Sopenharmony_ci====
2341e5c31af7Sopenharmony_ci
2342e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceDeviceMemoryReportCreateInfoEXT.adoc[]
2343e5c31af7Sopenharmony_ci--
2344e5c31af7Sopenharmony_ci
2345e5c31af7Sopenharmony_ci[open,refpage='PFN_vkDeviceMemoryReportCallbackEXT',desc='Application-defined device memory report callback function',type='funcpointers']
2346e5c31af7Sopenharmony_ci--
2347e5c31af7Sopenharmony_ciThe prototype for the
2348e5c31af7Sopenharmony_cislink:VkDeviceDeviceMemoryReportCreateInfoEXT::pname:pfnUserCallback
2349e5c31af7Sopenharmony_cifunction implemented by the application is:
2350e5c31af7Sopenharmony_ci
2351e5c31af7Sopenharmony_ciinclude::{generated}/api/funcpointers/PFN_vkDeviceMemoryReportCallbackEXT.adoc[]
2352e5c31af7Sopenharmony_ci
2353e5c31af7Sopenharmony_ci  * pname:pCallbackData contains all the callback related data in the
2354e5c31af7Sopenharmony_ci    slink:VkDeviceMemoryReportCallbackDataEXT structure.
2355e5c31af7Sopenharmony_ci  * pname:pUserData is the user data provided when the
2356e5c31af7Sopenharmony_ci    slink:VkDeviceDeviceMemoryReportCreateInfoEXT was created.
2357e5c31af7Sopenharmony_ci
2358e5c31af7Sopenharmony_ciThe callback must: not make calls to any Vulkan commands.
2359e5c31af7Sopenharmony_ci--
2360e5c31af7Sopenharmony_ci
2361e5c31af7Sopenharmony_ci[open,refpage='VkDeviceMemoryReportCallbackDataEXT',desc='Structure specifying parameters returned to the callback',type='structs']
2362e5c31af7Sopenharmony_ci--
2363e5c31af7Sopenharmony_ciThe definition of sname:VkDeviceMemoryReportCallbackDataEXT is:
2364e5c31af7Sopenharmony_ci
2365e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceMemoryReportCallbackDataEXT.adoc[]
2366e5c31af7Sopenharmony_ci
2367e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2368e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2369e5c31af7Sopenharmony_ci    structure.
2370e5c31af7Sopenharmony_ci  * pname:flags is 0 and reserved for future use.
2371e5c31af7Sopenharmony_ci  * pname:type is a elink:VkDeviceMemoryReportEventTypeEXT type specifying
2372e5c31af7Sopenharmony_ci    the type of event reported in this
2373e5c31af7Sopenharmony_ci    sname:VkDeviceMemoryReportCallbackDataEXT structure.
2374e5c31af7Sopenharmony_ci  * pname:memoryObjectId is the unique id for the underlying memory object
2375e5c31af7Sopenharmony_ci    as described below.
2376e5c31af7Sopenharmony_ci  * pname:size is the size of the memory object in bytes.
2377e5c31af7Sopenharmony_ci    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
2378e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT or
2379e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
2380e5c31af7Sopenharmony_ci    pname:size is a valid basetype:VkDeviceSize value.
2381e5c31af7Sopenharmony_ci    Otherwise, pname:size is undefined:.
2382e5c31af7Sopenharmony_ci  * pname:objectType is a elink:VkObjectType value specifying the type of
2383e5c31af7Sopenharmony_ci    the object associated with this device memory report event.
2384e5c31af7Sopenharmony_ci    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
2385e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT,
2386e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT,
2387e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT or
2388e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
2389e5c31af7Sopenharmony_ci    pname:objectType is a valid elink:VkObjectType enum.
2390e5c31af7Sopenharmony_ci    Otherwise, pname:objectType is undefined:.
2391e5c31af7Sopenharmony_ci  * pname:objectHandle is the object this device memory report event is
2392e5c31af7Sopenharmony_ci    attributed to.
2393e5c31af7Sopenharmony_ci    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
2394e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT,
2395e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT or
2396e5c31af7Sopenharmony_ci    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT,
2397e5c31af7Sopenharmony_ci    pname:objectHandle is a valid Vulkan handle of the type associated with
2398e5c31af7Sopenharmony_ci    pname:objectType as defined in the <<debugging-object-types,
2399e5c31af7Sopenharmony_ci    `VkObjectType` and Vulkan Handle Relationship>> table.
2400e5c31af7Sopenharmony_ci    Otherwise, pname:objectHandle is undefined:.
2401e5c31af7Sopenharmony_ci  * pname:heapIndex describes which memory heap this device memory
2402e5c31af7Sopenharmony_ci    allocation is made from.
2403e5c31af7Sopenharmony_ci    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT
2404e5c31af7Sopenharmony_ci    or ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
2405e5c31af7Sopenharmony_ci    pname:heapIndex corresponds to one of the valid heaps from the
2406e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceMemoryProperties structure.
2407e5c31af7Sopenharmony_ci    Otherwise, pname:heapIndex is undefined:.
2408e5c31af7Sopenharmony_ci
2409e5c31af7Sopenharmony_cipname:memoryObjectId is used to avoid double-counting on the same memory
2410e5c31af7Sopenharmony_ciobject.
2411e5c31af7Sopenharmony_ci
2412e5c31af7Sopenharmony_ciIf an internally-allocated device memory object or a slink:VkDeviceMemory
2413e5c31af7Sopenharmony_cicannot: be exported, pname:memoryObjectId must: be unique in the
2414e5c31af7Sopenharmony_cislink:VkDevice.
2415e5c31af7Sopenharmony_ci
2416e5c31af7Sopenharmony_ciIf an internally-allocated device memory object or a slink:VkDeviceMemory
2417e5c31af7Sopenharmony_cisupports being exported, pname:memoryObjectId must: be unique system wide.
2418e5c31af7Sopenharmony_ci
2419e5c31af7Sopenharmony_ciIf an internal device memory object or a slink:VkDeviceMemory is backed by
2420e5c31af7Sopenharmony_cian imported external memory object, pname:memoryObjectId must: be unique
2421e5c31af7Sopenharmony_cisystem wide.
2422e5c31af7Sopenharmony_ci
2423e5c31af7Sopenharmony_ciifdef::implementation-guide[]
2424e5c31af7Sopenharmony_ci.Implementor's Note
2425e5c31af7Sopenharmony_ci****
2426e5c31af7Sopenharmony_ciIf the heap backing an internally-allocated device memory cannot: be used to
2427e5c31af7Sopenharmony_ciback slink:VkDeviceMemory, implementations can: advertise that heap with no
2428e5c31af7Sopenharmony_citypes.
2429e5c31af7Sopenharmony_ci****
2430e5c31af7Sopenharmony_ciendif::implementation-guide[]
2431e5c31af7Sopenharmony_ci
2432e5c31af7Sopenharmony_ci[NOTE]
2433e5c31af7Sopenharmony_ci.Note
2434e5c31af7Sopenharmony_ci====
2435e5c31af7Sopenharmony_ciThis structure should only be considered valid during the lifetime of the
2436e5c31af7Sopenharmony_citriggered callback.
2437e5c31af7Sopenharmony_ci
2438e5c31af7Sopenharmony_ciFor ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT and
2439e5c31af7Sopenharmony_ciename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT events,
2440e5c31af7Sopenharmony_cipname:objectHandle usually will not yet exist when the application or tool
2441e5c31af7Sopenharmony_cireceives the callback.
2442e5c31af7Sopenharmony_cipname:objectHandle will only exist when the create or allocate call that
2443e5c31af7Sopenharmony_citriggered the event returns, and if the allocation or import ends up failing
2444e5c31af7Sopenharmony_cipname:objectHandle will not ever exist.
2445e5c31af7Sopenharmony_ci====
2446e5c31af7Sopenharmony_ci
2447e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceMemoryReportCallbackDataEXT.adoc[]
2448e5c31af7Sopenharmony_ci--
2449e5c31af7Sopenharmony_ci
2450e5c31af7Sopenharmony_ci[open,refpage='VkDeviceMemoryReportFlagsEXT',desc='Reserved for future use',type='flags']
2451e5c31af7Sopenharmony_ci--
2452e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkDeviceMemoryReportFlagsEXT.adoc[]
2453e5c31af7Sopenharmony_ci
2454e5c31af7Sopenharmony_citname:VkDeviceMemoryReportFlagsEXT is a bitmask type for setting a mask, but
2455e5c31af7Sopenharmony_ciis currently reserved for future use.
2456e5c31af7Sopenharmony_ci--
2457e5c31af7Sopenharmony_ci
2458e5c31af7Sopenharmony_ci[open,refpage='VkDeviceMemoryReportEventTypeEXT',desc='Events that can occur on a device memory object',type='enums']
2459e5c31af7Sopenharmony_ci--
2460e5c31af7Sopenharmony_ciPossible values of slink:VkDeviceMemoryReportCallbackDataEXT::pname:type,
2461e5c31af7Sopenharmony_cispecifying event types which cause the device driver to call the callback,
2462e5c31af7Sopenharmony_ciare:
2463e5c31af7Sopenharmony_ci
2464e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkDeviceMemoryReportEventTypeEXT.adoc[]
2465e5c31af7Sopenharmony_ci
2466e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT specifies this
2467e5c31af7Sopenharmony_ci    event corresponds to the allocation of an internal device memory object
2468e5c31af7Sopenharmony_ci    or a slink:VkDeviceMemory.
2469e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT specifies this event
2470e5c31af7Sopenharmony_ci    corresponds to the deallocation of an internally-allocated device memory
2471e5c31af7Sopenharmony_ci    object or a slink:VkDeviceMemory.
2472e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT specifies this event
2473e5c31af7Sopenharmony_ci    corresponds to the import of an external memory object.
2474e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT specifies this
2475e5c31af7Sopenharmony_ci    event is the release of an imported external memory object.
2476e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT specifies
2477e5c31af7Sopenharmony_ci    this event corresponds to the failed allocation of an internal device
2478e5c31af7Sopenharmony_ci    memory object or a slink:VkDeviceMemory.
2479e5c31af7Sopenharmony_ci--
2480e5c31af7Sopenharmony_ciendif::VK_EXT_device_memory_report[]
2481e5c31af7Sopenharmony_ci
2482e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_private_data[]
2483e5c31af7Sopenharmony_ci[open,refpage='VkDevicePrivateDataCreateInfo',desc='Reserve private data slots',type='structs',alias='VkDevicePrivateDataCreateInfoEXT']
2484e5c31af7Sopenharmony_ci--
2485e5c31af7Sopenharmony_ciTo reserve private data storage slots, add a
2486e5c31af7Sopenharmony_cislink:VkDevicePrivateDataCreateInfo structure to the pname:pNext chain of
2487e5c31af7Sopenharmony_cithe slink:VkDeviceCreateInfo structure.
2488e5c31af7Sopenharmony_ciReserving slots in this manner is not strictly necessary, but doing so may:
2489e5c31af7Sopenharmony_ciimprove performance.
2490e5c31af7Sopenharmony_ci
2491e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDevicePrivateDataCreateInfo.adoc[]
2492e5c31af7Sopenharmony_ci
2493e5c31af7Sopenharmony_ciifdef::VK_EXT_private_data[]
2494e5c31af7Sopenharmony_cior the equivalent
2495e5c31af7Sopenharmony_ci
2496e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDevicePrivateDataCreateInfoEXT.adoc[]
2497e5c31af7Sopenharmony_ciendif::VK_EXT_private_data[]
2498e5c31af7Sopenharmony_ci
2499e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2500e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2501e5c31af7Sopenharmony_ci    structure.
2502e5c31af7Sopenharmony_ci  * pname:privateDataSlotRequestCount is the amount of slots to reserve.
2503e5c31af7Sopenharmony_ci
2504e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDevicePrivateDataCreateInfo.adoc[]
2505e5c31af7Sopenharmony_ci--
2506e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_private_data[]
2507e5c31af7Sopenharmony_ci
2508e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
2509e5c31af7Sopenharmony_ci
2510e5c31af7Sopenharmony_ci[open,refpage='VkDeviceObjectReservationCreateInfo',desc='Request memory reservation',type='structs']
2511e5c31af7Sopenharmony_ci--
2512e5c31af7Sopenharmony_ciData structures for objects are reserved by the implementation at device
2513e5c31af7Sopenharmony_cicreation time.
2514e5c31af7Sopenharmony_ciThe application must: provide upper bounds on numbers of objects and other
2515e5c31af7Sopenharmony_cilimits at device creation time.
2516e5c31af7Sopenharmony_ciTo reserve data structures for use by objects created from this device, add
2517e5c31af7Sopenharmony_cia slink:VkDeviceObjectReservationCreateInfo structure to the pname:pNext
2518e5c31af7Sopenharmony_cichain of the slink:VkDeviceCreateInfo structure.
2519e5c31af7Sopenharmony_ci
2520e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceObjectReservationCreateInfo.adoc[]
2521e5c31af7Sopenharmony_ci
2522e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2523e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2524e5c31af7Sopenharmony_ci    structure.
2525e5c31af7Sopenharmony_ci  * pname:pipelineCacheCreateInfoCount is the length of the
2526e5c31af7Sopenharmony_ci    pname:pPipelineCacheCreateInfos array.
2527e5c31af7Sopenharmony_ci  * pname:pPipelineCacheCreateInfos is a pointer to an array of
2528e5c31af7Sopenharmony_ci    slink:VkPipelineCacheCreateInfo structures that contain the creation
2529e5c31af7Sopenharmony_ci    information of the pipeline caches that can: be created on this device.
2530e5c31af7Sopenharmony_ci  * pname:pipelinePoolSizeCount is the length of the
2531e5c31af7Sopenharmony_ci    pname:pPipelinePoolSizes array.
2532e5c31af7Sopenharmony_ci  * pname:pPipelinePoolSizes is a pointer to an array of
2533e5c31af7Sopenharmony_ci    slink:VkPipelinePoolSize structures requesting memory be reserved for
2534e5c31af7Sopenharmony_ci    pipelines of the specified sizes.
2535e5c31af7Sopenharmony_ci  * pname:semaphoreRequestCount is the requested maximum number of
2536e5c31af7Sopenharmony_ci    sname:VkSemaphore objects that can: exist at the same time.
2537e5c31af7Sopenharmony_ci  * pname:commandBufferRequestCount is the requested maximum number of
2538e5c31af7Sopenharmony_ci    sname:VkCommandBuffer objects that can: be reserved by all
2539e5c31af7Sopenharmony_ci    sname:VkCommandPool objects.
2540e5c31af7Sopenharmony_ci  * pname:fenceRequestCount is the requested maximum number of sname:VkFence
2541e5c31af7Sopenharmony_ci    objects that can: exist at the same time.
2542e5c31af7Sopenharmony_ci  * pname:deviceMemoryRequestCount is the requested maximum number of
2543e5c31af7Sopenharmony_ci    sname:VkDeviceMemory objects that can: exist at the same time.
2544e5c31af7Sopenharmony_ci  * pname:bufferRequestCount is the requested maximum number of
2545e5c31af7Sopenharmony_ci    sname:VkBuffer objects that can: exist at the same time.
2546e5c31af7Sopenharmony_ci  * pname:imageRequestCount is the requested maximum number of sname:VkImage
2547e5c31af7Sopenharmony_ci    objects that can: exist at the same time.
2548e5c31af7Sopenharmony_ci  * pname:eventRequestCount is the requested maximum number of sname:VkEvent
2549e5c31af7Sopenharmony_ci    objects that can: exist at the same time.
2550e5c31af7Sopenharmony_ci  * pname:queryPoolRequestCount is the requested maximum number of
2551e5c31af7Sopenharmony_ci    sname:VkQueryPool objects that can: exist at the same time.
2552e5c31af7Sopenharmony_ci  * pname:bufferViewRequestCount is the requested maximum number of
2553e5c31af7Sopenharmony_ci    sname:VkBufferView objects that can: exist at the same time.
2554e5c31af7Sopenharmony_ci  * pname:imageViewRequestCount is the requested maximum number of
2555e5c31af7Sopenharmony_ci    sname:VkImageView objects that can: exist at the same time.
2556e5c31af7Sopenharmony_ci  * pname:layeredImageViewRequestCount is the requested maximum number
2557e5c31af7Sopenharmony_ci    sname:VkImageView objects created with
2558e5c31af7Sopenharmony_ci    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount greater
2559e5c31af7Sopenharmony_ci    than `1` that can: exist at the same time.
2560e5c31af7Sopenharmony_ci  * pname:pipelineCacheRequestCount is the requested maximum number of
2561e5c31af7Sopenharmony_ci    sname:VkPipelineCache objects that can: exist at the same time.
2562e5c31af7Sopenharmony_ci  * pname:pipelineLayoutRequestCount is the requested maximum number of
2563e5c31af7Sopenharmony_ci    sname:VkPipelineLayout objects that can: exist at the same time.
2564e5c31af7Sopenharmony_ci  * pname:renderPassRequestCount is the requested maximum number of
2565e5c31af7Sopenharmony_ci    sname:VkRenderPass objects that can: exist at the same time.
2566e5c31af7Sopenharmony_ci  * pname:graphicsPipelineRequestCount is the requested maximum number of
2567e5c31af7Sopenharmony_ci    graphics sname:VkPipeline objects that can: exist at the same time.
2568e5c31af7Sopenharmony_ci  * pname:computePipelineRequestCount is the requested maximum number of
2569e5c31af7Sopenharmony_ci    compute sname:VkPipeline objects that can: exist at the same time.
2570e5c31af7Sopenharmony_ci  * pname:descriptorSetLayoutRequestCount is the requested maximum number of
2571e5c31af7Sopenharmony_ci    sname:VkDescriptorSetLayout objects that can: exist at the same time.
2572e5c31af7Sopenharmony_ci  * pname:samplerRequestCount is the requested maximum number of
2573e5c31af7Sopenharmony_ci    sname:VkSampler objects that can: exist at the same time.
2574e5c31af7Sopenharmony_ci  * pname:descriptorPoolRequestCount is the requested maximum number of
2575e5c31af7Sopenharmony_ci    sname:VkDescriptorPool objects that can: exist at the same time.
2576e5c31af7Sopenharmony_ci  * pname:descriptorSetRequestCount is the requested maximum number of
2577e5c31af7Sopenharmony_ci    sname:VkDescriptorSet objects that can: exist at the same time.
2578e5c31af7Sopenharmony_ci  * pname:framebufferRequestCount is the requested maximum number of
2579e5c31af7Sopenharmony_ci    sname:VkFramebuffer objects that can: exist at the same time.
2580e5c31af7Sopenharmony_ci  * pname:commandPoolRequestCount is the requested maximum number of
2581e5c31af7Sopenharmony_ci    sname:VkCommandPool objects that can: exist at the same time.
2582e5c31af7Sopenharmony_ci  * pname:samplerYcbcrConversionRequestCount is the requested maximum number
2583e5c31af7Sopenharmony_ci    of sname:VkSamplerYcbcrConversion objects that can: exist at the same
2584e5c31af7Sopenharmony_ci    time.
2585e5c31af7Sopenharmony_ci  * pname:surfaceRequestCount is deprecated and implementations must: ignore
2586e5c31af7Sopenharmony_ci    it.
2587e5c31af7Sopenharmony_ci  * pname:swapchainRequestCount is the requested maximum number of
2588e5c31af7Sopenharmony_ci    sname:VkSwapchainKHR objects that can: exist at the same time.
2589e5c31af7Sopenharmony_ci  * pname:displayModeRequestCount is deprecated and implementations must:
2590e5c31af7Sopenharmony_ci    ignore it.
2591e5c31af7Sopenharmony_ci  * pname:subpassDescriptionRequestCount is the requested maximum sum of all
2592e5c31af7Sopenharmony_ci    slink:VkRenderPassCreateInfo2::pname:subpassCount values across all
2593e5c31af7Sopenharmony_ci    sname:VkRenderPass objects that can: exist at the same time.
2594e5c31af7Sopenharmony_ci  * pname:attachmentDescriptionRequestCount is the requested maximum sum of
2595e5c31af7Sopenharmony_ci    all slink:VkRenderPassCreateInfo2::pname:attachmentCount values across
2596e5c31af7Sopenharmony_ci    all sname:VkRenderPass objects that can: exist at the same time.
2597e5c31af7Sopenharmony_ci  * pname:descriptorSetLayoutBindingRequestCount is the requested maximum
2598e5c31af7Sopenharmony_ci    sum of all slink:VkDescriptorSetLayoutCreateInfo::pname:bindingCount
2599e5c31af7Sopenharmony_ci    values across all sname:VkDescriptorSetLayout objects that can: exist at
2600e5c31af7Sopenharmony_ci    the same time.
2601e5c31af7Sopenharmony_ci  * pname:descriptorSetLayoutBindingLimit is one greater than the maximum
2602e5c31af7Sopenharmony_ci    value of slink:VkDescriptorSetLayoutBinding::pname:binding that can: be
2603e5c31af7Sopenharmony_ci    used.
2604e5c31af7Sopenharmony_ci  * pname:maxImageViewMipLevels is the maximum value of
2605e5c31af7Sopenharmony_ci    slink:VkImageViewCreateInfo::pname:subresourceRange.levelCount that can:
2606e5c31af7Sopenharmony_ci    be used.
2607e5c31af7Sopenharmony_ci  * pname:maxImageViewArrayLayers is the maximum value of
2608e5c31af7Sopenharmony_ci    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount that can:
2609e5c31af7Sopenharmony_ci    be used.
2610e5c31af7Sopenharmony_ci  * pname:maxLayeredImageViewMipLevels is the maximum value of
2611e5c31af7Sopenharmony_ci    slink:VkImageViewCreateInfo::pname:subresourceRange.levelCount that can:
2612e5c31af7Sopenharmony_ci    be used when
2613e5c31af7Sopenharmony_ci    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount is
2614e5c31af7Sopenharmony_ci    greater than `1`.
2615e5c31af7Sopenharmony_ci  * pname:maxOcclusionQueriesPerPool is the requested maximum number of
2616e5c31af7Sopenharmony_ci    ename:VK_QUERY_TYPE_OCCLUSION queries that can: exist at the same time
2617e5c31af7Sopenharmony_ci    in a single query pool.
2618e5c31af7Sopenharmony_ci  * pname:maxPipelineStatisticsQueriesPerPool is the requested maximum
2619e5c31af7Sopenharmony_ci    number of ename:VK_QUERY_TYPE_PIPELINE_STATISTICS queries that can:
2620e5c31af7Sopenharmony_ci    exist at the same time in a single query pool.
2621e5c31af7Sopenharmony_ci  * pname:maxTimestampQueriesPerPool is the requested maximum number of
2622e5c31af7Sopenharmony_ci    ename:VK_QUERY_TYPE_TIMESTAMP queries that can: exist at the same time
2623e5c31af7Sopenharmony_ci    in a single query pool.
2624e5c31af7Sopenharmony_ci  * pname:maxImmutableSamplersPerDescriptorSetLayout is the requested
2625e5c31af7Sopenharmony_ci    maximum number of immutable samplers that can be used across all
2626e5c31af7Sopenharmony_ci    bindings in a descriptor set layout.
2627e5c31af7Sopenharmony_ci
2628e5c31af7Sopenharmony_ciMultiple sname:VkDeviceObjectReservationCreateInfo structures can: be
2629e5c31af7Sopenharmony_cichained together.
2630e5c31af7Sopenharmony_ciThe maximum value from all instances of pname:maxImageViewMipLevels,
2631e5c31af7Sopenharmony_cipname:maxImageViewArrayLayers, pname:maxLayeredImageViewMipLevels,
2632e5c31af7Sopenharmony_cipname:descriptorSetLayoutBindingLimit, pname:maxOcclusionQueriesPerPool,
2633e5c31af7Sopenharmony_cipname:maxPipelineStatisticsQueriesPerPool, pname:maxTimestampQueriesPerPool,
2634e5c31af7Sopenharmony_ciand pname:maxImmutableSamplersPerDescriptorSetLayout will be reserved.
2635e5c31af7Sopenharmony_ciFor the remaining members, the sum of the requested resources from all
2636e5c31af7Sopenharmony_ciinstances of sname:VkDeviceObjectReservationCreateInfo will be reserved.
2637e5c31af7Sopenharmony_ci
2638e5c31af7Sopenharmony_ciIf
2639e5c31af7Sopenharmony_cislink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,
2640e5c31af7Sopenharmony_cipname:deviceDestroyFreesMemory>> is ename:VK_TRUE, the reserved memory is
2641e5c31af7Sopenharmony_cireturned to the system when the device is destroyed, otherwise it may: not
2642e5c31af7Sopenharmony_cibe returned to the system until the process is terminated.
2643e5c31af7Sopenharmony_ci
2644e5c31af7Sopenharmony_ciifdef::hidden[]
2645e5c31af7Sopenharmony_ci// tag::scaddition[]
2646e5c31af7Sopenharmony_ci  * slink:VkDeviceObjectReservationCreateInfo <<SCID-4>>
2647e5c31af7Sopenharmony_ci// end::scaddition[]
2648e5c31af7Sopenharmony_ciendif::hidden[]
2649e5c31af7Sopenharmony_ci
2650e5c31af7Sopenharmony_ci.Valid Usage
2651e5c31af7Sopenharmony_ci****
2652e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceObjectReservationCreateInfo-maxImageViewArrayLayers-05014]]
2653e5c31af7Sopenharmony_ci    pname:maxImageViewArrayLayers must: be less than or equal to
2654e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers
2655e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceObjectReservationCreateInfo-maxImageViewMipLevels-05015]]
2656e5c31af7Sopenharmony_ci    pname:maxImageViewMipLevels must: be less than or equal to the number of
2657e5c31af7Sopenharmony_ci    levels in the complete mipmap chain based on the maximum of
2658e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceLimits::pname:maxImageDimension1D,
2659e5c31af7Sopenharmony_ci    pname:maxImageDimension2D, pname:maxImageDimension3D, and
2660e5c31af7Sopenharmony_ci    pname:maxImageDimensionCube
2661e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceObjectReservationCreateInfo-maxLayeredImageViewMipLevels-05016]]
2662e5c31af7Sopenharmony_ci    pname:maxLayeredImageViewMipLevels must: be less than or equal to the
2663e5c31af7Sopenharmony_ci    number of levels in the complete mipmap chain based on
2664e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceLimits::pname:maxImageDimension1D,
2665e5c31af7Sopenharmony_ci    pname:maxImageDimension2D, pname:maxImageDimension3D, and
2666e5c31af7Sopenharmony_ci    pname:maxImageDimensionCube
2667e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceObjectReservationCreateInfo-subpassDescriptionRequestCount-05017]]
2668e5c31af7Sopenharmony_ci    pname:subpassDescriptionRequestCount must: be less than or equal to
2669e5c31af7Sopenharmony_ci    pname:renderPassRequestCount multiplied by
2670e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkanSC10Properties::pname:maxRenderPassSubpasses
2671e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceObjectReservationCreateInfo-attachmentDescriptionRequestCount-05018]]
2672e5c31af7Sopenharmony_ci    pname:attachmentDescriptionRequestCount must: be less than or equal to
2673e5c31af7Sopenharmony_ci    pname:renderPassRequestCount multiplied by
2674e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkanSC10Properties::pname:maxFramebufferAttachments
2675e5c31af7Sopenharmony_ci****
2676e5c31af7Sopenharmony_ci
2677e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceObjectReservationCreateInfo.adoc[]
2678e5c31af7Sopenharmony_ci--
2679e5c31af7Sopenharmony_ci
2680e5c31af7Sopenharmony_ciifdef::VK_KHR_performance_query[]
2681e5c31af7Sopenharmony_ci[open,refpage='VkPerformanceQueryReservationInfoKHR',desc='Request memory reservation',type='structs']
2682e5c31af7Sopenharmony_ci--
2683e5c31af7Sopenharmony_ciIf the pname:pNext chain of slink:VkDeviceObjectReservationCreateInfo
2684e5c31af7Sopenharmony_ciincludes a slink:VkPerformanceQueryReservationInfoKHR structure, then the
2685e5c31af7Sopenharmony_cistructure indicates upper bounds on the number of performance queries that
2686e5c31af7Sopenharmony_cican: exist at the same time in a query pool.
2687e5c31af7Sopenharmony_ci
2688e5c31af7Sopenharmony_ciThe sname:VkPerformanceQueryReservationInfoKHR structure is defined as:
2689e5c31af7Sopenharmony_ci
2690e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPerformanceQueryReservationInfoKHR.adoc[]
2691e5c31af7Sopenharmony_ci
2692e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2693e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2694e5c31af7Sopenharmony_ci    structure.
2695e5c31af7Sopenharmony_ci  * pname:maxPerformanceQueriesPerPool is the requested maximum number of
2696e5c31af7Sopenharmony_ci    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR queries that can: exist at the
2697e5c31af7Sopenharmony_ci    same time in a single query pool.
2698e5c31af7Sopenharmony_ci
2699e5c31af7Sopenharmony_ciIf the sname:VkDeviceObjectReservationCreateInfo::pname:pNext chain does not
2700e5c31af7Sopenharmony_ciinclude this structure, then pname:maxPerformanceQueriesPerPool defaults to
2701e5c31af7Sopenharmony_ci`0`.
2702e5c31af7Sopenharmony_ci
2703e5c31af7Sopenharmony_ciMultiple sname:VkPerformanceQueryReservationInfoKHR structures can be
2704e5c31af7Sopenharmony_cichained together.
2705e5c31af7Sopenharmony_ciThe maximum value from all instances of pname:maxPerformanceQueriesPerPool
2706e5c31af7Sopenharmony_ciwill be reserved.
2707e5c31af7Sopenharmony_ci
2708e5c31af7Sopenharmony_ciifdef::hidden[]
2709e5c31af7Sopenharmony_ci// tag::scaddition[]
2710e5c31af7Sopenharmony_ciifdef::VK_KHR_performance_query[]
2711e5c31af7Sopenharmony_ci  * slink:VkPerformanceQueryReservationInfoKHR <<SCID-4>>
2712e5c31af7Sopenharmony_ciendif::VK_KHR_performance_query[]
2713e5c31af7Sopenharmony_ci// end::scaddition[]
2714e5c31af7Sopenharmony_ciendif::hidden[]
2715e5c31af7Sopenharmony_ci
2716e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPerformanceQueryReservationInfoKHR.adoc[]
2717e5c31af7Sopenharmony_ci--
2718e5c31af7Sopenharmony_ciendif::VK_KHR_performance_query[]
2719e5c31af7Sopenharmony_ci
2720e5c31af7Sopenharmony_ciifdef::VK_NV_external_sci_sync2[]
2721e5c31af7Sopenharmony_ci[open,refpage='VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV',desc='Request memory reservation',type='structs']
2722e5c31af7Sopenharmony_ci--
2723e5c31af7Sopenharmony_ciIf the pname:pNext chain of slink:VkDeviceObjectReservationCreateInfo
2724e5c31af7Sopenharmony_ciincludes a slink:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV
2725e5c31af7Sopenharmony_cistructure, then the structure indicates the maximum number of
2726e5c31af7Sopenharmony_cislink:VkSemaphoreSciSyncPoolNV objects that can: exist at the same time.
2727e5c31af7Sopenharmony_ci
2728e5c31af7Sopenharmony_ciThe sname:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV structure is
2729e5c31af7Sopenharmony_cidefined as:
2730e5c31af7Sopenharmony_ci
2731e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV.adoc[]
2732e5c31af7Sopenharmony_ci
2733e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2734e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2735e5c31af7Sopenharmony_ci    structure.
2736e5c31af7Sopenharmony_ci  * pname:semaphoreSciSyncPoolRequestCount is the requested maximum number
2737e5c31af7Sopenharmony_ci    of slink:VkSemaphoreSciSyncPoolNV objects that can: exist at the same
2738e5c31af7Sopenharmony_ci    time.
2739e5c31af7Sopenharmony_ci
2740e5c31af7Sopenharmony_ciIf the sname:VkDeviceObjectReservationCreateInfo::pname:pNext chain does not
2741e5c31af7Sopenharmony_ciinclude this structure, then pname:semaphoreSciSyncPoolRequestCount defaults
2742e5c31af7Sopenharmony_cito `0`.
2743e5c31af7Sopenharmony_ci
2744e5c31af7Sopenharmony_ciMultiple sname:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV
2745e5c31af7Sopenharmony_cistructures can: be chained together.
2746e5c31af7Sopenharmony_ciThe sum of the pname:semaphoreSciSyncPoolRequestCount values from all
2747e5c31af7Sopenharmony_ciinstances of sname:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV will
2748e5c31af7Sopenharmony_cibe reserved.
2749e5c31af7Sopenharmony_ci
2750e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV.adoc[]
2751e5c31af7Sopenharmony_ci--
2752e5c31af7Sopenharmony_ciendif::VK_NV_external_sci_sync2[]
2753e5c31af7Sopenharmony_ci
2754e5c31af7Sopenharmony_ci[open,refpage='VkPipelinePoolSize',desc='Request memory for pipelines',type='structs']
2755e5c31af7Sopenharmony_ci--
2756e5c31af7Sopenharmony_ciMemory for pipelines is reserved by the implementation at device creation
2757e5c31af7Sopenharmony_citime.
2758e5c31af7Sopenharmony_ciThe application specifies sizes to be reserved and a count for each size,
2759e5c31af7Sopenharmony_ciand when a pipeline is created the application specifies which size to use.
2760e5c31af7Sopenharmony_ci
2761e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelinePoolSize.adoc[]
2762e5c31af7Sopenharmony_ci
2763e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
2764e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
2765e5c31af7Sopenharmony_ci    structure.
2766e5c31af7Sopenharmony_ci  * pname:poolEntrySize is the size to reserve for each entry.
2767e5c31af7Sopenharmony_ci  * pname:poolEntryCount is the number of entries to reserve.
2768e5c31af7Sopenharmony_ci
2769e5c31af7Sopenharmony_ciifdef::hidden[]
2770e5c31af7Sopenharmony_ci// tag::scaddition[]
2771e5c31af7Sopenharmony_ci  * slink:VkPipelinePoolSize <<SCID-4>>
2772e5c31af7Sopenharmony_ci// end::scaddition[]
2773e5c31af7Sopenharmony_ciendif::hidden[]
2774e5c31af7Sopenharmony_ci
2775e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelinePoolSize.adoc[]
2776e5c31af7Sopenharmony_ci--
2777e5c31af7Sopenharmony_ci
2778e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
2779e5c31af7Sopenharmony_ci
2780e5c31af7Sopenharmony_ciifdef::VK_ARM_scheduling_controls[]
2781e5c31af7Sopenharmony_ciThe number of shader cores used by all the queues of a device can: be
2782e5c31af7Sopenharmony_cicontrolled by adding a sname:VkDeviceQueueShaderCoreControlCreateInfoARM
2783e5c31af7Sopenharmony_cistructure to the pname:pNext chain of the slink:VkDeviceCreateInfo
2784e5c31af7Sopenharmony_cistructure.
2785e5c31af7Sopenharmony_ciendif::VK_ARM_scheduling_controls[]
2786e5c31af7Sopenharmony_ci
2787e5c31af7Sopenharmony_ci[[devsandqueues-use]]
2788e5c31af7Sopenharmony_ci=== Device Use
2789e5c31af7Sopenharmony_ci
2790e5c31af7Sopenharmony_ciThe following is a high-level list of sname:VkDevice uses along with
2791e5c31af7Sopenharmony_cireferences on where to find more information:
2792e5c31af7Sopenharmony_ci
2793e5c31af7Sopenharmony_ci  * Creation of queues.
2794e5c31af7Sopenharmony_ci    See the <<devsandqueues-queues,Queues>> section below for further
2795e5c31af7Sopenharmony_ci    details.
2796e5c31af7Sopenharmony_ci  * Creation and tracking of various synchronization constructs.
2797e5c31af7Sopenharmony_ci    See <<synchronization,Synchronization and Cache Control>> for further
2798e5c31af7Sopenharmony_ci    details.
2799e5c31af7Sopenharmony_ci  * Allocating, freeing, and managing memory.
2800e5c31af7Sopenharmony_ci    See <<memory,Memory Allocation>> and <<resources,Resource Creation>> for
2801e5c31af7Sopenharmony_ci    further details.
2802e5c31af7Sopenharmony_ci  * Creation and destruction of command buffers and command buffer pools.
2803e5c31af7Sopenharmony_ci    See <<commandbuffers,Command Buffers>> for further details.
2804e5c31af7Sopenharmony_ci  * Creation, destruction, and management of graphics state.
2805e5c31af7Sopenharmony_ci    See <<pipelines,Pipelines>> and <<descriptorsets,Resource Descriptors>>,
2806e5c31af7Sopenharmony_ci    among others, for further details.
2807e5c31af7Sopenharmony_ci
2808e5c31af7Sopenharmony_ci
2809e5c31af7Sopenharmony_ci[[devsandqueues-lost-device]]
2810e5c31af7Sopenharmony_ci=== Lost Device
2811e5c31af7Sopenharmony_ci
2812e5c31af7Sopenharmony_ciA logical device may: become _lost_ for a number of implementation-specific
2813e5c31af7Sopenharmony_cireasons, indicating that pending and future command execution may: fail and
2814e5c31af7Sopenharmony_cicause resources and backing memory to become undefined:.
2815e5c31af7Sopenharmony_ci
2816e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
2817e5c31af7Sopenharmony_ci[NOTE]
2818e5c31af7Sopenharmony_ci.Note
2819e5c31af7Sopenharmony_ci====
2820e5c31af7Sopenharmony_ci<<fault-handling>> can be used by the implementation to provide more
2821e5c31af7Sopenharmony_ciinformation on the cause of a device becoming _lost_.
2822e5c31af7Sopenharmony_ciAllowing applications to take appropriate corrective behavior for the cause
2823e5c31af7Sopenharmony_ciof the device lost.
2824e5c31af7Sopenharmony_ci====
2825e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
2826e5c31af7Sopenharmony_ci
2827e5c31af7Sopenharmony_ci[NOTE]
2828e5c31af7Sopenharmony_ci.Note
2829e5c31af7Sopenharmony_ci====
2830e5c31af7Sopenharmony_ciTypical reasons for device loss will include things like execution timing
2831e5c31af7Sopenharmony_ciout (to prevent denial of service), power management events, platform
2832e5c31af7Sopenharmony_ciresource management, implementation errors.
2833e5c31af7Sopenharmony_ci
2834e5c31af7Sopenharmony_ciApplications not adhering to <<fundamentals-validusage, valid usage>> may
2835e5c31af7Sopenharmony_cialso result in device loss being reported, however this is not guaranteed.
2836e5c31af7Sopenharmony_ciEven if device loss is reported, the system may be in an unrecoverable
2837e5c31af7Sopenharmony_cistate, and further usage of the API is still considered invalid.
2838e5c31af7Sopenharmony_ci====
2839e5c31af7Sopenharmony_ci
2840e5c31af7Sopenharmony_ciWhen this happens, certain commands will return ename:VK_ERROR_DEVICE_LOST.
2841e5c31af7Sopenharmony_ciAfter any such event, the logical device is considered _lost_.
2842e5c31af7Sopenharmony_ciIt is not possible to reset the logical device to a non-lost state, however
2843e5c31af7Sopenharmony_cithe lost state is specific to a logical device (sname:VkDevice), and the
2844e5c31af7Sopenharmony_cicorresponding physical device (sname:VkPhysicalDevice) may: be otherwise
2845e5c31af7Sopenharmony_ciunaffected.
2846e5c31af7Sopenharmony_ci
2847e5c31af7Sopenharmony_ciIn some cases, the physical device may: also be lost, and attempting to
2848e5c31af7Sopenharmony_cicreate a new logical device will fail, returning ename:VK_ERROR_DEVICE_LOST.
2849e5c31af7Sopenharmony_ciThis is usually indicative of a problem with the underlying implementation,
2850e5c31af7Sopenharmony_cior its connection to the host.
2851e5c31af7Sopenharmony_ciIf the physical device has not been lost, and a new logical device is
2852e5c31af7Sopenharmony_cisuccessfully created from that physical device, it must: be in the non-lost
2853e5c31af7Sopenharmony_cistate.
2854e5c31af7Sopenharmony_ci
2855e5c31af7Sopenharmony_ci[NOTE]
2856e5c31af7Sopenharmony_ci.Note
2857e5c31af7Sopenharmony_ci====
2858e5c31af7Sopenharmony_ciWhilst logical device loss may: be recoverable, in the case of physical
2859e5c31af7Sopenharmony_cidevice loss, it is unlikely that an application will be able to recover
2860e5c31af7Sopenharmony_ciunless additional, unaffected physical devices exist on the system.
2861e5c31af7Sopenharmony_ciThe error is largely informational and intended only to inform the user that
2862e5c31af7Sopenharmony_cia platform issue has occurred, and should: be investigated further.
2863e5c31af7Sopenharmony_ciFor example, underlying hardware may: have developed a fault or become
2864e5c31af7Sopenharmony_ciphysically disconnected from the rest of the system.
2865e5c31af7Sopenharmony_ciIn many cases, physical device loss may: cause other more serious issues
2866e5c31af7Sopenharmony_cisuch as the operating system crashing; in which case it may: not be reported
2867e5c31af7Sopenharmony_civia the Vulkan API.
2868e5c31af7Sopenharmony_ci====
2869e5c31af7Sopenharmony_ci
2870e5c31af7Sopenharmony_ciWhen a device is lost, its child objects are not implicitly destroyed and
2871e5c31af7Sopenharmony_citheir handles are still valid.
2872e5c31af7Sopenharmony_ciThose objects must: still be destroyed before their parents or the device
2873e5c31af7Sopenharmony_cican: be destroyed (see the <<fundamentals-objectmodel-lifetime,Object
2874e5c31af7Sopenharmony_ciLifetime>> section).
2875e5c31af7Sopenharmony_ciThe host address space corresponding to device memory mapped using
2876e5c31af7Sopenharmony_ciflink:vkMapMemory is still valid, and host memory accesses to these mapped
2877e5c31af7Sopenharmony_ciregions are still valid, but the contents are undefined:.
2878e5c31af7Sopenharmony_ciIt is still legal to call any API command on the device and child objects.
2879e5c31af7Sopenharmony_ci
2880e5c31af7Sopenharmony_ciOnce a device is lost, command execution may: fail, and certain commands
2881e5c31af7Sopenharmony_cithat return a elink:VkResult may: return ename:VK_ERROR_DEVICE_LOST.
2882e5c31af7Sopenharmony_ciThese commands can be identified by the inclusion of
2883e5c31af7Sopenharmony_ciename:VK_ERROR_DEVICE_LOST in the Return Codes section for each command.
2884e5c31af7Sopenharmony_ciCommands that do not allow runtime errors must: still operate correctly for
2885e5c31af7Sopenharmony_civalid usage and, if applicable, return valid data.
2886e5c31af7Sopenharmony_ci
2887e5c31af7Sopenharmony_ciCommands that wait indefinitely for device execution (namely
2888e5c31af7Sopenharmony_ciflink:vkDeviceWaitIdle, flink:vkQueueWaitIdle, flink:vkWaitForFences
2889e5c31af7Sopenharmony_ciifdef::VK_KHR_swapchain[]
2890e5c31af7Sopenharmony_cior flink:vkAcquireNextImageKHR
2891e5c31af7Sopenharmony_ciendif::VK_KHR_swapchain[]
2892e5c31af7Sopenharmony_ciwith a maximum pname:timeout, and flink:vkGetQueryPoolResults with the
2893e5c31af7Sopenharmony_ciename:VK_QUERY_RESULT_WAIT_BIT bit set in pname:flags) must: return in
2894e5c31af7Sopenharmony_cifinite time even in the case of a lost device, and return either
2895e5c31af7Sopenharmony_ciename:VK_SUCCESS or ename:VK_ERROR_DEVICE_LOST.
2896e5c31af7Sopenharmony_ciFor any command that may: return ename:VK_ERROR_DEVICE_LOST, for the purpose
2897e5c31af7Sopenharmony_ciof determining whether a command buffer is in the
2898e5c31af7Sopenharmony_ci<<commandbuffers-lifecycle, pending state>>, or whether resources are
2899e5c31af7Sopenharmony_ciconsidered in-use by the device, a return value of
2900e5c31af7Sopenharmony_ciename:VK_ERROR_DEVICE_LOST is equivalent to ename:VK_SUCCESS.
2901e5c31af7Sopenharmony_ci
2902e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
2903e5c31af7Sopenharmony_ciIf a device was created with the <<features-maintenance5,
2904e5c31af7Sopenharmony_cipname:maintenance5>> feature enabled, and any device command returns
2905e5c31af7Sopenharmony_ciename:VK_ERROR_DEVICE_LOST, then all device commands for which
2906e5c31af7Sopenharmony_ciename:VK_ERROR_DEVICE_LOST is a valid return value and which happen-after it
2907e5c31af7Sopenharmony_cion the same host thread must: return ename:VK_ERROR_DEVICE_LOST.
2908e5c31af7Sopenharmony_ci
2909e5c31af7Sopenharmony_ciDevice commands executing on other threads must: begin returning
2910e5c31af7Sopenharmony_ciename:VK_ERROR_DEVICE_LOST within finite time.
2911e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
2912e5c31af7Sopenharmony_ci
2913e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
2914e5c31af7Sopenharmony_ci
2915e5c31af7Sopenharmony_ciThe content of any external memory objects that have been exported from or
2916e5c31af7Sopenharmony_ciimported to a lost device become undefined:.
2917e5c31af7Sopenharmony_ciObjects on other logical devices or in other APIs which are associated with
2918e5c31af7Sopenharmony_cithe same underlying memory resource as the external memory objects on the
2919e5c31af7Sopenharmony_cilost device are unaffected other than their content becoming undefined:.
2920e5c31af7Sopenharmony_ciThe layout of subresources of images on other logical devices that are bound
2921e5c31af7Sopenharmony_cito sname:VkDeviceMemory objects associated with the same underlying memory
2922e5c31af7Sopenharmony_ciresources as external memory objects on the lost device becomes
2923e5c31af7Sopenharmony_ciename:VK_IMAGE_LAYOUT_UNDEFINED.
2924e5c31af7Sopenharmony_ci
2925e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_external_memory[]
2926e5c31af7Sopenharmony_ci
2927e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
2928e5c31af7Sopenharmony_ci
2929e5c31af7Sopenharmony_ciThe state of sname:VkSemaphore objects on other logical devices created by
2930e5c31af7Sopenharmony_ci<<synchronization-semaphores-importing,importing a semaphore payload>> with
2931e5c31af7Sopenharmony_citemporary permanence which was exported from the lost device is undefined:.
2932e5c31af7Sopenharmony_ciThe state of sname:VkSemaphore objects on other logical devices that
2933e5c31af7Sopenharmony_cipermanently share a semaphore payload with a sname:VkSemaphore object on the
2934e5c31af7Sopenharmony_cilost device is undefined:, and remains undefined: following any subsequent
2935e5c31af7Sopenharmony_cisignal operations.
2936e5c31af7Sopenharmony_ciImplementations must: ensure pending and subsequently submitted wait
2937e5c31af7Sopenharmony_cioperations on such semaphores behave as defined in
2938e5c31af7Sopenharmony_ci<<synchronization-semaphores-waiting-state,Semaphore State Requirements For
2939e5c31af7Sopenharmony_ciWait Operations>> for external semaphores not in a valid state for a wait
2940e5c31af7Sopenharmony_cioperation.
2941e5c31af7Sopenharmony_ci
2942e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
2943e5c31af7Sopenharmony_ci
2944e5c31af7Sopenharmony_ciifdef::editing-notes[]
2945e5c31af7Sopenharmony_ci[NOTE]
2946e5c31af7Sopenharmony_ci.editing-note
2947e5c31af7Sopenharmony_ci====
2948e5c31af7Sopenharmony_ciTODO (piman) - I do not think we are very clear about what "`in-use by the
2949e5c31af7Sopenharmony_cidevice`" means.
2950e5c31af7Sopenharmony_ci====
2951e5c31af7Sopenharmony_ciendif::editing-notes[]
2952e5c31af7Sopenharmony_ci
2953e5c31af7Sopenharmony_ci
2954e5c31af7Sopenharmony_ci[[devsandqueues-destruction]]
2955e5c31af7Sopenharmony_ci=== Device Destruction
2956e5c31af7Sopenharmony_ci
2957e5c31af7Sopenharmony_ci[open,refpage='vkDestroyDevice',desc='Destroy a logical device',type='protos']
2958e5c31af7Sopenharmony_ci--
2959e5c31af7Sopenharmony_ciTo destroy a device, call:
2960e5c31af7Sopenharmony_ci
2961e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkDestroyDevice.adoc[]
2962e5c31af7Sopenharmony_ci
2963e5c31af7Sopenharmony_ci  * pname:device is the logical device to destroy.
2964e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
2965e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
2966e5c31af7Sopenharmony_ci
2967e5c31af7Sopenharmony_ciTo ensure that no work is active on the device, flink:vkDeviceWaitIdle can:
2968e5c31af7Sopenharmony_cibe used to gate the destruction of the device.
2969e5c31af7Sopenharmony_ciPrior to destroying a device, an application is responsible for
2970e5c31af7Sopenharmony_cidestroying/freeing any Vulkan objects that were created using that device as
2971e5c31af7Sopenharmony_cithe first parameter of the corresponding ftext:vkCreate* or
2972e5c31af7Sopenharmony_ciftext:vkAllocate* command.
2973e5c31af7Sopenharmony_ci
2974e5c31af7Sopenharmony_ci[NOTE]
2975e5c31af7Sopenharmony_ci.Note
2976e5c31af7Sopenharmony_ci====
2977e5c31af7Sopenharmony_ciThe lifetime of each of these objects is bound by the lifetime of the
2978e5c31af7Sopenharmony_cisname:VkDevice object.
2979e5c31af7Sopenharmony_ciTherefore, to avoid resource leaks, it is critical that an application
2980e5c31af7Sopenharmony_ciexplicitly free all of these resources prior to calling
2981e5c31af7Sopenharmony_cifname:vkDestroyDevice.
2982e5c31af7Sopenharmony_ci====
2983e5c31af7Sopenharmony_ci
2984e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
2985e5c31af7Sopenharmony_ciIf
2986e5c31af7Sopenharmony_cislink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,
2987e5c31af7Sopenharmony_cipname:deviceDestroyFreesMemory>> is ename:VK_TRUE, the reserved memory for
2988e5c31af7Sopenharmony_cichild objects without explicit free or destroy commands is returned to the
2989e5c31af7Sopenharmony_cisystem when the device is destroyed, otherwise it may: not be returned to
2990e5c31af7Sopenharmony_cithe system until the process is terminated.
2991e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
2992e5c31af7Sopenharmony_ci
2993e5c31af7Sopenharmony_ci.Valid Usage
2994e5c31af7Sopenharmony_ci****
2995e5c31af7Sopenharmony_ci  * [[VUID-vkDestroyDevice-device-05137]]
2996e5c31af7Sopenharmony_ci    All child objects created on pname:device
2997e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
2998e5c31af7Sopenharmony_ci    , except those with no explicit <<fundamentals-objectmodel-no-destroy,
2999e5c31af7Sopenharmony_ci    free or destroy command>>,
3000e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
3001e5c31af7Sopenharmony_ci    must: have been destroyed prior to destroying pname:device
3002e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
3003e5c31af7Sopenharmony_ci  * [[VUID-vkDestroyDevice-device-00379]]
3004e5c31af7Sopenharmony_ci    If sname:VkAllocationCallbacks were provided when pname:device was
3005e5c31af7Sopenharmony_ci    created, a compatible set of callbacks must: be provided here
3006e5c31af7Sopenharmony_ci  * [[VUID-vkDestroyDevice-device-00380]]
3007e5c31af7Sopenharmony_ci    If no sname:VkAllocationCallbacks were provided when pname:device was
3008e5c31af7Sopenharmony_ci    created, pname:pAllocator must: be `NULL`
3009e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
3010e5c31af7Sopenharmony_ci****
3011e5c31af7Sopenharmony_ci
3012e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkDestroyDevice.adoc[]
3013e5c31af7Sopenharmony_ci--
3014e5c31af7Sopenharmony_ci
3015e5c31af7Sopenharmony_ci
3016e5c31af7Sopenharmony_ci[[devsandqueues-queues]]
3017e5c31af7Sopenharmony_ci== Queues
3018e5c31af7Sopenharmony_ci
3019e5c31af7Sopenharmony_ci
3020e5c31af7Sopenharmony_ci[[devsandqueues-queueprops]]
3021e5c31af7Sopenharmony_ci=== Queue Family Properties
3022e5c31af7Sopenharmony_ci
3023e5c31af7Sopenharmony_ciAs discussed in the <<devsandqueues-physical-device-enumeration,Physical
3024e5c31af7Sopenharmony_ciDevice Enumeration>> section above, the
3025e5c31af7Sopenharmony_ciflink:vkGetPhysicalDeviceQueueFamilyProperties command is used to retrieve
3026e5c31af7Sopenharmony_cidetails about the queue families and queues supported by a device.
3027e5c31af7Sopenharmony_ci
3028e5c31af7Sopenharmony_ciEach index in the pname:pQueueFamilyProperties array returned by
3029e5c31af7Sopenharmony_ciflink:vkGetPhysicalDeviceQueueFamilyProperties describes a unique queue
3030e5c31af7Sopenharmony_cifamily on that physical device.
3031e5c31af7Sopenharmony_ciThese indices are used when creating queues, and they correspond directly
3032e5c31af7Sopenharmony_ciwith the pname:queueFamilyIndex that is passed to the flink:vkCreateDevice
3033e5c31af7Sopenharmony_cicommand via the slink:VkDeviceQueueCreateInfo structure as described in the
3034e5c31af7Sopenharmony_ci<<devsandqueues-queue-creation,Queue Creation>> section below.
3035e5c31af7Sopenharmony_ci
3036e5c31af7Sopenharmony_ciGrouping of queue families within a physical device is
3037e5c31af7Sopenharmony_ciimplementation-dependent.
3038e5c31af7Sopenharmony_ci
3039e5c31af7Sopenharmony_ci[NOTE]
3040e5c31af7Sopenharmony_ci.Note
3041e5c31af7Sopenharmony_ci====
3042e5c31af7Sopenharmony_ciThe general expectation is that a physical device groups all queues of
3043e5c31af7Sopenharmony_cimatching capabilities into a single family.
3044e5c31af7Sopenharmony_ciHowever, while implementations should: do this, it is possible that a
3045e5c31af7Sopenharmony_ciphysical device may: return two separate queue families with the same
3046e5c31af7Sopenharmony_cicapabilities.
3047e5c31af7Sopenharmony_ci====
3048e5c31af7Sopenharmony_ci
3049e5c31af7Sopenharmony_ciOnce an application has identified a physical device with the queue(s) that
3050e5c31af7Sopenharmony_ciit desires to use, it will create those queues in conjunction with a logical
3051e5c31af7Sopenharmony_cidevice.
3052e5c31af7Sopenharmony_ciThis is described in the following section.
3053e5c31af7Sopenharmony_ci
3054e5c31af7Sopenharmony_ci
3055e5c31af7Sopenharmony_ci[[devsandqueues-queue-creation]]
3056e5c31af7Sopenharmony_ci=== Queue Creation
3057e5c31af7Sopenharmony_ci
3058e5c31af7Sopenharmony_ci[open,refpage='VkQueue',desc='Opaque handle to a queue object',type='handles']
3059e5c31af7Sopenharmony_ci--
3060e5c31af7Sopenharmony_ciCreating a logical device also creates the queues associated with that
3061e5c31af7Sopenharmony_cidevice.
3062e5c31af7Sopenharmony_ciThe queues to create are described by a set of slink:VkDeviceQueueCreateInfo
3063e5c31af7Sopenharmony_cistructures that are passed to flink:vkCreateDevice in
3064e5c31af7Sopenharmony_cipname:pQueueCreateInfos.
3065e5c31af7Sopenharmony_ci
3066e5c31af7Sopenharmony_ciQueues are represented by sname:VkQueue handles:
3067e5c31af7Sopenharmony_ci
3068e5c31af7Sopenharmony_ciinclude::{generated}/api/handles/VkQueue.adoc[]
3069e5c31af7Sopenharmony_ci--
3070e5c31af7Sopenharmony_ci
3071e5c31af7Sopenharmony_ci[open,refpage='VkDeviceQueueCreateInfo',desc='Structure specifying parameters of a newly created device queue',type='structs']
3072e5c31af7Sopenharmony_ci--
3073e5c31af7Sopenharmony_ciThe sname:VkDeviceQueueCreateInfo structure is defined as:
3074e5c31af7Sopenharmony_ci
3075e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceQueueCreateInfo.adoc[]
3076e5c31af7Sopenharmony_ci
3077e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
3078e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
3079e5c31af7Sopenharmony_ci    structure.
3080e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_1[]
3081e5c31af7Sopenharmony_ci  * pname:flags is reserved for future use.
3082e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
3083e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
3084e5c31af7Sopenharmony_ci  * pname:flags is a bitmask indicating behavior of the queues.
3085e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
3086e5c31af7Sopenharmony_ci  * pname:queueFamilyIndex is an unsigned integer indicating the index of
3087e5c31af7Sopenharmony_ci    the queue family in which to create the queues on this device.
3088e5c31af7Sopenharmony_ci    This index corresponds to the index of an element of the
3089e5c31af7Sopenharmony_ci    pname:pQueueFamilyProperties array that was returned by
3090e5c31af7Sopenharmony_ci    fname:vkGetPhysicalDeviceQueueFamilyProperties.
3091e5c31af7Sopenharmony_ci  * pname:queueCount is an unsigned integer specifying the number of queues
3092e5c31af7Sopenharmony_ci    to create in the queue family indicated by pname:queueFamilyIndex, and
3093e5c31af7Sopenharmony_ci    with the behavior specified by pname:flags.
3094e5c31af7Sopenharmony_ci  * pname:pQueuePriorities is a pointer to an array of pname:queueCount
3095e5c31af7Sopenharmony_ci    normalized floating point values, specifying priorities of work that
3096e5c31af7Sopenharmony_ci    will be submitted to each created queue.
3097e5c31af7Sopenharmony_ci    See <<devsandqueues-priority,Queue Priority>> for more information.
3098e5c31af7Sopenharmony_ci
3099e5c31af7Sopenharmony_ci.Valid Usage
3100e5c31af7Sopenharmony_ci****
3101e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueCreateInfo-queueFamilyIndex-00381]]
3102e5c31af7Sopenharmony_ci    pname:queueFamilyIndex must: be less than
3103e5c31af7Sopenharmony_ci    pname:pQueueFamilyPropertyCount returned by
3104e5c31af7Sopenharmony_ci    fname:vkGetPhysicalDeviceQueueFamilyProperties
3105e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueCreateInfo-queueCount-00382]]
3106e5c31af7Sopenharmony_ci    pname:queueCount must: be less than or equal to the pname:queueCount
3107e5c31af7Sopenharmony_ci    member of the sname:VkQueueFamilyProperties structure, as returned by
3108e5c31af7Sopenharmony_ci    fname:vkGetPhysicalDeviceQueueFamilyProperties in the
3109e5c31af7Sopenharmony_ci    pname:pQueueFamilyProperties[queueFamilyIndex]
3110e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueCreateInfo-pQueuePriorities-00383]]
3111e5c31af7Sopenharmony_ci    Each element of pname:pQueuePriorities must: be between `0.0` and `1.0`
3112e5c31af7Sopenharmony_ci    inclusive
3113e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
3114e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueCreateInfo-flags-02861]]
3115e5c31af7Sopenharmony_ci    If the <<features-protectedMemory, pname:protectedMemory>> feature is
3116e5c31af7Sopenharmony_ci    not enabled, the ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit of
3117e5c31af7Sopenharmony_ci    pname:flags must: not be set
3118e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueCreateInfo-flags-06449]]
3119e5c31af7Sopenharmony_ci    If pname:flags includes ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT,
3120e5c31af7Sopenharmony_ci    pname:queueFamilyIndex must: be the index of a queue family that
3121e5c31af7Sopenharmony_ci    includes the ename:VK_QUEUE_PROTECTED_BIT capability
3122e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
3123e5c31af7Sopenharmony_ciifdef::VK_ARM_scheduling_controls[]
3124e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueCreateInfo-pNext-09398]]
3125e5c31af7Sopenharmony_ci    If the pname:pNext chain includes a
3126e5c31af7Sopenharmony_ci    slink:VkDeviceQueueShaderCoreControlCreateInfoARM structure then
3127e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceSchedulingControlsPropertiesARM::pname:schedulingControlsFlags
3128e5c31af7Sopenharmony_ci    must: contain
3129e5c31af7Sopenharmony_ci    ename:VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM.
3130e5c31af7Sopenharmony_ciendif::VK_ARM_scheduling_controls[]
3131e5c31af7Sopenharmony_ci****
3132e5c31af7Sopenharmony_ci
3133e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceQueueCreateInfo.adoc[]
3134e5c31af7Sopenharmony_ci--
3135e5c31af7Sopenharmony_ci
3136e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
3137e5c31af7Sopenharmony_ci[open,refpage='VkDeviceQueueCreateFlagBits',desc='Bitmask specifying behavior of the queue',type='enums']
3138e5c31af7Sopenharmony_ci--
3139e5c31af7Sopenharmony_ciBits which can: be set in slink:VkDeviceQueueCreateInfo::pname:flags,
3140e5c31af7Sopenharmony_cispecifying usage behavior of a queue, are:
3141e5c31af7Sopenharmony_ci
3142e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkDeviceQueueCreateFlagBits.adoc[]
3143e5c31af7Sopenharmony_ci
3144e5c31af7Sopenharmony_ci  * ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT specifies that the device
3145e5c31af7Sopenharmony_ci    queue is a protected-capable queue.
3146e5c31af7Sopenharmony_ci--
3147e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
3148e5c31af7Sopenharmony_ci
3149e5c31af7Sopenharmony_ci[open,refpage='VkDeviceQueueCreateFlags',desc='Bitmask of VkDeviceQueueCreateFlagBits',type='flags']
3150e5c31af7Sopenharmony_ci--
3151e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkDeviceQueueCreateFlags.adoc[]
3152e5c31af7Sopenharmony_ci
3153e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_1[]
3154e5c31af7Sopenharmony_citname:VkDeviceQueueCreateFlags is a bitmask type for setting a mask, but is
3155e5c31af7Sopenharmony_cicurrently reserved for future use.
3156e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
3157e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
3158e5c31af7Sopenharmony_citname:VkDeviceQueueCreateFlags is a bitmask type for setting a mask of zero
3159e5c31af7Sopenharmony_cior more elink:VkDeviceQueueCreateFlagBits.
3160e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
3161e5c31af7Sopenharmony_ci--
3162e5c31af7Sopenharmony_ci
3163e5c31af7Sopenharmony_ciifdef::VK_EXT_global_priority,VK_KHR_global_priority[]
3164e5c31af7Sopenharmony_ci[open,refpage='VkDeviceQueueGlobalPriorityCreateInfoKHR',desc='Specify a system wide priority',type='structs',alias='VkDeviceQueueGlobalPriorityCreateInfoEXT']
3165e5c31af7Sopenharmony_ci--
3166e5c31af7Sopenharmony_ciQueues can: be created with a system-wide priority by adding a
3167e5c31af7Sopenharmony_cisname:VkDeviceQueueGlobalPriorityCreateInfoKHR structure to the pname:pNext
3168e5c31af7Sopenharmony_cichain of slink:VkDeviceQueueCreateInfo.
3169e5c31af7Sopenharmony_ci
3170e5c31af7Sopenharmony_ciThe sname:VkDeviceQueueGlobalPriorityCreateInfoKHR structure is defined as:
3171e5c31af7Sopenharmony_ci
3172e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceQueueGlobalPriorityCreateInfoKHR.adoc[]
3173e5c31af7Sopenharmony_ci
3174e5c31af7Sopenharmony_ciifdef::VK_EXT_global_priority[]
3175e5c31af7Sopenharmony_cior the equivalent
3176e5c31af7Sopenharmony_ci
3177e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceQueueGlobalPriorityCreateInfoEXT.adoc[]
3178e5c31af7Sopenharmony_ciendif::VK_EXT_global_priority[]
3179e5c31af7Sopenharmony_ci
3180e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
3181e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
3182e5c31af7Sopenharmony_ci    structure.
3183e5c31af7Sopenharmony_ci  * pname:globalPriority is the system-wide priority associated to these
3184e5c31af7Sopenharmony_ci    queues as specified by elink:VkQueueGlobalPriorityEXT
3185e5c31af7Sopenharmony_ci
3186e5c31af7Sopenharmony_ciQueues created without specifying
3187e5c31af7Sopenharmony_cisname:VkDeviceQueueGlobalPriorityCreateInfoKHR will default to
3188e5c31af7Sopenharmony_ciename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR.
3189e5c31af7Sopenharmony_ci
3190e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceQueueGlobalPriorityCreateInfoKHR.adoc[]
3191e5c31af7Sopenharmony_ci--
3192e5c31af7Sopenharmony_ci
3193e5c31af7Sopenharmony_ci[open,refpage='VkQueueGlobalPriorityKHR',desc='Values specifying a system-wide queue priority',type='enums',alias='VkQueueGlobalPriorityEXT']
3194e5c31af7Sopenharmony_ci--
3195e5c31af7Sopenharmony_ciPossible values of
3196e5c31af7Sopenharmony_cislink:VkDeviceQueueGlobalPriorityCreateInfoKHR::pname:globalPriority,
3197e5c31af7Sopenharmony_cispecifying a system-wide priority level are:
3198e5c31af7Sopenharmony_ci
3199e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkQueueGlobalPriorityKHR.adoc[]
3200e5c31af7Sopenharmony_ci
3201e5c31af7Sopenharmony_ciifdef::VK_EXT_global_priority[]
3202e5c31af7Sopenharmony_cior the equivalent
3203e5c31af7Sopenharmony_ci
3204e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkQueueGlobalPriorityEXT.adoc[]
3205e5c31af7Sopenharmony_ciendif::VK_EXT_global_priority[]
3206e5c31af7Sopenharmony_ci
3207e5c31af7Sopenharmony_ciPriority values are sorted in ascending order.
3208e5c31af7Sopenharmony_ciA comparison operation on the enum values can be used to determine the
3209e5c31af7Sopenharmony_cipriority order.
3210e5c31af7Sopenharmony_ci
3211e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR is below the system default.
3212e5c31af7Sopenharmony_ci    Useful for non-interactive tasks.
3213e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR is the system default
3214e5c31af7Sopenharmony_ci    priority.
3215e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR is above the system default.
3216e5c31af7Sopenharmony_ci  * ename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR is the highest priority.
3217e5c31af7Sopenharmony_ci    Useful for critical tasks.
3218e5c31af7Sopenharmony_ci--
3219e5c31af7Sopenharmony_ci
3220e5c31af7Sopenharmony_ciQueues with higher system priority may: be allotted more processing time
3221e5c31af7Sopenharmony_cithan queues with lower priority.
3222e5c31af7Sopenharmony_ciAn implementation may: allow a higher-priority queue to starve a
3223e5c31af7Sopenharmony_cilower-priority queue until the higher-priority queue has no further commands
3224e5c31af7Sopenharmony_cito execute.
3225e5c31af7Sopenharmony_ci
3226e5c31af7Sopenharmony_ciPriorities imply no ordering or scheduling constraints.
3227e5c31af7Sopenharmony_ci
3228e5c31af7Sopenharmony_ciNo specific guarantees are made about higher priority queues receiving more
3229e5c31af7Sopenharmony_ciprocessing time or better quality of service than lower priority queues.
3230e5c31af7Sopenharmony_ci
3231e5c31af7Sopenharmony_ciThe global priority level of a queue takes precedence over the per-process
3232e5c31af7Sopenharmony_ciqueue priority (slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities).
3233e5c31af7Sopenharmony_ci
3234e5c31af7Sopenharmony_ciAbuse of this feature may: result in starving the rest of the system of
3235e5c31af7Sopenharmony_ciimplementation resources.
3236e5c31af7Sopenharmony_ciTherefore, the driver implementation may: deny requests to acquire a
3237e5c31af7Sopenharmony_cipriority above the default priority
3238e5c31af7Sopenharmony_ci(ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR) if the caller does not have
3239e5c31af7Sopenharmony_cisufficient privileges.
3240e5c31af7Sopenharmony_ciIn this scenario ename:VK_ERROR_NOT_PERMITTED_KHR is returned.
3241e5c31af7Sopenharmony_ci
3242e5c31af7Sopenharmony_ciThe driver implementation may: fail the queue allocation request if
3243e5c31af7Sopenharmony_ciresources required to complete the operation have been exhausted (either by
3244e5c31af7Sopenharmony_cithe same process or a different process).
3245e5c31af7Sopenharmony_ciIn this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
3246e5c31af7Sopenharmony_ci
3247e5c31af7Sopenharmony_ciifdef::VK_EXT_global_priority_query,VK_KHR_global_priority[]
3248e5c31af7Sopenharmony_ciIf the <<features-globalPriorityQuery, pname:globalPriorityQuery>> feature
3249e5c31af7Sopenharmony_ciis enabled and the requested global priority is not reported via
3250e5c31af7Sopenharmony_cislink:VkQueueFamilyGlobalPriorityPropertiesKHR, the driver implementation
3251e5c31af7Sopenharmony_cimust: fail the queue creation.
3252e5c31af7Sopenharmony_ciIn this scenario, ename:VK_ERROR_INITIALIZATION_FAILED is returned.
3253e5c31af7Sopenharmony_ciendif::VK_EXT_global_priority_query,VK_KHR_global_priority[]
3254e5c31af7Sopenharmony_ciendif::VK_EXT_global_priority,VK_KHR_global_priority[]
3255e5c31af7Sopenharmony_ci
3256e5c31af7Sopenharmony_ciifdef::VK_ARM_scheduling_controls[]
3257e5c31af7Sopenharmony_ci[open,refpage='VkDeviceQueueShaderCoreControlCreateInfoARM',desc='Control the number of shader cores used by queues',type='structs']
3258e5c31af7Sopenharmony_ci--
3259e5c31af7Sopenharmony_ciThe number of shader cores used by a queue can: be controlled by adding a
3260e5c31af7Sopenharmony_cisname:VkDeviceQueueShaderCoreControlCreateInfoARM structure to the
3261e5c31af7Sopenharmony_cipname:pNext chain of slink:VkDeviceQueueCreateInfo structures.
3262e5c31af7Sopenharmony_ci
3263e5c31af7Sopenharmony_ciThe sname:VkDeviceQueueShaderCoreControlCreateInfoARM structure is defined
3264e5c31af7Sopenharmony_cias:
3265e5c31af7Sopenharmony_ci
3266e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceQueueShaderCoreControlCreateInfoARM.adoc[]
3267e5c31af7Sopenharmony_ci
3268e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
3269e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
3270e5c31af7Sopenharmony_ci    structure.
3271e5c31af7Sopenharmony_ci  * pname:shaderCoreCount is the number of shader cores this queue uses.
3272e5c31af7Sopenharmony_ci
3273e5c31af7Sopenharmony_ciQueues created without specifying
3274e5c31af7Sopenharmony_cisname:VkDeviceQueueShaderCoreControlCreateInfoARM will default to using all
3275e5c31af7Sopenharmony_cithe shader cores available.
3276e5c31af7Sopenharmony_ci
3277e5c31af7Sopenharmony_ci.Valid Usage
3278e5c31af7Sopenharmony_ci****
3279e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueShaderCoreControlCreateInfoARM-shaderCoreCount-09399]]
3280e5c31af7Sopenharmony_ci    pname:shaderCoreCount must: be greater than 0 and less than or equal to
3281e5c31af7Sopenharmony_ci    the total number of shader cores as reported via
3282e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM::pname:shaderCoreCount.
3283e5c31af7Sopenharmony_ci****
3284e5c31af7Sopenharmony_ci
3285e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceQueueShaderCoreControlCreateInfoARM.adoc[]
3286e5c31af7Sopenharmony_ci--
3287e5c31af7Sopenharmony_ciendif::VK_ARM_scheduling_controls[]
3288e5c31af7Sopenharmony_ci
3289e5c31af7Sopenharmony_ci[open,refpage='vkGetDeviceQueue',desc='Get a queue handle from a device',type='protos']
3290e5c31af7Sopenharmony_ci--
3291e5c31af7Sopenharmony_ciTo retrieve a handle to a slink:VkQueue object, call:
3292e5c31af7Sopenharmony_ci
3293e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetDeviceQueue.adoc[]
3294e5c31af7Sopenharmony_ci
3295e5c31af7Sopenharmony_ci  * pname:device is the logical device that owns the queue.
3296e5c31af7Sopenharmony_ci  * pname:queueFamilyIndex is the index of the queue family to which the
3297e5c31af7Sopenharmony_ci    queue belongs.
3298e5c31af7Sopenharmony_ci  * pname:queueIndex is the index within this queue family of the queue to
3299e5c31af7Sopenharmony_ci    retrieve.
3300e5c31af7Sopenharmony_ci  * pname:pQueue is a pointer to a slink:VkQueue object that will be filled
3301e5c31af7Sopenharmony_ci    with the handle for the requested queue.
3302e5c31af7Sopenharmony_ci
3303e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
3304e5c31af7Sopenharmony_cifname:vkGetDeviceQueue must: only be used to get queues that were created
3305e5c31af7Sopenharmony_ciwith the pname:flags parameter of slink:VkDeviceQueueCreateInfo set to zero.
3306e5c31af7Sopenharmony_ciTo get queues that were created with a non-zero pname:flags parameter use
3307e5c31af7Sopenharmony_ciflink:vkGetDeviceQueue2.
3308e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
3309e5c31af7Sopenharmony_ci
3310e5c31af7Sopenharmony_ci.Valid Usage
3311e5c31af7Sopenharmony_ci****
3312e5c31af7Sopenharmony_ci  * [[VUID-vkGetDeviceQueue-queueFamilyIndex-00384]]
3313e5c31af7Sopenharmony_ci    pname:queueFamilyIndex must: be one of the queue family indices
3314e5c31af7Sopenharmony_ci    specified when pname:device was created, via the
3315e5c31af7Sopenharmony_ci    slink:VkDeviceQueueCreateInfo structure
3316e5c31af7Sopenharmony_ci  * [[VUID-vkGetDeviceQueue-queueIndex-00385]]
3317e5c31af7Sopenharmony_ci    pname:queueIndex must: be less than the value of
3318e5c31af7Sopenharmony_ci    slink:VkDeviceQueueCreateInfo::pname:queueCount for the queue family
3319e5c31af7Sopenharmony_ci    indicated by pname:queueFamilyIndex when pname:device was created
3320e5c31af7Sopenharmony_ci  * [[VUID-vkGetDeviceQueue-flags-01841]]
3321e5c31af7Sopenharmony_ci    slink:VkDeviceQueueCreateInfo::pname:flags must: have been set to zero
3322e5c31af7Sopenharmony_ci    when pname:device was created
3323e5c31af7Sopenharmony_ci****
3324e5c31af7Sopenharmony_ci
3325e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetDeviceQueue.adoc[]
3326e5c31af7Sopenharmony_ci--
3327e5c31af7Sopenharmony_ci
3328e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
3329e5c31af7Sopenharmony_ci[open,refpage='vkGetDeviceQueue2',desc='Get a queue handle from a device',type='protos']
3330e5c31af7Sopenharmony_ci--
3331e5c31af7Sopenharmony_ciTo retrieve a handle to a slink:VkQueue object with specific
3332e5c31af7Sopenharmony_citlink:VkDeviceQueueCreateFlags creation flags, call:
3333e5c31af7Sopenharmony_ci
3334e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetDeviceQueue2.adoc[]
3335e5c31af7Sopenharmony_ci
3336e5c31af7Sopenharmony_ci  * pname:device is the logical device that owns the queue.
3337e5c31af7Sopenharmony_ci  * pname:pQueueInfo is a pointer to a slink:VkDeviceQueueInfo2 structure,
3338e5c31af7Sopenharmony_ci    describing parameters of the device queue to be retrieved.
3339e5c31af7Sopenharmony_ci  * pname:pQueue is a pointer to a slink:VkQueue object that will be filled
3340e5c31af7Sopenharmony_ci    with the handle for the requested queue.
3341e5c31af7Sopenharmony_ci
3342e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetDeviceQueue2.adoc[]
3343e5c31af7Sopenharmony_ci--
3344e5c31af7Sopenharmony_ci
3345e5c31af7Sopenharmony_ci[open,refpage='VkDeviceQueueInfo2',desc='Structure specifying the parameters used for device queue creation',type='structs']
3346e5c31af7Sopenharmony_ci--
3347e5c31af7Sopenharmony_ciThe sname:VkDeviceQueueInfo2 structure is defined as:
3348e5c31af7Sopenharmony_ci
3349e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDeviceQueueInfo2.adoc[]
3350e5c31af7Sopenharmony_ci
3351e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
3352e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
3353e5c31af7Sopenharmony_ci    structure.
3354e5c31af7Sopenharmony_ci    The pname:pNext chain of sname:VkDeviceQueueInfo2 can: be used to
3355e5c31af7Sopenharmony_ci    provide additional device queue parameters to fname:vkGetDeviceQueue2.
3356e5c31af7Sopenharmony_ci  * pname:flags is a tlink:VkDeviceQueueCreateFlags value indicating the
3357e5c31af7Sopenharmony_ci    flags used to create the device queue.
3358e5c31af7Sopenharmony_ci  * pname:queueFamilyIndex is the index of the queue family to which the
3359e5c31af7Sopenharmony_ci    queue belongs.
3360e5c31af7Sopenharmony_ci  * pname:queueIndex is the index of the queue to retrieve from within the
3361e5c31af7Sopenharmony_ci    set of queues that share both the queue family and flags specified.
3362e5c31af7Sopenharmony_ci
3363e5c31af7Sopenharmony_ciThe queue returned by fname:vkGetDeviceQueue2 must: have the same
3364e5c31af7Sopenharmony_cipname:flags value from this structure as that used at device creation time
3365e5c31af7Sopenharmony_ciin a slink:VkDeviceQueueCreateInfo structure.
3366e5c31af7Sopenharmony_ci
3367e5c31af7Sopenharmony_ci[NOTE]
3368e5c31af7Sopenharmony_ci.Note
3369e5c31af7Sopenharmony_ci====
3370e5c31af7Sopenharmony_ciNormally, if you create both protected-capable and non-protected-capable
3371e5c31af7Sopenharmony_ciqueues with the same family, they are treated as separate lists of queues
3372e5c31af7Sopenharmony_ciand pname:queueIndex is relative to the start of the list of queues
3373e5c31af7Sopenharmony_cispecified by both pname:queueFamilyIndex and pname:flags.
3374e5c31af7Sopenharmony_ciHowever, for historical reasons, some implementations may exhibit different
3375e5c31af7Sopenharmony_cibehavior.
3376e5c31af7Sopenharmony_ciThese divergent implementations instead concatenate the lists of queues and
3377e5c31af7Sopenharmony_citreat pname:queueIndex as relative to the start of the first list of queues
3378e5c31af7Sopenharmony_ciwith the given pname:queueFamilyIndex.
3379e5c31af7Sopenharmony_ciThis only matters in cases where an application has created both
3380e5c31af7Sopenharmony_ciprotected-capable and non-protected-capable queues from the same queue
3381e5c31af7Sopenharmony_cifamily.
3382e5c31af7Sopenharmony_ci
3383e5c31af7Sopenharmony_ciFor such divergent implementations, the maximum value of pname:queueIndex is
3384e5c31af7Sopenharmony_ciequal to the sum of slink:VkDeviceQueueCreateInfo::pname:queueCount minus
3385e5c31af7Sopenharmony_cione, for all slink:VkDeviceQueueCreateInfo structures that share a common
3386e5c31af7Sopenharmony_cipname:queueFamilyIndex.
3387e5c31af7Sopenharmony_ci
3388e5c31af7Sopenharmony_ciSuch implementations will return `NULL` for either the protected or
3389e5c31af7Sopenharmony_ciunprotected queues when calling `vkGetDeviceQueue2` with pname:queueIndex in
3390e5c31af7Sopenharmony_cithe range zero to slink:VkDeviceQueueCreateInfo::pname:queueCount minus one.
3391e5c31af7Sopenharmony_ciIn cases where these implementations returned `NULL`, the corresponding
3392e5c31af7Sopenharmony_ciqueues are instead located in the extended range described in the preceding
3393e5c31af7Sopenharmony_citwo paragraphs.
3394e5c31af7Sopenharmony_ci
3395e5c31af7Sopenharmony_ciThis behaviour will not be observed on any driver that has passed Vulkan
3396e5c31af7Sopenharmony_ciconformance test suite version 1.3.3.0, or any subsequent version.
3397e5c31af7Sopenharmony_ciThis information can be found by querying
3398e5c31af7Sopenharmony_cisname:VkPhysicalDeviceDriverProperties::pname:conformanceVersion.
3399e5c31af7Sopenharmony_ci====
3400e5c31af7Sopenharmony_ci
3401e5c31af7Sopenharmony_ci.Valid Usage
3402e5c31af7Sopenharmony_ci****
3403e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueInfo2-queueFamilyIndex-01842]]
3404e5c31af7Sopenharmony_ci    pname:queueFamilyIndex must: be one of the queue family indices
3405e5c31af7Sopenharmony_ci    specified when pname:device was created, via the
3406e5c31af7Sopenharmony_ci    slink:VkDeviceQueueCreateInfo structure
3407e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueInfo2-flags-06225]]
3408e5c31af7Sopenharmony_ci    pname:flags must: be equal to slink:VkDeviceQueueCreateInfo::pname:flags
3409e5c31af7Sopenharmony_ci    for a slink:VkDeviceQueueCreateInfo structure for the queue family
3410e5c31af7Sopenharmony_ci    indicated by pname:queueFamilyIndex when pname:device was created
3411e5c31af7Sopenharmony_ci  * [[VUID-VkDeviceQueueInfo2-queueIndex-01843]]
3412e5c31af7Sopenharmony_ci    pname:queueIndex must: be less than
3413e5c31af7Sopenharmony_ci    slink:VkDeviceQueueCreateInfo::pname:queueCount for the corresponding
3414e5c31af7Sopenharmony_ci    queue family and flags indicated by pname:queueFamilyIndex and
3415e5c31af7Sopenharmony_ci    pname:flags when pname:device was created
3416e5c31af7Sopenharmony_ci****
3417e5c31af7Sopenharmony_ci
3418e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDeviceQueueInfo2.adoc[]
3419e5c31af7Sopenharmony_ci--
3420e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
3421e5c31af7Sopenharmony_ci
3422e5c31af7Sopenharmony_ci
3423e5c31af7Sopenharmony_ci[[devsandqueues-index]]
3424e5c31af7Sopenharmony_ci=== Queue Family Index
3425e5c31af7Sopenharmony_ci
3426e5c31af7Sopenharmony_ciThe queue family index is used in multiple places in Vulkan in order to tie
3427e5c31af7Sopenharmony_cioperations to a specific family of queues.
3428e5c31af7Sopenharmony_ci
3429e5c31af7Sopenharmony_ciWhen retrieving a handle to the queue via fname:vkGetDeviceQueue, the queue
3430e5c31af7Sopenharmony_cifamily index is used to select which queue family to retrieve the
3431e5c31af7Sopenharmony_cisname:VkQueue handle from as described in the previous section.
3432e5c31af7Sopenharmony_ci
3433e5c31af7Sopenharmony_ciWhen creating a sname:VkCommandPool object (see
3434e5c31af7Sopenharmony_ci<<commandbuffers-pools,Command Pools>>), a queue family index is specified
3435e5c31af7Sopenharmony_ciin the slink:VkCommandPoolCreateInfo structure.
3436e5c31af7Sopenharmony_ciCommand buffers from this pool can: only be submitted on queues
3437e5c31af7Sopenharmony_cicorresponding to this queue family.
3438e5c31af7Sopenharmony_ci
3439e5c31af7Sopenharmony_ciWhen creating sname:VkImage (see <<resources-images,Images>>) and
3440e5c31af7Sopenharmony_cisname:VkBuffer (see <<resources-buffers,Buffers>>) resources, a set of queue
3441e5c31af7Sopenharmony_cifamilies is included in the slink:VkImageCreateInfo and
3442e5c31af7Sopenharmony_cislink:VkBufferCreateInfo structures to specify the queue families that can:
3443e5c31af7Sopenharmony_ciaccess the resource.
3444e5c31af7Sopenharmony_ci
3445e5c31af7Sopenharmony_ciWhen inserting a slink:VkBufferMemoryBarrier or slink:VkImageMemoryBarrier
3446e5c31af7Sopenharmony_ci(see <<synchronization-pipeline-barriers>>), a source and destination queue
3447e5c31af7Sopenharmony_cifamily index is specified to allow the ownership of a buffer or image to be
3448e5c31af7Sopenharmony_citransferred from one queue family to another.
3449e5c31af7Sopenharmony_ciSee the <<resources-sharing,Resource Sharing>> section for details.
3450e5c31af7Sopenharmony_ci
3451e5c31af7Sopenharmony_ci
3452e5c31af7Sopenharmony_ci[[devsandqueues-priority]]
3453e5c31af7Sopenharmony_ci=== Queue Priority
3454e5c31af7Sopenharmony_ci
3455e5c31af7Sopenharmony_ciEach queue is assigned a priority, as set in the
3456e5c31af7Sopenharmony_cislink:VkDeviceQueueCreateInfo structures when creating the device.
3457e5c31af7Sopenharmony_ciThe priority of each queue is a normalized floating point value between 0.0
3458e5c31af7Sopenharmony_ciand 1.0, which is then translated to a discrete priority level by the
3459e5c31af7Sopenharmony_ciimplementation.
3460e5c31af7Sopenharmony_ciHigher values indicate a higher priority, with 0.0 being the lowest priority
3461e5c31af7Sopenharmony_ciand 1.0 being the highest.
3462e5c31af7Sopenharmony_ci
3463e5c31af7Sopenharmony_ciWithin the same device, queues with higher priority may: be allotted more
3464e5c31af7Sopenharmony_ciprocessing time than queues with lower priority.
3465e5c31af7Sopenharmony_ciThe implementation makes no guarantees with regards to ordering or
3466e5c31af7Sopenharmony_cischeduling among queues with the same priority, other than the constraints
3467e5c31af7Sopenharmony_cidefined by any <<synchronization, explicit synchronization primitives>>.
3468e5c31af7Sopenharmony_ciThe implementation makes no guarantees with regards to queues across
3469e5c31af7Sopenharmony_cidifferent devices.
3470e5c31af7Sopenharmony_ci
3471e5c31af7Sopenharmony_ciAn implementation may: allow a higher-priority queue to starve a
3472e5c31af7Sopenharmony_cilower-priority queue on the same sname:VkDevice until the higher-priority
3473e5c31af7Sopenharmony_ciqueue has no further commands to execute.
3474e5c31af7Sopenharmony_ciThe relationship of queue priorities must: not cause queues on one
3475e5c31af7Sopenharmony_cisname:VkDevice to starve queues on another sname:VkDevice.
3476e5c31af7Sopenharmony_ci
3477e5c31af7Sopenharmony_ciNo specific guarantees are made about higher priority queues receiving more
3478e5c31af7Sopenharmony_ciprocessing time or better quality of service than lower priority queues.
3479e5c31af7Sopenharmony_ci
3480e5c31af7Sopenharmony_ci
3481e5c31af7Sopenharmony_ci[[devsandqueues-submission]]
3482e5c31af7Sopenharmony_ci=== Queue Submission
3483e5c31af7Sopenharmony_ci
3484e5c31af7Sopenharmony_ciWork is submitted to a queue via _queue submission_ commands such as
3485e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
3486e5c31af7Sopenharmony_ciflink:vkQueueSubmit2 or
3487e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_synchronization2[]
3488e5c31af7Sopenharmony_ciflink:vkQueueSubmit.
3489e5c31af7Sopenharmony_ciQueue submission commands define a set of _queue operations_ to be executed
3490e5c31af7Sopenharmony_ciby the underlying physical device, including synchronization with semaphores
3491e5c31af7Sopenharmony_ciand fences.
3492e5c31af7Sopenharmony_ci
3493e5c31af7Sopenharmony_ciSubmission commands take as parameters a target queue, zero or more
3494e5c31af7Sopenharmony_ci_batches_ of work, and an optional: fence to signal upon completion.
3495e5c31af7Sopenharmony_ciEach batch consists of three distinct parts:
3496e5c31af7Sopenharmony_ci
3497e5c31af7Sopenharmony_ci  . Zero or more semaphores to wait on before execution of the rest of the
3498e5c31af7Sopenharmony_ci    batch.
3499e5c31af7Sopenharmony_ci  ** If present, these describe a <<synchronization-semaphores-waiting,
3500e5c31af7Sopenharmony_ci     semaphore wait operation>>.
3501e5c31af7Sopenharmony_ci  . Zero or more work items to execute.
3502e5c31af7Sopenharmony_ci  ** If present, these describe a _queue operation_ matching the work
3503e5c31af7Sopenharmony_ci     described.
3504e5c31af7Sopenharmony_ci  . Zero or more semaphores to signal upon completion of the work items.
3505e5c31af7Sopenharmony_ci  ** If present, these describe a <<synchronization-semaphores-signaling,
3506e5c31af7Sopenharmony_ci     semaphore signal operation>>.
3507e5c31af7Sopenharmony_ci
3508e5c31af7Sopenharmony_ciIf a fence is present in a queue submission, it describes a
3509e5c31af7Sopenharmony_ci<<synchronization-fences-signaling, fence signal operation>>.
3510e5c31af7Sopenharmony_ci
3511e5c31af7Sopenharmony_ciAll work described by a queue submission command must: be submitted to the
3512e5c31af7Sopenharmony_ciqueue before the command returns.
3513e5c31af7Sopenharmony_ci
3514e5c31af7Sopenharmony_ci
3515e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
3516e5c31af7Sopenharmony_ci[[devsandqueues-sparsebinding]]
3517e5c31af7Sopenharmony_ci==== Sparse Memory Binding
3518e5c31af7Sopenharmony_ci
3519e5c31af7Sopenharmony_ciIn Vulkan it is possible to sparsely bind memory to buffers and images as
3520e5c31af7Sopenharmony_cidescribed in the <<sparsememory,Sparse Resource>> chapter.
3521e5c31af7Sopenharmony_ciSparse memory binding is a queue operation.
3522e5c31af7Sopenharmony_ciA queue whose flags include the ename:VK_QUEUE_SPARSE_BINDING_BIT must: be
3523e5c31af7Sopenharmony_ciable to support the mapping of a virtual address to a physical address on
3524e5c31af7Sopenharmony_cithe device.
3525e5c31af7Sopenharmony_ciThis causes an update to the page table mappings on the device.
3526e5c31af7Sopenharmony_ciThis update must: be synchronized on a queue to avoid corrupting page table
3527e5c31af7Sopenharmony_cimappings during execution of graphics commands.
3528e5c31af7Sopenharmony_ciBy binding the sparse memory resources on queues, all commands that are
3529e5c31af7Sopenharmony_cidependent on the updated bindings are synchronized to only execute after the
3530e5c31af7Sopenharmony_cibinding is updated.
3531e5c31af7Sopenharmony_ciSee the <<synchronization,Synchronization and Cache Control>> chapter for
3532e5c31af7Sopenharmony_cihow this synchronization is accomplished.
3533e5c31af7Sopenharmony_ci
3534e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
3535e5c31af7Sopenharmony_ci
3536e5c31af7Sopenharmony_ci[[devsandqueues-queuedestruction]]
3537e5c31af7Sopenharmony_ci=== Queue Destruction
3538e5c31af7Sopenharmony_ci
3539e5c31af7Sopenharmony_ciQueues are created along with a logical device during fname:vkCreateDevice.
3540e5c31af7Sopenharmony_ciAll queues associated with a logical device are destroyed when
3541e5c31af7Sopenharmony_cifname:vkDestroyDevice is called on that device.
3542