1e5c31af7Sopenharmony_ci// Copyright 2015-2024 The Khronos Group Inc.
2e5c31af7Sopenharmony_ci//
3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ci[[pipelines]]
6e5c31af7Sopenharmony_ci= Pipelines
7e5c31af7Sopenharmony_ci
8e5c31af7Sopenharmony_ciThe following <<pipelines-block-diagram,figure>> shows a block diagram of
9e5c31af7Sopenharmony_cithe Vulkan pipelines.
10e5c31af7Sopenharmony_ciSome Vulkan commands specify geometric objects to be drawn or computational
11e5c31af7Sopenharmony_ciwork to be performed, while others specify state controlling how objects are
12e5c31af7Sopenharmony_cihandled by the various pipeline stages, or control data transfer between
13e5c31af7Sopenharmony_cimemory organized as images and buffers.
14e5c31af7Sopenharmony_ciCommands are effectively sent through a processing pipeline, either a
15e5c31af7Sopenharmony_ci_graphics pipeline_,
16e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
17e5c31af7Sopenharmony_cia _ray tracing pipeline_,
18e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
19e5c31af7Sopenharmony_cior a _compute pipeline_.
20e5c31af7Sopenharmony_ci
21e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
22e5c31af7Sopenharmony_ciThe graphics pipeline can be operated in two modes, as either _primitive
23e5c31af7Sopenharmony_cishading_ or _mesh shading_ pipeline.
24e5c31af7Sopenharmony_ci
25e5c31af7Sopenharmony_ci*Primitive Shading*
26e5c31af7Sopenharmony_ci
27e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
28e5c31af7Sopenharmony_ci
29e5c31af7Sopenharmony_ciThe first stage of the <<pipelines-graphics,graphics pipeline>>
30e5c31af7Sopenharmony_ci(<<drawing,Input Assembler>>) assembles vertices to form geometric
31e5c31af7Sopenharmony_ciprimitives such as points, lines, and triangles, based on a requested
32e5c31af7Sopenharmony_ciprimitive topology.
33e5c31af7Sopenharmony_ciIn the next stage (<<shaders-vertex,Vertex Shader>>) vertices can: be
34e5c31af7Sopenharmony_citransformed, computing positions and attributes for each vertex.
35e5c31af7Sopenharmony_ciIf <<tessellation,tessellation>> and/or <<geometry,geometry>> shaders are
36e5c31af7Sopenharmony_cisupported, they can: then generate multiple primitives from a single input
37e5c31af7Sopenharmony_ciprimitive, possibly changing the primitive topology or generating additional
38e5c31af7Sopenharmony_ciattribute data in the process.
39e5c31af7Sopenharmony_ci
40e5c31af7Sopenharmony_ciifdef::VK_HUAWEI_cluster_culling_shader[]
41e5c31af7Sopenharmony_ci*Cluster Culling Shading*
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_ciWhen using the Cluster Culling Shader, a compute-like shader will perform
44e5c31af7Sopenharmony_cicluster-based culling, a set of new built-in output variables are used to
45e5c31af7Sopenharmony_ciexpress visible cluster, in addition, a new built-in function is used to
46e5c31af7Sopenharmony_ciemit these variables from the cluster culling shader to the Input
47e5c31af7Sopenharmony_ciAssembler(IA) stage, then IA can use these variables to fetches vertices of
48e5c31af7Sopenharmony_civisible cluster and drive vertex shader to work.
49e5c31af7Sopenharmony_ci
50e5c31af7Sopenharmony_ciendif::VK_HUAWEI_cluster_culling_shader[]
51e5c31af7Sopenharmony_ci
52e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
53e5c31af7Sopenharmony_ci*Mesh Shading*
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ciWhen using the <<mesh,_mesh shading_>> pipeline input primitives are not
56e5c31af7Sopenharmony_ciassembled implicitly, but explicitly through the (<<shaders-mesh,Mesh
57e5c31af7Sopenharmony_ciShader>>).
58e5c31af7Sopenharmony_ciThe work on the mesh pipeline is initiated by the application
59e5c31af7Sopenharmony_ci<<drawing-mesh-shading,drawing>> a set of mesh tasks.
60e5c31af7Sopenharmony_ci
61e5c31af7Sopenharmony_ciIf an optional (<<shaders-task,Task Shader>>) is active, each task triggers
62e5c31af7Sopenharmony_cithe execution of a task shader workgroup that will generate a new set of
63e5c31af7Sopenharmony_citasks upon completion.
64e5c31af7Sopenharmony_ciEach of these spawned tasks, or each of the original dispatched tasks if no
65e5c31af7Sopenharmony_citask shader is present, triggers the execution of a mesh shader workgroup
66e5c31af7Sopenharmony_cithat produces an output mesh with a variable-sized number of primitives
67e5c31af7Sopenharmony_ciassembled from vertices stored in the output mesh.
68e5c31af7Sopenharmony_ci
69e5c31af7Sopenharmony_ci*Common*
70e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
71e5c31af7Sopenharmony_ci
72e5c31af7Sopenharmony_ciThe final resulting primitives are <<vertexpostproc-clipping,clipped>> to a
73e5c31af7Sopenharmony_ciclip volume in preparation for the next stage, <<primsrast,Rasterization>>.
74e5c31af7Sopenharmony_ciThe rasterizer produces a series of _fragments_ associated with a region of
75e5c31af7Sopenharmony_cithe framebuffer, from a two-dimensional description of a point, line
76e5c31af7Sopenharmony_cisegment, or triangle.
77e5c31af7Sopenharmony_ciThese fragments are processed by <<fragops,fragment operations>> to
78e5c31af7Sopenharmony_cidetermine whether generated values will be written to the framebuffer.
79e5c31af7Sopenharmony_ci<<fragops-shader, Fragment shading>> determines the values to be written to
80e5c31af7Sopenharmony_cithe framebuffer attachments.
81e5c31af7Sopenharmony_ciFramebuffer operations then read and write the color and depth/stencil
82e5c31af7Sopenharmony_ciattachments of the framebuffer for a given subpass of a <<renderpass,render
83e5c31af7Sopenharmony_cipass instance>>.
84e5c31af7Sopenharmony_ciThe attachments can: be used as input attachments in the fragment shader in
85e5c31af7Sopenharmony_cia later subpass of the same render pass.
86e5c31af7Sopenharmony_ci
87e5c31af7Sopenharmony_ciThe <<pipelines-compute,compute pipeline>> is a separate pipeline from the
88e5c31af7Sopenharmony_cigraphics pipeline, which operates on one-, two-, or three-dimensional
89e5c31af7Sopenharmony_ciworkgroups which can: read from and write to buffer and image memory.
90e5c31af7Sopenharmony_ci
91e5c31af7Sopenharmony_ciThis ordering is meant only as a tool for describing Vulkan, not as a strict
92e5c31af7Sopenharmony_cirule of how Vulkan is implemented, and we present it only as a means to
93e5c31af7Sopenharmony_ciorganize the various operations of the pipelines.
94e5c31af7Sopenharmony_ciActual ordering guarantees between pipeline stages are explained in detail
95e5c31af7Sopenharmony_ciin the <<synchronization-pipeline-stages-order, synchronization chapter>>.
96e5c31af7Sopenharmony_ci
97e5c31af7Sopenharmony_ci[[pipelines-block-diagram]]
98e5c31af7Sopenharmony_ciifndef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
99e5c31af7Sopenharmony_ciimage::{images}/pipeline.svg[title="Block diagram of the Vulkan pipeline",align="center",opts="{imageopts}"]
100e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
101e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
102e5c31af7Sopenharmony_ciimage::{images}/pipelinemesh.svg[title="Block diagram of the Vulkan pipeline",align="center",opts="{imageopts}"]
103e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
104e5c31af7Sopenharmony_ci
105e5c31af7Sopenharmony_ciEach pipeline is controlled by a monolithic object created from a
106e5c31af7Sopenharmony_cidescription of all of the shader stages and any relevant fixed-function
107e5c31af7Sopenharmony_cistages.
108e5c31af7Sopenharmony_ci<<interfaces,Linking>> the whole pipeline together allows the optimization
109e5c31af7Sopenharmony_ciof shaders based on their input/outputs and eliminates expensive draw time
110e5c31af7Sopenharmony_cistate validation.
111e5c31af7Sopenharmony_ci
112e5c31af7Sopenharmony_ciA pipeline object is bound to the current state using
113e5c31af7Sopenharmony_ciflink:vkCmdBindPipeline.
114e5c31af7Sopenharmony_ciAny pipeline object state that is specified as <<pipelines-dynamic-state,
115e5c31af7Sopenharmony_cidynamic>> is not applied to the current state when the pipeline object is
116e5c31af7Sopenharmony_cibound, but is instead set by dynamic state setting commands.
117e5c31af7Sopenharmony_ci
118e5c31af7Sopenharmony_ciNo state, including dynamic state, is inherited from one command buffer to
119e5c31af7Sopenharmony_cianother.
120e5c31af7Sopenharmony_ci
121e5c31af7Sopenharmony_ci
122e5c31af7Sopenharmony_ci[open,refpage='VkPipeline',desc='Opaque handle to a pipeline object',type='handles']
123e5c31af7Sopenharmony_ci--
124e5c31af7Sopenharmony_ciCompute,
125e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
126e5c31af7Sopenharmony_ciray tracing,
127e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
128e5c31af7Sopenharmony_ciand graphics pipelines are each represented by sname:VkPipeline handles:
129e5c31af7Sopenharmony_ci
130e5c31af7Sopenharmony_ciinclude::{generated}/api/handles/VkPipeline.adoc[]
131e5c31af7Sopenharmony_ci--
132e5c31af7Sopenharmony_ci
133e5c31af7Sopenharmony_ci
134e5c31af7Sopenharmony_ci[[pipelines-multiple]]
135e5c31af7Sopenharmony_ci== Multiple Pipeline Creation
136e5c31af7Sopenharmony_ci
137e5c31af7Sopenharmony_ciMultiple pipelines can: be created in a single call by commands such as
138e5c31af7Sopenharmony_ciifdef::VK_AMDX_shader_enqueue[flink:vkCreateExecutionGraphPipelinesAMDX,]
139e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[flink:vkCreateRayTracingPipelinesKHR,]
140e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[flink:vkCreateRayTracingPipelinesNV,]
141e5c31af7Sopenharmony_ciflink:vkCreateComputePipelines, and flink:vkCreateGraphicsPipelines.
142e5c31af7Sopenharmony_ci
143e5c31af7Sopenharmony_ciThe creation commands are passed an array pname:pCreateInfos of
144e5c31af7Sopenharmony_cistext:Vk*PipelineCreateInfo structures specifying parameters of each
145e5c31af7Sopenharmony_cipipeline to be created, and return a corresponding array of handles in
146e5c31af7Sopenharmony_cipname:pPipelines.
147e5c31af7Sopenharmony_ciEach element index _i_ of pname:pPipelines is created based on the
148e5c31af7Sopenharmony_cicorresponding element _i_ of pname:pCreateInfos.
149e5c31af7Sopenharmony_ci
150e5c31af7Sopenharmony_ciApplications can: group together similar pipelines to be created in a single
151e5c31af7Sopenharmony_cicall, and implementations are encouraged to look for reuse opportunities
152e5c31af7Sopenharmony_ciwhen creating a group.
153e5c31af7Sopenharmony_ci
154e5c31af7Sopenharmony_ciWhen attempting to create many pipelines in a single command, it is possible
155e5c31af7Sopenharmony_cithat creation may: fail for a subset of them.
156e5c31af7Sopenharmony_ciIn this case, the corresponding elements of pname:pPipelines will be set to
157e5c31af7Sopenharmony_cidlink:VK_NULL_HANDLE.
158e5c31af7Sopenharmony_ciIf creation fails for a pipeline despite valid arguments (for example, due
159e5c31af7Sopenharmony_cito out of memory errors), the elink:VkResult code returned by the pipeline
160e5c31af7Sopenharmony_cicreation command will indicate why.
161e5c31af7Sopenharmony_ciThe implementation will attempt to create all pipelines, and only return
162e5c31af7Sopenharmony_cidlink:VK_NULL_HANDLE values for those that actually failed.
163e5c31af7Sopenharmony_ci
164e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
165e5c31af7Sopenharmony_ciIf creation fails for a pipeline that has the
166e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT set in its
167e5c31af7Sopenharmony_cistext:Vk*PipelineCreateInfo, pipelines at an index in the pname:pPipelines
168e5c31af7Sopenharmony_ciarray greater than or equal to that of the failing pipeline will be set to
169e5c31af7Sopenharmony_cidlink:VK_NULL_HANDLE.
170e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
171e5c31af7Sopenharmony_ci
172e5c31af7Sopenharmony_ciIf creation fails for multiple pipelines, the returned elink:VkResult must:
173e5c31af7Sopenharmony_cibe the return value of any one of the pipelines which did not succeed.
174e5c31af7Sopenharmony_ciAn application can: reliably clean up from a failed call by iterating over
175e5c31af7Sopenharmony_cithe pname:pPipelines array and destroying every element that is not
176e5c31af7Sopenharmony_cidlink:VK_NULL_HANDLE.
177e5c31af7Sopenharmony_ci
178e5c31af7Sopenharmony_ciIf the entire command fails and no pipelines are created, all elements of
179e5c31af7Sopenharmony_cipname:pPipelines will be set to dlink:VK_NULL_HANDLE.
180e5c31af7Sopenharmony_ci
181e5c31af7Sopenharmony_ci
182e5c31af7Sopenharmony_ci[[pipelines-compute]]
183e5c31af7Sopenharmony_ci== Compute Pipelines
184e5c31af7Sopenharmony_ci
185e5c31af7Sopenharmony_ciCompute pipelines consist of a single static compute shader stage and the
186e5c31af7Sopenharmony_cipipeline layout.
187e5c31af7Sopenharmony_ci
188e5c31af7Sopenharmony_ciThe compute pipeline represents a compute shader and is created by calling
189e5c31af7Sopenharmony_cifname:vkCreateComputePipelines
190e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
191e5c31af7Sopenharmony_ciwith pname:module and pname:pName selecting an entry point from a shader
192e5c31af7Sopenharmony_cimodule, where that entry point defines a valid compute shader, in the
193e5c31af7Sopenharmony_cislink:VkPipelineShaderStageCreateInfo structure contained within the
194e5c31af7Sopenharmony_cislink:VkComputePipelineCreateInfo structure.
195e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
196e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
197e5c31af7Sopenharmony_ciwith an offline compiled pipeline provided in pname:pipelineCache and the
198e5c31af7Sopenharmony_cipipeline identified by slink:VkPipelineOfflineCreateInfo structure in the
199e5c31af7Sopenharmony_cipname:pNext chain of slink:VkComputePipelineCreateInfo structure.
200e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
201e5c31af7Sopenharmony_ci
202e5c31af7Sopenharmony_ci
203e5c31af7Sopenharmony_ci[open,refpage='vkCreateComputePipelines',desc='Creates a new compute pipeline object',type='protos']
204e5c31af7Sopenharmony_ci--
205e5c31af7Sopenharmony_ci:refpage: vkCreateComputePipelines
206e5c31af7Sopenharmony_ci:objectnameplural: compute pipelines
207e5c31af7Sopenharmony_ci:objectnamecamelcase: computePipeline
208e5c31af7Sopenharmony_ci:objectcount: pname:createInfoCount
209e5c31af7Sopenharmony_ci
210e5c31af7Sopenharmony_ciTo create compute pipelines, call:
211e5c31af7Sopenharmony_ci
212e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCreateComputePipelines.adoc[]
213e5c31af7Sopenharmony_ci
214e5c31af7Sopenharmony_ci  * pname:device is the logical device that creates the compute pipelines.
215e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
216e5c31af7Sopenharmony_ci  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
217e5c31af7Sopenharmony_ci    pipeline caching is disabled; or the handle of a valid
218e5c31af7Sopenharmony_ci    <<pipelines-cache,pipeline cache>> object, in which case use of that
219e5c31af7Sopenharmony_ci    cache is enabled for the duration of the command.
220e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
221e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
222e5c31af7Sopenharmony_ci  * pname:pipelineCache is the handle of a valid <<pipelines-cache,pipeline
223e5c31af7Sopenharmony_ci    cache>> object.
224e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
225e5c31af7Sopenharmony_ci  * pname:createInfoCount is the length of the pname:pCreateInfos and
226e5c31af7Sopenharmony_ci    pname:pPipelines arrays.
227e5c31af7Sopenharmony_ci  * pname:pCreateInfos is a pointer to an array of
228e5c31af7Sopenharmony_ci    slink:VkComputePipelineCreateInfo structures.
229e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
230e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
231e5c31af7Sopenharmony_ci  * pname:pPipelines is a pointer to an array of slink:VkPipeline handles in
232e5c31af7Sopenharmony_ci    which the resulting compute pipeline objects are returned.
233e5c31af7Sopenharmony_ci
234e5c31af7Sopenharmony_ciPipelines are created and returned as described for <<pipelines-multiple,
235e5c31af7Sopenharmony_ciMultiple Pipeline Creation>>.
236e5c31af7Sopenharmony_ci
237e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
238e5c31af7Sopenharmony_ciIf a pipeline creation fails due to:
239e5c31af7Sopenharmony_ci
240e5c31af7Sopenharmony_ci  * The identified pipeline not being present in pname:pipelineCache
241e5c31af7Sopenharmony_ci  * The pname:pNext chain not including a slink:VkPipelineOfflineCreateInfo
242e5c31af7Sopenharmony_ci    structure
243e5c31af7Sopenharmony_ci
244e5c31af7Sopenharmony_cithe operation will continue as specified in <<pipelines-multiple, Multiple
245e5c31af7Sopenharmony_ciPipeline Creation>> and the command will return
246e5c31af7Sopenharmony_ciename:VK_ERROR_NO_PIPELINE_MATCH.
247e5c31af7Sopenharmony_ciifdef::hidden[]
248e5c31af7Sopenharmony_ci// tag::scdeviation[]
249e5c31af7Sopenharmony_ci  * flink:vkCreateComputePipelines returns ename:VK_ERROR_NO_PIPELINE_MATCH
250e5c31af7Sopenharmony_ci    if the slink:VkComputePipelineCreateInfo::pname:pNext chain does not
251e5c31af7Sopenharmony_ci    include a valid slink:VkPipelineOfflineCreateInfo structure <<SCID-1>>.
252e5c31af7Sopenharmony_ci// end::scdeviation[]
253e5c31af7Sopenharmony_ciendif::hidden[]
254e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
255e5c31af7Sopenharmony_ci
256e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
257e5c31af7Sopenharmony_ci
258e5c31af7Sopenharmony_ci.Valid Usage
259e5c31af7Sopenharmony_ci****
260e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
261e5c31af7Sopenharmony_ci  * [[VUID-vkCreateComputePipelines-flags-00695]]
262e5c31af7Sopenharmony_ci    If the pname:flags member of any element of pname:pCreateInfos contains
263e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
264e5c31af7Sopenharmony_ci    pname:basePipelineIndex member of that same element is not `-1`,
265e5c31af7Sopenharmony_ci    pname:basePipelineIndex must: be less than the index into
266e5c31af7Sopenharmony_ci    pname:pCreateInfos that corresponds to that element
267e5c31af7Sopenharmony_ci  * [[VUID-vkCreateComputePipelines-flags-00696]]
268e5c31af7Sopenharmony_ci    If the pname:flags member of any element of pname:pCreateInfos contains
269e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
270e5c31af7Sopenharmony_ci    must: have been created with the
271e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
272e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
273e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
274e5c31af7Sopenharmony_ci  * [[VUID-vkCreateComputePipelines-pipelineCache-02873]]
275e5c31af7Sopenharmony_ci    If pname:pipelineCache was created with
276e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access
277e5c31af7Sopenharmony_ci    to pname:pipelineCache must: be
278e5c31af7Sopenharmony_ci    <<fundamentals-threadingbehavior,externally synchronized>>
279e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
280e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
281e5c31af7Sopenharmony_ci****
282e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
283e5c31af7Sopenharmony_ciifdef::hidden[]
284e5c31af7Sopenharmony_ci// tag::scdeviation[]
285e5c31af7Sopenharmony_ci  * flink:vkCreateComputePipelines::pname:pipelineCache must: not be
286e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE <<SCID-1>>, <<SCID-8>>.
287e5c31af7Sopenharmony_ci// end::scdeviation[]
288e5c31af7Sopenharmony_ciendif::hidden[]
289e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
290e5c31af7Sopenharmony_ci
291e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCreateComputePipelines.adoc[]
292e5c31af7Sopenharmony_ci--
293e5c31af7Sopenharmony_ci
294e5c31af7Sopenharmony_ci[open,refpage='VkComputePipelineCreateInfo',desc='Structure specifying parameters of a newly created compute pipeline',type='structs']
295e5c31af7Sopenharmony_ci--
296e5c31af7Sopenharmony_ci:refpage: VkComputePipelineCreateInfo
297e5c31af7Sopenharmony_ci
298e5c31af7Sopenharmony_ciThe sname:VkComputePipelineCreateInfo structure is defined as:
299e5c31af7Sopenharmony_ci
300e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkComputePipelineCreateInfo.adoc[]
301e5c31af7Sopenharmony_ci
302e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
303e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
304e5c31af7Sopenharmony_ci    structure.
305e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
306e5c31af7Sopenharmony_ci    how the pipeline will be generated.
307e5c31af7Sopenharmony_ci  * pname:stage is a slink:VkPipelineShaderStageCreateInfo structure
308e5c31af7Sopenharmony_ci    describing the compute shader.
309e5c31af7Sopenharmony_ci  * pname:layout is the description of binding locations used by both the
310e5c31af7Sopenharmony_ci    pipeline and descriptor sets used with the pipeline.
311e5c31af7Sopenharmony_ci  * pname:basePipelineHandle is a pipeline to derive from.
312e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
313e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
314e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
315e5c31af7Sopenharmony_ci  * pname:basePipelineIndex is an index into the pname:pCreateInfos
316e5c31af7Sopenharmony_ci    parameter to use as a pipeline to derive from.
317e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
318e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
319e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
320e5c31af7Sopenharmony_ci
321e5c31af7Sopenharmony_ciThe parameters pname:basePipelineHandle and pname:basePipelineIndex are
322e5c31af7Sopenharmony_cidescribed in more detail in <<pipelines-pipeline-derivatives,Pipeline
323e5c31af7Sopenharmony_ciDerivatives>>.
324e5c31af7Sopenharmony_ci
325e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
326e5c31af7Sopenharmony_ciIf a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
327e5c31af7Sopenharmony_cipname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
328e5c31af7Sopenharmony_cifrom that structure is used instead of pname:flags from this structure.
329e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
330e5c31af7Sopenharmony_ci
331e5c31af7Sopenharmony_ci.Valid Usage
332e5c31af7Sopenharmony_ci****
333e5c31af7Sopenharmony_ci:pipelineType: compute
334e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
335e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/compute_graph_pipeline_create_info_common.adoc[]
336e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineCreateInfo-stage-00701]]
337e5c31af7Sopenharmony_ci    The pname:stage member of pname:stage must: be
338e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_COMPUTE_BIT
339e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineCreateInfo-stage-00702]]
340e5c31af7Sopenharmony_ci    The shader code for the entry point identified by pname:stage and the
341e5c31af7Sopenharmony_ci    rest of the state identified by this structure must: adhere to the
342e5c31af7Sopenharmony_ci    pipeline linking rules described in the <<interfaces,Shader Interfaces>>
343e5c31af7Sopenharmony_ci    chapter
344e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineCreateInfo-layout-01687]]
345e5c31af7Sopenharmony_ci    The number of resources in pname:layout accessible to the compute shader
346e5c31af7Sopenharmony_ci    stage must: be less than or equal to
347e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
348e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
349e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineCreateInfo-shaderEnqueue-09177]]
350e5c31af7Sopenharmony_ciifdef::VK_AMDX_shader_enqueue[]
351e5c31af7Sopenharmony_ci    If <<features-shaderEnqueue,pname:shaderEnqueue>> is not enabled,
352e5c31af7Sopenharmony_ciendif::VK_AMDX_shader_enqueue[]
353e5c31af7Sopenharmony_ci    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
354e5c31af7Sopenharmony_ciifdef::VK_AMDX_shader_enqueue[]
355e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineCreateInfo-flags-09178]]
356e5c31af7Sopenharmony_ci    If pname:flags does not include
357e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the shader specified by
358e5c31af7Sopenharmony_ci    pname:stage must: not declare the code:ShaderEnqueueAMDX capability
359e5c31af7Sopenharmony_ciendif::VK_AMDX_shader_enqueue[]
360e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
361e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
362e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineCreateInfo-pipelineStageCreationFeedbackCount-06566]]
363e5c31af7Sopenharmony_ci    If
364e5c31af7Sopenharmony_ci    slink:VkPipelineCreationFeedbackCreateInfo::pname:pipelineStageCreationFeedbackCount
365e5c31af7Sopenharmony_ci    is not `0`, it must: be `1`
366e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
367e5c31af7Sopenharmony_ciifdef::VK_EXT_opacity_micromap[]
368e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineCreateInfo-flags-07367]]
369e5c31af7Sopenharmony_ci    pname:flags must: not include
370e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
371e5c31af7Sopenharmony_ciendif::VK_EXT_opacity_micromap[]
372e5c31af7Sopenharmony_ciifdef::VK_NV_displacement_micromap[]
373e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineCreateInfo-flags-07996]]
374e5c31af7Sopenharmony_ci    pname:flags must: not include
375e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
376e5c31af7Sopenharmony_ciendif::VK_NV_displacement_micromap[]
377e5c31af7Sopenharmony_ci****
378e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
379e5c31af7Sopenharmony_ciifdef::hidden[]
380e5c31af7Sopenharmony_ci// tag::scdeviation[]
381e5c31af7Sopenharmony_ci  * slink:VkComputePipelineCreateInfo::pname:basePipelineHandle must: be
382e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE <<SCID-8>>.
383e5c31af7Sopenharmony_ci  * slink:VkComputePipelineCreateInfo::pname:basePipelineIndex must: be zero
384e5c31af7Sopenharmony_ci    <<SCID-8>>.
385e5c31af7Sopenharmony_ci// end::scdeviation[]
386e5c31af7Sopenharmony_ciendif::hidden[]
387e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
388e5c31af7Sopenharmony_ci
389e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkComputePipelineCreateInfo.adoc[]
390e5c31af7Sopenharmony_ci--
391e5c31af7Sopenharmony_ci
392e5c31af7Sopenharmony_ci[open,refpage='VkPipelineShaderStageCreateInfo',desc='Structure specifying parameters of a newly created pipeline shader stage',type='structs']
393e5c31af7Sopenharmony_ci--
394e5c31af7Sopenharmony_ciThe sname:VkPipelineShaderStageCreateInfo structure is defined as:
395e5c31af7Sopenharmony_ci
396e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineShaderStageCreateInfo.adoc[]
397e5c31af7Sopenharmony_ci
398e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
399e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
400e5c31af7Sopenharmony_ci    structure.
401e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkPipelineShaderStageCreateFlagBits
402e5c31af7Sopenharmony_ci    specifying how the pipeline shader stage will be generated.
403e5c31af7Sopenharmony_ci  * pname:stage is a elink:VkShaderStageFlagBits value specifying a single
404e5c31af7Sopenharmony_ci    pipeline stage.
405e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library,VK_EXT_shader_module_identifier,VK_KHR_maintenance5[]
406e5c31af7Sopenharmony_ci  * pname:module is optionally a slink:VkShaderModule object containing the
407e5c31af7Sopenharmony_ci    shader code for this stage.
408e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library,VK_EXT_shader_module_identifier,VK_KHR_maintenance5[]
409e5c31af7Sopenharmony_ciifndef::VK_EXT_graphics_pipeline_library,VK_EXT_shader_module_identifier,VK_KHR_maintenance5[]
410e5c31af7Sopenharmony_ci  * pname:module is a slink:VkShaderModule object containing the shader code
411e5c31af7Sopenharmony_ci    for this stage.
412e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library,VK_EXT_shader_module_identifier,VK_KHR_maintenance5[]
413e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
414e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
415e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
416e5c31af7Sopenharmony_ci  * pname:pName is a pointer to a null-terminated UTF-8 string specifying
417e5c31af7Sopenharmony_ci    the entry point name of the shader for this stage.
418e5c31af7Sopenharmony_ci  * pname:pSpecializationInfo is a pointer to a slink:VkSpecializationInfo
419e5c31af7Sopenharmony_ci    structure, as described in
420e5c31af7Sopenharmony_ci    <<pipelines-specialization-constants,Specialization Constants>>, or
421e5c31af7Sopenharmony_ci    `NULL`.
422e5c31af7Sopenharmony_ci
423e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
424e5c31af7Sopenharmony_ciIn Vulkan SC, the pipeline compilation process occurs
425e5c31af7Sopenharmony_ci<<pipelines-offline-compilation,offline>>.
426e5c31af7Sopenharmony_ciAccordingly, pname:module must: be dlink:VK_NULL_HANDLE, and the pname:pName
427e5c31af7Sopenharmony_ciand pname:pSpecializationInfo parameters are not used at runtime and should:
428e5c31af7Sopenharmony_cibe ignored by the implementation.
429e5c31af7Sopenharmony_ciIf provided, the application must: set the pname:pName and
430e5c31af7Sopenharmony_cipname:pSpecializationInfo parameters to the values that were specified for
431e5c31af7Sopenharmony_cithe offline compilation of this pipeline.
432e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
433e5c31af7Sopenharmony_ci
434e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
435e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
436e5c31af7Sopenharmony_ciIf pname:module is not dlink:VK_NULL_HANDLE, the shader code used by the
437e5c31af7Sopenharmony_cipipeline is defined by pname:module.
438e5c31af7Sopenharmony_ciIf pname:module is dlink:VK_NULL_HANDLE, the shader code is defined by the
439e5c31af7Sopenharmony_cichained slink:VkShaderModuleCreateInfo if present.
440e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
441e5c31af7Sopenharmony_ciifndef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
442e5c31af7Sopenharmony_ciThe shader code used by the pipeline is defined by pname:module.
443e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
444e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
445e5c31af7Sopenharmony_ci
446e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_module_identifier[]
447e5c31af7Sopenharmony_ciIf the <<features-shaderModuleIdentifier, pname:shaderModuleIdentifier>>
448e5c31af7Sopenharmony_cifeature is enabled, applications can: omit shader code for pname:stage and
449e5c31af7Sopenharmony_ciinstead provide a module identifier.
450e5c31af7Sopenharmony_ciThis is done by including a
451e5c31af7Sopenharmony_cislink:VkPipelineShaderStageModuleIdentifierCreateInfoEXT struct with
452e5c31af7Sopenharmony_cipname:identifierSize not equal to 0 in the pname:pNext chain.
453e5c31af7Sopenharmony_ciA shader stage created in this way is equivalent to one created using a
454e5c31af7Sopenharmony_cishader module with the same identifier.
455e5c31af7Sopenharmony_ciThe identifier allows an implementation to look up a pipeline without
456e5c31af7Sopenharmony_ciconsuming a valid SPIR-V module.
457e5c31af7Sopenharmony_ciIf a pipeline is not found, pipeline compilation is not possible and the
458e5c31af7Sopenharmony_ciimplementation must: fail as specified by
459e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT.
460e5c31af7Sopenharmony_ci
461e5c31af7Sopenharmony_ciWhen an identifier is used in lieu of a shader module, implementations may:
462e5c31af7Sopenharmony_cifail pipeline compilation with ename:VK_PIPELINE_COMPILE_REQUIRED for any
463e5c31af7Sopenharmony_cireason.
464e5c31af7Sopenharmony_ci
465e5c31af7Sopenharmony_ci[NOTE]
466e5c31af7Sopenharmony_ci.Note
467e5c31af7Sopenharmony_ci====
468e5c31af7Sopenharmony_ciThe rationale for the relaxed requirement on implementations to return a
469e5c31af7Sopenharmony_cipipeline with slink:VkPipelineShaderStageModuleIdentifierCreateInfoEXT is
470e5c31af7Sopenharmony_cithat layers or tools may intercept pipeline creation calls and require the
471e5c31af7Sopenharmony_cifull SPIR-V context to operate correctly.
472e5c31af7Sopenharmony_ciICDs are not expected to fail pipeline compilation if the pipeline exists in
473e5c31af7Sopenharmony_cia cache somewhere.
474e5c31af7Sopenharmony_ci====
475e5c31af7Sopenharmony_ci
476e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
477e5c31af7Sopenharmony_ciApplications can: use identifiers when creating pipelines with
478e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR.
479e5c31af7Sopenharmony_ciWhen creating such pipelines, ename:VK_SUCCESS may: be returned, but
480e5c31af7Sopenharmony_cisubsequently fail when referencing the pipeline in a
481e5c31af7Sopenharmony_cislink:VkPipelineLibraryCreateInfoKHR struct.
482e5c31af7Sopenharmony_ciApplications must: allow pipeline compilation to fail during link steps with
483e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT as it may:
484e5c31af7Sopenharmony_cinot be possible to determine if a pipeline can: be created from identifiers
485e5c31af7Sopenharmony_ciuntil the link step.
486e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
487e5c31af7Sopenharmony_ciendif::VK_EXT_shader_module_identifier[]
488e5c31af7Sopenharmony_ci
489e5c31af7Sopenharmony_ci.Valid Usage
490e5c31af7Sopenharmony_ci****
491e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00704]]
492e5c31af7Sopenharmony_ci    If the <<features-geometryShader, pname:geometryShader>> feature is not
493e5c31af7Sopenharmony_ci    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_GEOMETRY_BIT
494e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00705]]
495e5c31af7Sopenharmony_ci    If the <<features-tessellationShader, pname:tessellationShader>> feature
496e5c31af7Sopenharmony_ci    is not enabled, pname:stage must: not be
497e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
498e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
499e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
500e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02091]]
501e5c31af7Sopenharmony_ci    If the <<features-meshShader, pname:meshShaders>> feature is not
502e5c31af7Sopenharmony_ci    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_MESH_BIT_EXT
503e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02092]]
504e5c31af7Sopenharmony_ci    If the <<features-taskShader, pname:taskShaders>> feature is not
505e5c31af7Sopenharmony_ci    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_TASK_BIT_EXT
506e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
507e5c31af7Sopenharmony_ci
508e5c31af7Sopenharmony_ciifdef::VK_HUAWEI_cluster_culling_shader[]
509e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-clustercullingShader-07813]]
510e5c31af7Sopenharmony_ci    If the <<features-clustercullingShader, pname:clustercullingShader>>
511e5c31af7Sopenharmony_ci    feature is not enabled, pname:stage must: not be
512e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI
513e5c31af7Sopenharmony_ciendif::VK_HUAWEI_cluster_culling_shader[]
514e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00706]]
515e5c31af7Sopenharmony_ci    pname:stage must: not be ename:VK_SHADER_STAGE_ALL_GRAPHICS, or
516e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_ALL
517e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
518e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-module-05026]]
519e5c31af7Sopenharmony_ci    pname:module must: be dlink:VK_NULL_HANDLE.
520e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-pName-05027]]
521e5c31af7Sopenharmony_ci    If pname:pName is not `NULL`, it must: be the name of an
522e5c31af7Sopenharmony_ci    code:OpEntryPoint in the SPIR-V shader module used for offline
523e5c31af7Sopenharmony_ci    compilation of this pipeline with an execution model that matches
524e5c31af7Sopenharmony_ci    pname:stage
525e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
526e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
527e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-pName-00707]]
528e5c31af7Sopenharmony_ci    pname:pName must: be the name of an code:OpEntryPoint in pname:module
529e5c31af7Sopenharmony_ci    with an execution model that matches pname:stage
530e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
531e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708]]
532e5c31af7Sopenharmony_ci    If the identified entry point includes any variable in its interface
533e5c31af7Sopenharmony_ci    that is declared with the code:ClipDistance code:BuiltIn decoration,
534e5c31af7Sopenharmony_ci    that variable must: not have an array size greater than
535e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxClipDistances
536e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709]]
537e5c31af7Sopenharmony_ci    If the identified entry point includes any variable in its interface
538e5c31af7Sopenharmony_ci    that is declared with the code:CullDistance code:BuiltIn decoration,
539e5c31af7Sopenharmony_ci    that variable must: not have an array size greater than
540e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxCullDistances
541e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710]]
542e5c31af7Sopenharmony_ci    If the identified entry point includes any variables in its interface
543e5c31af7Sopenharmony_ci    that are declared with the code:ClipDistance or code:CullDistance
544e5c31af7Sopenharmony_ci    code:BuiltIn decoration, those variables must: not have array sizes
545e5c31af7Sopenharmony_ci    which sum to more than
546e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxCombinedClipAndCullDistances
547e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711]]
548e5c31af7Sopenharmony_ci    If the identified entry point includes any variable in its interface
549e5c31af7Sopenharmony_ci    that is declared with the code:SampleMask code:BuiltIn decoration, that
550e5c31af7Sopenharmony_ci    variable must: not have an array size greater than
551e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxSampleMaskWords
552e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00713]]
553e5c31af7Sopenharmony_ci    If pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
554e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and the identified
555e5c31af7Sopenharmony_ci    entry point has an code:OpExecutionMode instruction specifying a patch
556e5c31af7Sopenharmony_ci    size with code:OutputVertices, the patch size must: be greater than `0`
557e5c31af7Sopenharmony_ci    and less than or equal to
558e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
559e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00714]]
560e5c31af7Sopenharmony_ci    If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
561e5c31af7Sopenharmony_ci    entry point must: have an code:OpExecutionMode instruction specifying a
562e5c31af7Sopenharmony_ci    maximum output vertex count that is greater than `0` and less than or
563e5c31af7Sopenharmony_ci    equal to sname:VkPhysicalDeviceLimits::pname:maxGeometryOutputVertices
564e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00715]]
565e5c31af7Sopenharmony_ci    If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
566e5c31af7Sopenharmony_ci    entry point must: have an code:OpExecutionMode instruction specifying an
567e5c31af7Sopenharmony_ci    invocation count that is greater than `0` and less than or equal to
568e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxGeometryShaderInvocations
569e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02596]]
570e5c31af7Sopenharmony_ci    If pname:stage is either ename:VK_SHADER_STAGE_VERTEX_BIT,
571e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
572e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or
573e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_GEOMETRY_BIT, and the identified entry point
574e5c31af7Sopenharmony_ci    writes to code:Layer for any primitive, it must: write the same value to
575e5c31af7Sopenharmony_ci    code:Layer for all vertices of a given primitive
576e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02597]]
577e5c31af7Sopenharmony_ci    If pname:stage is either ename:VK_SHADER_STAGE_VERTEX_BIT,
578e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
579e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or
580e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_GEOMETRY_BIT, and the identified entry point
581e5c31af7Sopenharmony_ci    writes to code:ViewportIndex for any primitive, it must: write the same
582e5c31af7Sopenharmony_ci    value to code:ViewportIndex for all vertices of a given primitive
583e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06685]]
584e5c31af7Sopenharmony_ci    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
585e5c31af7Sopenharmony_ci    entry point writes to code:FragDepth in any execution path, all
586e5c31af7Sopenharmony_ci    execution paths that are not exclusive to helper invocations must:
587e5c31af7Sopenharmony_ci    either discard the fragment, or write or initialize the value of
588e5c31af7Sopenharmony_ci    code:FragDepth
589e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_stencil_export[]
590e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06686]]
591e5c31af7Sopenharmony_ci    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
592e5c31af7Sopenharmony_ci    entry point writes to code:FragStencilRefEXT in any execution path, all
593e5c31af7Sopenharmony_ci    execution paths that are not exclusive to helper invocations must:
594e5c31af7Sopenharmony_ci    either discard the fragment, or write or initialize the value of
595e5c31af7Sopenharmony_ci    code:FragStencilRefEXT
596e5c31af7Sopenharmony_ciendif::VK_EXT_shader_stencil_export[]
597e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
598e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02784]]
599e5c31af7Sopenharmony_ci    If pname:flags has the
600e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
601e5c31af7Sopenharmony_ci    flag set, the <<features-subgroupSizeControl,
602e5c31af7Sopenharmony_ci    pname:subgroupSizeControl>> feature must: be enabled
603e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02785]]
604e5c31af7Sopenharmony_ci    If pname:flags has the
605e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag
606e5c31af7Sopenharmony_ci    set, the <<features-computeFullSubgroups, pname:computeFullSubgroups>>
607e5c31af7Sopenharmony_ci    feature must: be enabled
608e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-flags-08988]]
609e5c31af7Sopenharmony_ci    If pname:flags includes
610e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT,
611e5c31af7Sopenharmony_ci    pname:stage must: be
612e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
613e5c31af7Sopenharmony_ci    one of ename:VK_SHADER_STAGE_MESH_BIT_EXT,
614e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TASK_BIT_EXT, or
615e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
616e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_COMPUTE_BIT
617e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02754]]
618e5c31af7Sopenharmony_ci    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure
619e5c31af7Sopenharmony_ci    is included in the pname:pNext chain, pname:flags must: not have the
620e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
621e5c31af7Sopenharmony_ci    flag set
622e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02755]]
623e5c31af7Sopenharmony_ci    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure
624e5c31af7Sopenharmony_ci    is included in the pname:pNext chain, the
625e5c31af7Sopenharmony_ci    <<features-subgroupSizeControl, pname:subgroupSizeControl>> feature
626e5c31af7Sopenharmony_ci    must: be enabled, and pname:stage must: be a valid bit specified in
627e5c31af7Sopenharmony_ci    <<limits-requiredSubgroupSizeStages, pname:requiredSubgroupSizeStages>>
628e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02756]]
629e5c31af7Sopenharmony_ci    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure
630e5c31af7Sopenharmony_ci    is included in the pname:pNext chain and pname:stage is
631e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_COMPUTE_BIT,
632e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[ename:VK_SHADER_STAGE_MESH_BIT_EXT, or ename:VK_SHADER_STAGE_TASK_BIT_EXT,]
633e5c31af7Sopenharmony_ci    the local workgroup size of the shader must: be less than or equal to
634e5c31af7Sopenharmony_ci    the product of
635e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo::pname:requiredSubgroupSize
636e5c31af7Sopenharmony_ci    and <<limits-maxComputeWorkgroupSubgroups,
637e5c31af7Sopenharmony_ci    pname:maxComputeWorkgroupSubgroups>>
638e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02757]]
639e5c31af7Sopenharmony_ci    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure
640e5c31af7Sopenharmony_ci    is included in the pname:pNext chain, and pname:flags has the
641e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag
642e5c31af7Sopenharmony_ci    set, the local workgroup size in the X dimension of the pipeline must:
643e5c31af7Sopenharmony_ci    be a multiple of
644e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo::pname:requiredSubgroupSize
645e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02758]]
646e5c31af7Sopenharmony_ci    If pname:flags has both the
647e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT and
648e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
649e5c31af7Sopenharmony_ci    flags set, the local workgroup size in the X dimension of the pipeline
650e5c31af7Sopenharmony_ci    must: be a multiple of <<limits-maxSubgroupSize, pname:maxSubgroupSize>>
651e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02759]]
652e5c31af7Sopenharmony_ci    If pname:flags has the
653e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag
654e5c31af7Sopenharmony_ci    set and pname:flags does not have the
655e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
656e5c31af7Sopenharmony_ci    flag set and no
657e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is
658e5c31af7Sopenharmony_ci    included in the pname:pNext chain, the local workgroup size in the X
659e5c31af7Sopenharmony_ci    dimension of the pipeline must: be a multiple of <<limits-subgroup-size,
660e5c31af7Sopenharmony_ci    pname:subgroupSize>>
661e5c31af7Sopenharmony_ciifdef::VK_KHR_cooperative_matrix[]
662e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-module-08987]]
663e5c31af7Sopenharmony_ci    If pname:module uses the code:OpTypeCooperativeMatrixKHR instruction
664e5c31af7Sopenharmony_ci    with a code:Scope equal to code:Subgroup, then the local workgroup size
665e5c31af7Sopenharmony_ci    in the X dimension of the pipeline must: be a multiple of
666e5c31af7Sopenharmony_ci    <<limits-subgroup-size,pname:subgroupSize>>.
667e5c31af7Sopenharmony_ciendif::VK_KHR_cooperative_matrix[]
668e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
669e5c31af7Sopenharmony_ci
670e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
671e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-08771]]
672e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_module_identifier[]
673e5c31af7Sopenharmony_ci    If a shader module identifier is not specified for this pname:stage,
674e5c31af7Sopenharmony_ciendif::VK_EXT_shader_module_identifier[]
675e5c31af7Sopenharmony_ci    pname:module must: be a valid slink:VkShaderModule
676e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
677e5c31af7Sopenharmony_ci    if none of the following features are enabled:
678e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
679e5c31af7Sopenharmony_ci  ** <<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>
680e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
681e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
682e5c31af7Sopenharmony_ci  ** <<features-maintenance5, pname:maintenance5>>
683e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
684e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
685e5c31af7Sopenharmony_ci
686e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
687e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06845]]
688e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_module_identifier[]
689e5c31af7Sopenharmony_ci    If a shader module identifier is not specified for this pname:stage,
690e5c31af7Sopenharmony_ci    pname:module must: be a valid slink:VkShaderModule, or
691e5c31af7Sopenharmony_ciendif::VK_EXT_shader_module_identifier[]
692e5c31af7Sopenharmony_ciifndef::VK_EXT_shader_module_identifier[]
693e5c31af7Sopenharmony_ci    If pname:module is dlink:VK_NULL_HANDLE]
694e5c31af7Sopenharmony_ciendif::VK_EXT_shader_module_identifier[]
695e5c31af7Sopenharmony_ci    there must: be a valid slink:VkShaderModuleCreateInfo structure in the
696e5c31af7Sopenharmony_ci    pname:pNext chain
697e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
698e5c31af7Sopenharmony_ci
699e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_module_identifier[]
700e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
701e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06844]]
702e5c31af7Sopenharmony_ci    If a shader module identifier is specified for this pname:stage, a
703e5c31af7Sopenharmony_ci    slink:VkShaderModuleCreateInfo structure must: not be present in the
704e5c31af7Sopenharmony_ci    pname:pNext chain
705e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
706e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06848]]
707e5c31af7Sopenharmony_ci    If a shader module identifier is specified for this pname:stage,
708e5c31af7Sopenharmony_ci    pname:module must: be dlink:VK_NULL_HANDLE
709e5c31af7Sopenharmony_ciendif::VK_EXT_shader_module_identifier[]
710e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-06849]]
711e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_module_identifier[]
712e5c31af7Sopenharmony_ci    If a shader module identifier is not specified, the
713e5c31af7Sopenharmony_ciendif::VK_EXT_shader_module_identifier[]
714e5c31af7Sopenharmony_ciifndef::VK_EXT_shader_module_identifier[The]
715e5c31af7Sopenharmony_ci    shader code used by the pipeline must: be valid as described by the
716e5c31af7Sopenharmony_ci    <<spirv-spec,Khronos SPIR-V Specification>> after applying the
717e5c31af7Sopenharmony_ci    specializations provided in pname:pSpecializationInfo, if any, and then
718e5c31af7Sopenharmony_ci    converting all specialization constants into fixed constants
719e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
720e5c31af7Sopenharmony_ci****
721e5c31af7Sopenharmony_ci
722e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineShaderStageCreateInfo.adoc[]
723e5c31af7Sopenharmony_ci--
724e5c31af7Sopenharmony_ci
725e5c31af7Sopenharmony_ci[open,refpage='VkPipelineShaderStageCreateFlags',desc='Bitmask of VkPipelineShaderStageCreateFlagBits',type='flags']
726e5c31af7Sopenharmony_ci--
727e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkPipelineShaderStageCreateFlags.adoc[]
728e5c31af7Sopenharmony_ci
729e5c31af7Sopenharmony_citname:VkPipelineShaderStageCreateFlags is a bitmask type for setting a mask
730e5c31af7Sopenharmony_ciof zero or more elink:VkPipelineShaderStageCreateFlagBits.
731e5c31af7Sopenharmony_ci--
732e5c31af7Sopenharmony_ci
733e5c31af7Sopenharmony_ci[open,refpage='VkPipelineShaderStageCreateFlagBits',desc='Bitmask controlling how a pipeline shader stage is created',type='enums']
734e5c31af7Sopenharmony_ci--
735e5c31af7Sopenharmony_ciPossible values of the pname:flags member of
736e5c31af7Sopenharmony_cislink:VkPipelineShaderStageCreateInfo specifying how a pipeline shader stage
737e5c31af7Sopenharmony_ciis created, are:
738e5c31af7Sopenharmony_ci
739e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineShaderStageCreateFlagBits.adoc[]
740e5c31af7Sopenharmony_ci
741e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
742e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
743e5c31af7Sopenharmony_ci    specifies that the
744e5c31af7Sopenharmony_ci    <<interfaces-builtin-variables-sgs,code:SubgroupSize>> may: vary in the
745e5c31af7Sopenharmony_ci    shader stage.
746e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT
747e5c31af7Sopenharmony_ci    specifies that the subgroup sizes must: be launched with all invocations
748e5c31af7Sopenharmony_ci    active in the
749e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh, or]
750e5c31af7Sopenharmony_ci    compute stage.
751e5c31af7Sopenharmony_ci
752e5c31af7Sopenharmony_ci[NOTE]
753e5c31af7Sopenharmony_ci.Note
754e5c31af7Sopenharmony_ci====
755e5c31af7Sopenharmony_ciIf ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
756e5c31af7Sopenharmony_ciand ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT are
757e5c31af7Sopenharmony_cispecified and <<limits-minSubgroupSize, pname:minSubgroupSize>> does not
758e5c31af7Sopenharmony_ciequal <<limits-maxSubgroupSize, pname:maxSubgroupSize>> and no
759e5c31af7Sopenharmony_ci<<pipelines-required-subgroup-size, required subgroup size>> is specified,
760e5c31af7Sopenharmony_cithen the only way to guarantee that the 'X' dimension of the local workgroup
761e5c31af7Sopenharmony_cisize is a multiple of <<interfaces-builtin-variables-sgs,
762e5c31af7Sopenharmony_cicode:SubgroupSize>> is to make it a multiple of pname:maxSubgroupSize.
763e5c31af7Sopenharmony_ciUnder these conditions, you are guaranteed full subgroups but not any
764e5c31af7Sopenharmony_ciparticular subgroup size.
765e5c31af7Sopenharmony_ci====
766e5c31af7Sopenharmony_ci
767e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
768e5c31af7Sopenharmony_ci--
769e5c31af7Sopenharmony_ci
770e5c31af7Sopenharmony_ci[open,refpage='VkShaderStageFlagBits',desc='Bitmask specifying a pipeline stage',type='enums']
771e5c31af7Sopenharmony_ci--
772e5c31af7Sopenharmony_ciBits which can: be set by commands and structures, specifying one or more
773e5c31af7Sopenharmony_cishader stages, are:
774e5c31af7Sopenharmony_ci
775e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkShaderStageFlagBits.adoc[]
776e5c31af7Sopenharmony_ci
777e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_VERTEX_BIT specifies the vertex stage.
778e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT specifies the
779e5c31af7Sopenharmony_ci    tessellation control stage.
780e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT specifies the
781e5c31af7Sopenharmony_ci    tessellation evaluation stage.
782e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_GEOMETRY_BIT specifies the geometry stage.
783e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_FRAGMENT_BIT specifies the fragment stage.
784e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_COMPUTE_BIT specifies the compute stage.
785e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_ALL_GRAPHICS is a combination of bits used as
786e5c31af7Sopenharmony_ci    shorthand to specify all graphics stages defined above (excluding the
787e5c31af7Sopenharmony_ci    compute stage).
788e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_ALL is a combination of bits used as shorthand to
789e5c31af7Sopenharmony_ci    specify all shader stages supported by the device, including all
790e5c31af7Sopenharmony_ci    additional stages which are introduced by extensions.
791e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
792e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_TASK_BIT_EXT specifies the task stage.
793e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_MESH_BIT_EXT specifies the mesh stage.
794e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
795e5c31af7Sopenharmony_ciifdef::VK_HUAWEI_cluster_culling_shader[]
796e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI specifies the cluster
797e5c31af7Sopenharmony_ci    culling stage.
798e5c31af7Sopenharmony_ciendif::VK_HUAWEI_cluster_culling_shader[]
799e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
800e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR specifies the ray generation stage.
801e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR specifies the any-hit stage.
802e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR specifies the closest hit
803e5c31af7Sopenharmony_ci    stage.
804e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_MISS_BIT_KHR specifies the miss stage.
805e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR specifies the intersection
806e5c31af7Sopenharmony_ci    stage.
807e5c31af7Sopenharmony_ci  * ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR specifies the callable stage.
808e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
809e5c31af7Sopenharmony_ci
810e5c31af7Sopenharmony_ci[NOTE]
811e5c31af7Sopenharmony_ci.Note
812e5c31af7Sopenharmony_ci====
813e5c31af7Sopenharmony_ciename:VK_SHADER_STAGE_ALL_GRAPHICS only includes the original five graphics
814e5c31af7Sopenharmony_cistages included in Vulkan 1.0, and not any stages added by extensions.
815e5c31af7Sopenharmony_ciThus, it may not have the desired effect in all cases.
816e5c31af7Sopenharmony_ci====
817e5c31af7Sopenharmony_ci--
818e5c31af7Sopenharmony_ci
819e5c31af7Sopenharmony_ci[open,refpage='VkShaderStageFlags',desc='Bitmask of VkShaderStageFlagBits',type='flags']
820e5c31af7Sopenharmony_ci--
821e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkShaderStageFlags.adoc[]
822e5c31af7Sopenharmony_ci
823e5c31af7Sopenharmony_citname:VkShaderStageFlags is a bitmask type for setting a mask of zero or
824e5c31af7Sopenharmony_cimore elink:VkShaderStageFlagBits.
825e5c31af7Sopenharmony_ci--
826e5c31af7Sopenharmony_ci
827e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
828e5c31af7Sopenharmony_ci[open,refpage='VkPipelineShaderStageRequiredSubgroupSizeCreateInfo',desc='Structure specifying the required subgroup size of a newly created pipeline shader stage',type='structs',alias='VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT']
829e5c31af7Sopenharmony_ci--
830e5c31af7Sopenharmony_ciThe sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is
831e5c31af7Sopenharmony_cidefined as:
832e5c31af7Sopenharmony_ci
833e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfo.adoc[]
834e5c31af7Sopenharmony_ci
835e5c31af7Sopenharmony_ciifdef::VK_EXT_subgroup_size_control[]
836e5c31af7Sopenharmony_cior the equivalent
837e5c31af7Sopenharmony_ci
838e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.adoc[]
839e5c31af7Sopenharmony_ciendif::VK_EXT_subgroup_size_control[]
840e5c31af7Sopenharmony_ci
841e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_object[]
842e5c31af7Sopenharmony_cior the equiavlent
843e5c31af7Sopenharmony_ci
844e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkShaderRequiredSubgroupSizeCreateInfoEXT.adoc[]
845e5c31af7Sopenharmony_ciendif::VK_EXT_shader_object[]
846e5c31af7Sopenharmony_ci
847e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
848e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
849e5c31af7Sopenharmony_ci    structure.
850e5c31af7Sopenharmony_ci  * [[pipelines-required-subgroup-size]] pname:requiredSubgroupSize is an
851e5c31af7Sopenharmony_ci    unsigned integer value specifying the required subgroup size for the
852e5c31af7Sopenharmony_ci    newly created pipeline shader stage.
853e5c31af7Sopenharmony_ci
854e5c31af7Sopenharmony_ciIf a sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is
855e5c31af7Sopenharmony_ciincluded in the pname:pNext chain of slink:VkPipelineShaderStageCreateInfo,
856e5c31af7Sopenharmony_ciit specifies that the pipeline shader stage being compiled has a required
857e5c31af7Sopenharmony_cisubgroup size.
858e5c31af7Sopenharmony_ci
859e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_object[]
860e5c31af7Sopenharmony_ciIf a sname:VkShaderRequiredSubgroupSizeCreateInfoEXT structure is included
861e5c31af7Sopenharmony_ciin the pname:pNext chain of slink:VkShaderCreateInfoEXT, it specifies that
862e5c31af7Sopenharmony_cithe shader being compiled has a required subgroup size.
863e5c31af7Sopenharmony_ciendif::VK_EXT_shader_object[]
864e5c31af7Sopenharmony_ci
865e5c31af7Sopenharmony_ci.Valid Usage
866e5c31af7Sopenharmony_ci****
867e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02760]]
868e5c31af7Sopenharmony_ci    pname:requiredSubgroupSize must: be a power-of-two integer
869e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02761]]
870e5c31af7Sopenharmony_ci    pname:requiredSubgroupSize must: be greater or equal to
871e5c31af7Sopenharmony_ci    <<limits-minSubgroupSize, pname:minSubgroupSize>>
872e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02762]]
873e5c31af7Sopenharmony_ci    pname:requiredSubgroupSize must: be less than or equal to
874e5c31af7Sopenharmony_ci    <<limits-maxSubgroupSize, pname:maxSubgroupSize>>
875e5c31af7Sopenharmony_ci****
876e5c31af7Sopenharmony_ci
877e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfo.adoc[]
878e5c31af7Sopenharmony_ci--
879e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
880e5c31af7Sopenharmony_ci
881e5c31af7Sopenharmony_ciifdef::VK_HUAWEI_subpass_shading[]
882e5c31af7Sopenharmony_ci[open,refpage='VkSubpassShadingPipelineCreateInfoHUAWEI',desc='Structure specifying parameters of a newly created subpass shading pipeline',type='structs']
883e5c31af7Sopenharmony_ci--
884e5c31af7Sopenharmony_ciA subpass shading pipeline is a compute pipeline which must: be called only
885e5c31af7Sopenharmony_ciin a subpass of a render pass with work dimensions specified by render area
886e5c31af7Sopenharmony_cisize.
887e5c31af7Sopenharmony_ciThe subpass shading pipeline shader is a compute shader allowed to access
888e5c31af7Sopenharmony_ciinput attachments specified in the calling subpass.
889e5c31af7Sopenharmony_ciTo create a subpass shading pipeline, call flink:vkCreateComputePipelines
890e5c31af7Sopenharmony_ciwith slink:VkSubpassShadingPipelineCreateInfoHUAWEI in the pname:pNext chain
891e5c31af7Sopenharmony_ciof slink:VkComputePipelineCreateInfo.
892e5c31af7Sopenharmony_ci
893e5c31af7Sopenharmony_ciThe sname:VkSubpassShadingPipelineCreateInfoHUAWEI structure is defined as:
894e5c31af7Sopenharmony_ci
895e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkSubpassShadingPipelineCreateInfoHUAWEI.adoc[]
896e5c31af7Sopenharmony_ci
897e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
898e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
899e5c31af7Sopenharmony_ci    structure.
900e5c31af7Sopenharmony_ci  * pname:renderPass is a handle to a render pass object describing the
901e5c31af7Sopenharmony_ci    environment in which the pipeline will be used.
902e5c31af7Sopenharmony_ci    The pipeline must: only be used with a render pass instance compatible
903e5c31af7Sopenharmony_ci    with the one provided.
904e5c31af7Sopenharmony_ci    See <<renderpass-compatibility,Render Pass Compatibility>> for more
905e5c31af7Sopenharmony_ci    information.
906e5c31af7Sopenharmony_ci  * pname:subpass is the index of the subpass in the render pass where this
907e5c31af7Sopenharmony_ci    pipeline will be used.
908e5c31af7Sopenharmony_ci
909e5c31af7Sopenharmony_ci.Valid Usage
910e5c31af7Sopenharmony_ci****
911e5c31af7Sopenharmony_ci  * [[VUID-VkSubpassShadingPipelineCreateInfoHUAWEI-subpass-04946]]
912e5c31af7Sopenharmony_ci    pname:subpass must: be created with
913e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI bind point
914e5c31af7Sopenharmony_ci****
915e5c31af7Sopenharmony_ci
916e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkSubpassShadingPipelineCreateInfoHUAWEI.adoc[]
917e5c31af7Sopenharmony_ci--
918e5c31af7Sopenharmony_ci
919e5c31af7Sopenharmony_ci[open,refpage='vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI',desc='Query maximum supported subpass shading workgroup size for a give render pass',type='protos']
920e5c31af7Sopenharmony_ci--
921e5c31af7Sopenharmony_ciA subpass shading pipeline's workgroup size is a 2D vector with number of
922e5c31af7Sopenharmony_cipower-of-two in width and height.
923e5c31af7Sopenharmony_ciThe maximum number of width and height is implementation-dependent, and may:
924e5c31af7Sopenharmony_civary for different formats and sample counts of attachments in a render
925e5c31af7Sopenharmony_cipass.
926e5c31af7Sopenharmony_ci
927e5c31af7Sopenharmony_ciTo query the maximum workgroup size, call:
928e5c31af7Sopenharmony_ci
929e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.adoc[]
930e5c31af7Sopenharmony_ci
931e5c31af7Sopenharmony_ci  * pname:device is a handle to a local device object that was used to
932e5c31af7Sopenharmony_ci    create the given render pass.
933e5c31af7Sopenharmony_ci  * pname:renderPass is a handle to a render pass object describing the
934e5c31af7Sopenharmony_ci    environment in which the pipeline will be used.
935e5c31af7Sopenharmony_ci    The pipeline must: only be used with a render pass instance compatible
936e5c31af7Sopenharmony_ci    with the one provided.
937e5c31af7Sopenharmony_ci    See <<renderpass-compatibility,Render Pass Compatibility>> for more
938e5c31af7Sopenharmony_ci    information.
939e5c31af7Sopenharmony_ci  * pname:pMaxWorkgroupSize is a pointer to a slink:VkExtent2D structure.
940e5c31af7Sopenharmony_ci
941e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.adoc[]
942e5c31af7Sopenharmony_ci--
943e5c31af7Sopenharmony_ciendif::VK_HUAWEI_subpass_shading[]
944e5c31af7Sopenharmony_ci
945e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_robustness[]
946e5c31af7Sopenharmony_ci[open,refpage='VkPipelineRobustnessCreateInfoEXT',desc='Structure controlling the robustness of a newly created pipeline shader stage',type='structs']
947e5c31af7Sopenharmony_ci--
948e5c31af7Sopenharmony_ciThe sname:VkPipelineRobustnessCreateInfoEXT structure is defined as:
949e5c31af7Sopenharmony_ci
950e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineRobustnessCreateInfoEXT.adoc[]
951e5c31af7Sopenharmony_ci
952e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
953e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
954e5c31af7Sopenharmony_ci    structure.
955e5c31af7Sopenharmony_ci  * pname:storageBuffers sets the behaviour of out of bounds accesses made
956e5c31af7Sopenharmony_ci    to resources bound as:
957e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
958e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
959e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
960e5c31af7Sopenharmony_ci  * pname:uniformBuffers describes the behaviour of out of bounds accesses
961e5c31af7Sopenharmony_ci    made to resources bound as:
962e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
963e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
964e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
965e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
966e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
967e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
968e5c31af7Sopenharmony_ci  * pname:vertexInputs describes the behaviour of out of bounds accesses
969e5c31af7Sopenharmony_ci    made to vertex input attributes
970e5c31af7Sopenharmony_ci  * pname:images describes the behaviour of out of bounds accesses made to
971e5c31af7Sopenharmony_ci    resources bound as:
972e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
973e5c31af7Sopenharmony_ci  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
974e5c31af7Sopenharmony_ci
975e5c31af7Sopenharmony_ciifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
976e5c31af7Sopenharmony_ciResources bound as ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT will have the
977e5c31af7Sopenharmony_cirobustness behavior that covers its active descriptor type.
978e5c31af7Sopenharmony_ciendif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
979e5c31af7Sopenharmony_ci
980e5c31af7Sopenharmony_ciThe scope of the effect of sname:VkPipelineRobustnessCreateInfoEXT depends
981e5c31af7Sopenharmony_cion which structure's pname:pNext chain it is included in.
982e5c31af7Sopenharmony_ci
983e5c31af7Sopenharmony_ci  * sname:VkGraphicsPipelineCreateInfo,
984e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[sname:VkRayTracingPipelineCreateInfoKHR,]
985e5c31af7Sopenharmony_ci    sname:VkComputePipelineCreateInfo: +
986e5c31af7Sopenharmony_ci    The robustness behavior described by
987e5c31af7Sopenharmony_ci    sname:VkPipelineRobustnessCreateInfoEXT applies to all accesses through
988e5c31af7Sopenharmony_ci    this pipeline
989e5c31af7Sopenharmony_ci  * sname:VkPipelineShaderStageCreateInfo: +
990e5c31af7Sopenharmony_ci    The robustness behavior described by
991e5c31af7Sopenharmony_ci    sname:VkPipelineRobustnessCreateInfoEXT applies to all accesses
992e5c31af7Sopenharmony_ci    emanating from the shader code of this shader stage
993e5c31af7Sopenharmony_ci
994e5c31af7Sopenharmony_ciIf sname:VkPipelineRobustnessCreateInfoEXT is specified for both a pipeline
995e5c31af7Sopenharmony_ciand a pipeline stage, the sname:VkPipelineRobustnessCreateInfoEXT specified
996e5c31af7Sopenharmony_cifor the pipeline stage will take precedence.
997e5c31af7Sopenharmony_ci
998e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
999e5c31af7Sopenharmony_ciWhen sname:VkPipelineRobustnessCreateInfoEXT is specified for a pipeline, it
1000e5c31af7Sopenharmony_cionly affects the subset of the pipeline that is specified by the create
1001e5c31af7Sopenharmony_ciinfo, as opposed to subsets linked from pipeline libraries.
1002e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1003e5c31af7Sopenharmony_ciFor slink:VkGraphicsPipelineCreateInfo, that subset is specified by
1004e5c31af7Sopenharmony_cislink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags.
1005e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1006e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
1007e5c31af7Sopenharmony_ciFor slink:VkRayTracingPipelineCreateInfoKHR, that subset is specified by the
1008e5c31af7Sopenharmony_cispecific stages in slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages.
1009e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
1010e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
1011e5c31af7Sopenharmony_ci
1012e5c31af7Sopenharmony_ci.Valid Usage
1013e5c31af7Sopenharmony_ci****
1014e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-pipelineRobustness-06926]]
1015e5c31af7Sopenharmony_ci    If the <<features-pipelineRobustness, pname:pipelineRobustness>> feature
1016e5c31af7Sopenharmony_ci    is not enabled, pname:storageBuffers must: be
1017e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT
1018e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-pipelineRobustness-06927]]
1019e5c31af7Sopenharmony_ci    If the <<features-pipelineRobustness, pname:pipelineRobustness>> feature
1020e5c31af7Sopenharmony_ci    is not enabled, pname:uniformBuffers must: be
1021e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT
1022e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-pipelineRobustness-06928]]
1023e5c31af7Sopenharmony_ci    If the <<features-pipelineRobustness, pname:pipelineRobustness>> feature
1024e5c31af7Sopenharmony_ci    is not enabled, pname:vertexInputs must: be
1025e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT
1026e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-pipelineRobustness-06929]]
1027e5c31af7Sopenharmony_ci    If the <<features-pipelineRobustness, pname:pipelineRobustness>> feature
1028e5c31af7Sopenharmony_ci    is not enabled, pname:images must: be
1029e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT
1030e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustImageAccess-06930]]
1031e5c31af7Sopenharmony_ci    If the <<features-robustImageAccess, pname:robustImageAccess>> feature
1032e5c31af7Sopenharmony_ci    is not supported, pname:images must: not be
1033e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT
1034e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustBufferAccess2-06931]]
1035e5c31af7Sopenharmony_ci    If the <<features-robustBufferAccess2, pname:robustBufferAccess2>>
1036e5c31af7Sopenharmony_ci    feature is not supported, pname:storageBuffers must: not be
1037e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
1038e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustBufferAccess2-06932]]
1039e5c31af7Sopenharmony_ci    If the <<features-robustBufferAccess2, pname:robustBufferAccess2>>
1040e5c31af7Sopenharmony_ci    feature is not supported, pname:uniformBuffers must: not be
1041e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
1042e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustBufferAccess2-06933]]
1043e5c31af7Sopenharmony_ci    If the <<features-robustBufferAccess2, pname:robustBufferAccess2>>
1044e5c31af7Sopenharmony_ci    feature is not supported, pname:vertexInputs must: not be
1045e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
1046e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustImageAccess2-06934]]
1047e5c31af7Sopenharmony_ci    If the <<features-robustImageAccess2, pname:robustImageAccess2>> feature
1048e5c31af7Sopenharmony_ci    is not supported, pname:images must: not be
1049e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT
1050e5c31af7Sopenharmony_ci****
1051e5c31af7Sopenharmony_ci
1052e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineRobustnessCreateInfoEXT.adoc[]
1053e5c31af7Sopenharmony_ci--
1054e5c31af7Sopenharmony_ci
1055e5c31af7Sopenharmony_ci[open,refpage='VkPipelineRobustnessBufferBehaviorEXT',desc='Enum controlling the robustness of buffer accesses in a pipeline stage',type='enums']
1056e5c31af7Sopenharmony_ci--
1057e5c31af7Sopenharmony_ciPossible values of the pname:storageBuffers, pname:uniformBuffers, and
1058e5c31af7Sopenharmony_cipname:vertexInputs members of slink:VkPipelineRobustnessCreateInfoEXT are:
1059e5c31af7Sopenharmony_ci
1060e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineRobustnessBufferBehaviorEXT.adoc[]
1061e5c31af7Sopenharmony_ci
1062e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT
1063e5c31af7Sopenharmony_ci    specifies that this pipeline stage follows the behavior of robustness
1064e5c31af7Sopenharmony_ci    features that are enabled on the device that created this pipeline
1065e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT specifies that
1066e5c31af7Sopenharmony_ci    buffer accesses by this pipeline stage to the relevant resource types
1067e5c31af7Sopenharmony_ci    must: not be out of bounds
1068e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT
1069e5c31af7Sopenharmony_ci    specifies that out of bounds accesses by this pipeline stage to the
1070e5c31af7Sopenharmony_ci    relevant resource types behave as if the <<features-robustBufferAccess,
1071e5c31af7Sopenharmony_ci    pname:robustBufferAccess>> feature is enabled
1072e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
1073e5c31af7Sopenharmony_ci    specifies that out of bounds accesses by this pipeline stage to the
1074e5c31af7Sopenharmony_ci    relevant resource types behave as if the <<features-robustBufferAccess2,
1075e5c31af7Sopenharmony_ci    pname:robustBufferAccess2>> feature is enabled
1076e5c31af7Sopenharmony_ci--
1077e5c31af7Sopenharmony_ci
1078e5c31af7Sopenharmony_ci[open,refpage='VkPipelineRobustnessImageBehaviorEXT',desc='Enum controlling the robustness of image accesses in a pipeline stage',type='enums']
1079e5c31af7Sopenharmony_ci--
1080e5c31af7Sopenharmony_ciPossible values of the pname:images member of
1081e5c31af7Sopenharmony_cislink:VkPipelineRobustnessCreateInfoEXT are:
1082e5c31af7Sopenharmony_ci
1083e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineRobustnessImageBehaviorEXT.adoc[]
1084e5c31af7Sopenharmony_ci
1085e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT specifies
1086e5c31af7Sopenharmony_ci    that this pipeline stage follows the behavior of robustness features
1087e5c31af7Sopenharmony_ci    that are enabled on the device that created this pipeline
1088e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT specifies that
1089e5c31af7Sopenharmony_ci    image accesses by this pipeline stage to the relevant resource types
1090e5c31af7Sopenharmony_ci    must: not be out of bounds
1091e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT
1092e5c31af7Sopenharmony_ci    specifies that out of bounds accesses by this pipeline stage to images
1093e5c31af7Sopenharmony_ci    behave as if the <<features-robustImageAccess, pname:robustImageAccess>>
1094e5c31af7Sopenharmony_ci    feature is enabled
1095e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT
1096e5c31af7Sopenharmony_ci    specifies that out of bounds accesses by this pipeline stage to images
1097e5c31af7Sopenharmony_ci    behave as if the <<features-robustImageAccess2,
1098e5c31af7Sopenharmony_ci    pname:robustImageAccess2>> feature is enabled
1099e5c31af7Sopenharmony_ci--
1100e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_robustness[]
1101e5c31af7Sopenharmony_ci
1102e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_module_identifier[]
1103e5c31af7Sopenharmony_ci[open,refpage='VkPipelineShaderStageModuleIdentifierCreateInfoEXT',desc='Structure specifying an identifier for a shader module',type='structs']
1104e5c31af7Sopenharmony_ci--
1105e5c31af7Sopenharmony_ciAn identifier can: be provided instead of shader code in an attempt to
1106e5c31af7Sopenharmony_cicompile pipelines without providing complete SPIR-V to the implementation.
1107e5c31af7Sopenharmony_ci
1108e5c31af7Sopenharmony_ciThe sname:VkPipelineShaderStageModuleIdentifierCreateInfoEXT structure is
1109e5c31af7Sopenharmony_cidefined as:
1110e5c31af7Sopenharmony_ci
1111e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineShaderStageModuleIdentifierCreateInfoEXT.adoc[]
1112e5c31af7Sopenharmony_ci
1113e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1114e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1115e5c31af7Sopenharmony_ci    structure.
1116e5c31af7Sopenharmony_ci  * pname:identifierSize is the size, in bytes, of the buffer pointed to by
1117e5c31af7Sopenharmony_ci    pname:pIdentifier.
1118e5c31af7Sopenharmony_ci  * pname:pIdentifier is a pointer to a buffer of opaque data specifying an
1119e5c31af7Sopenharmony_ci    identifier.
1120e5c31af7Sopenharmony_ci
1121e5c31af7Sopenharmony_ciAny identifier can: be used.
1122e5c31af7Sopenharmony_ciIf the pipeline being created with identifier requires compilation to
1123e5c31af7Sopenharmony_cicomplete the pipeline creation call, pipeline compilation must: fail as
1124e5c31af7Sopenharmony_cidefined by ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT.
1125e5c31af7Sopenharmony_ci
1126e5c31af7Sopenharmony_cipname:pIdentifier and pname:identifierSize can: be obtained from an
1127e5c31af7Sopenharmony_cislink:VkShaderModuleIdentifierEXT queried earlier.
1128e5c31af7Sopenharmony_ci
1129e5c31af7Sopenharmony_ci.Valid Usage
1130e5c31af7Sopenharmony_ci****
1131e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-pNext-06850]]
1132e5c31af7Sopenharmony_ci    If this structure is included in a pname:pNext chain and
1133e5c31af7Sopenharmony_ci    pname:identifierSize is not equal to 0, the
1134e5c31af7Sopenharmony_ci    <<features-shaderModuleIdentifier, pname:shaderModuleIdentifier>>
1135e5c31af7Sopenharmony_ci    feature must: be enabled
1136e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-pNext-06851]]
1137e5c31af7Sopenharmony_ci    If this struct is included in a pname:pNext chain of
1138e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageCreateInfo and pname:identifierSize is not
1139e5c31af7Sopenharmony_ci    equal to 0, the pipeline must: be created with the
1140e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT flag set
1141e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-identifierSize-06852]]
1142e5c31af7Sopenharmony_ci    pname:identifierSize must: be less-or-equal to
1143e5c31af7Sopenharmony_ci    ename:VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT
1144e5c31af7Sopenharmony_ci****
1145e5c31af7Sopenharmony_ci
1146e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineShaderStageModuleIdentifierCreateInfoEXT.adoc[]
1147e5c31af7Sopenharmony_ci--
1148e5c31af7Sopenharmony_ciendif::VK_EXT_shader_module_identifier[]
1149e5c31af7Sopenharmony_ci
1150e5c31af7Sopenharmony_ciifdef::VK_NV_device_generated_commands_compute[]
1151e5c31af7Sopenharmony_ciIf a compute pipeline is going to be used in <<device-generated-commands,
1152e5c31af7Sopenharmony_ciDevice-Generated Commands>> by specifying its pipeline token with
1153e5c31af7Sopenharmony_cislink:VkBindPipelineIndirectCommandNV, then that pipeline's associated
1154e5c31af7Sopenharmony_cimetadata must: be saved at a specified buffer device address for later use
1155e5c31af7Sopenharmony_ciin indirect command generation.
1156e5c31af7Sopenharmony_ciThe buffer device address must: be specified at the time of compute pipeline
1157e5c31af7Sopenharmony_cicreation with slink:VkComputePipelineIndirectBufferInfoNV structure in the
1158e5c31af7Sopenharmony_cipname:pNext chain of slink:VkComputePipelineCreateInfo.
1159e5c31af7Sopenharmony_ci
1160e5c31af7Sopenharmony_ci[open,refpage='VkComputePipelineIndirectBufferInfoNV',desc='Structure describing the device address where pipeline\'s metadata will be saved',type='structs']
1161e5c31af7Sopenharmony_ci--
1162e5c31af7Sopenharmony_ciThe sname:VkComputePipelineIndirectBufferInfoNV structure is defined as:
1163e5c31af7Sopenharmony_ci
1164e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkComputePipelineIndirectBufferInfoNV.adoc[]
1165e5c31af7Sopenharmony_ci
1166e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1167e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1168e5c31af7Sopenharmony_ci    structure.
1169e5c31af7Sopenharmony_ci  * pname:deviceAddress is the address where the pipeline's metadata will be
1170e5c31af7Sopenharmony_ci    stored.
1171e5c31af7Sopenharmony_ci  * pname:size is the size of pipeline's metadata that was queried using
1172e5c31af7Sopenharmony_ci    flink:vkGetPipelineIndirectMemoryRequirementsNV.
1173e5c31af7Sopenharmony_ci  * pname:pipelineDeviceAddressCaptureReplay is the device address where
1174e5c31af7Sopenharmony_ci    pipeline's metadata was originally saved and can now be used to
1175e5c31af7Sopenharmony_ci    re-populate pname:deviceAddress for replay.
1176e5c31af7Sopenharmony_ci
1177e5c31af7Sopenharmony_ciIf pname:pipelineDeviceAddressCaptureReplay is zero, no specific address is
1178e5c31af7Sopenharmony_cirequested.
1179e5c31af7Sopenharmony_ciIf pname:pipelineDeviceAddressCaptureReplay is not zero, then it must: be an
1180e5c31af7Sopenharmony_ciaddress retrieved from an identically created pipeline on the same
1181e5c31af7Sopenharmony_ciimplementation.
1182e5c31af7Sopenharmony_ciThe pipeline metadata must: also be placed on an identically created buffer
1183e5c31af7Sopenharmony_ciand at the same offset using the flink:vkCmdUpdatePipelineIndirectBufferNV
1184e5c31af7Sopenharmony_cicommand.
1185e5c31af7Sopenharmony_ci
1186e5c31af7Sopenharmony_ci.Valid Usage
1187e5c31af7Sopenharmony_ci****
1188e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-deviceGeneratedComputePipelines-09009]]
1189e5c31af7Sopenharmony_ci    The <<features-deviceGeneratedComputePipelines,
1190e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
1191e5c31af7Sopenharmony_ci    feature must: be enabled
1192e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-flags-09010]]
1193e5c31af7Sopenharmony_ci    The pipeline creation flags in
1194e5c31af7Sopenharmony_ci    slink:VkComputePipelineCreateInfo::pname:flags must: include
1195e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
1196e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-deviceAddress-09011]]
1197e5c31af7Sopenharmony_ci    pname:deviceAddress must: be aligned to the
1198e5c31af7Sopenharmony_ci    slink:VkMemoryRequirements2::pname:alignment, as returned by
1199e5c31af7Sopenharmony_ci    flink:vkGetPipelineIndirectMemoryRequirementsNV
1200e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-deviceAddress-09012]]
1201e5c31af7Sopenharmony_ci    pname:deviceAddress must: have been allocated from a buffer that was
1202e5c31af7Sopenharmony_ci    created with usage ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT and
1203e5c31af7Sopenharmony_ci    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
1204e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-size-09013]]
1205e5c31af7Sopenharmony_ci    pname:size must: be greater than or equal to the
1206e5c31af7Sopenharmony_ci    slink:VkMemoryRequirements2::pname:size, as returned by
1207e5c31af7Sopenharmony_ci    flink:vkGetPipelineIndirectMemoryRequirementsNV
1208e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09014]]
1209e5c31af7Sopenharmony_ci    If pname:pipelineDeviceAddressCaptureReplay is non-zero then the
1210e5c31af7Sopenharmony_ci    <<features-deviceGeneratedComputePipelines,
1211e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputeCaptureReplay>>
1212e5c31af7Sopenharmony_ci    feature must: be enabled
1213e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09015]]
1214e5c31af7Sopenharmony_ci    If pname:pipelineDeviceAddressCaptureReplay is non-zero then that
1215e5c31af7Sopenharmony_ci    address must: have been allocated with flag
1216e5c31af7Sopenharmony_ci    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT set
1217e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09016]]
1218e5c31af7Sopenharmony_ci    If pname:pipelineDeviceAddressCaptureReplay is non-zero, the
1219e5c31af7Sopenharmony_ci    pname:pipeline must: have been recreated for replay
1220e5c31af7Sopenharmony_ci  * [[VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09017]]
1221e5c31af7Sopenharmony_ci    pname:pipelineDeviceAddressCaptureReplay must: satisfy the
1222e5c31af7Sopenharmony_ci    pname:alignment and pname:size requirements similar to
1223e5c31af7Sopenharmony_ci    pname:deviceAddress
1224e5c31af7Sopenharmony_ci****
1225e5c31af7Sopenharmony_ci
1226e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkComputePipelineIndirectBufferInfoNV.adoc[]
1227e5c31af7Sopenharmony_ci--
1228e5c31af7Sopenharmony_ci
1229e5c31af7Sopenharmony_ci[open,refpage='vkCmdUpdatePipelineIndirectBufferNV',desc='Update the indirect compute pipeline\'s metadata',type='protos']
1230e5c31af7Sopenharmony_ci--
1231e5c31af7Sopenharmony_ciTo save a compute pipeline's metadata at a device address call:
1232e5c31af7Sopenharmony_ci
1233e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdUpdatePipelineIndirectBufferNV.adoc[]
1234e5c31af7Sopenharmony_ci
1235e5c31af7Sopenharmony_ci  * pname:commandBuffer is the command buffer into which the command will be
1236e5c31af7Sopenharmony_ci    recorded.
1237e5c31af7Sopenharmony_ci  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
1238e5c31af7Sopenharmony_ci    the type of pipeline whose metadata will be saved.
1239e5c31af7Sopenharmony_ci  * pname:pipeline is the pipeline whose metadata will be saved.
1240e5c31af7Sopenharmony_ci
1241e5c31af7Sopenharmony_cifname:vkCmdUpdatePipelineIndirectBufferNV is only allowed outside of a
1242e5c31af7Sopenharmony_cirender pass.
1243e5c31af7Sopenharmony_ciThis command is treated as a "`transfer`" operation for the purposes of
1244e5c31af7Sopenharmony_cisynchronization barriers.
1245e5c31af7Sopenharmony_ciThe writes to the address must: be synchronized using stages
1246e5c31af7Sopenharmony_ciename:VK_PIPELINE_STAGE_2_COPY_BIT and
1247e5c31af7Sopenharmony_ciename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV and with access masks
1248e5c31af7Sopenharmony_ciename:VK_ACCESS_MEMORY_WRITE_BIT and
1249e5c31af7Sopenharmony_ciename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV respectively before using the
1250e5c31af7Sopenharmony_ciresults in preprocessing.
1251e5c31af7Sopenharmony_ci
1252e5c31af7Sopenharmony_ci.Valid Usage
1253e5c31af7Sopenharmony_ci****
1254e5c31af7Sopenharmony_ci  * [[VUID-vkCmdUpdatePipelineIndirectBufferNV-pipelineBindPoint-09018]]
1255e5c31af7Sopenharmony_ci    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_COMPUTE
1256e5c31af7Sopenharmony_ci  * [[VUID-vkCmdUpdatePipelineIndirectBufferNV-pipeline-09019]]
1257e5c31af7Sopenharmony_ci    pname:pipeline must: have been created with
1258e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV flag set
1259e5c31af7Sopenharmony_ci  * [[VUID-vkCmdUpdatePipelineIndirectBufferNV-pipeline-09020]]
1260e5c31af7Sopenharmony_ci    pname:pipeline must: have been created with
1261e5c31af7Sopenharmony_ci    slink:VkComputePipelineIndirectBufferInfoNV structure specifying a valid
1262e5c31af7Sopenharmony_ci    address where its metadata will be saved
1263e5c31af7Sopenharmony_ci  * [[VUID-vkCmdUpdatePipelineIndirectBufferNV-deviceGeneratedComputePipelines-09021]]
1264e5c31af7Sopenharmony_ci    The <<features-deviceGeneratedComputePipelines,
1265e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
1266e5c31af7Sopenharmony_ci    feature must: be enabled
1267e5c31af7Sopenharmony_ci****
1268e5c31af7Sopenharmony_ci
1269e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCmdUpdatePipelineIndirectBufferNV.adoc[]
1270e5c31af7Sopenharmony_ci--
1271e5c31af7Sopenharmony_ci
1272e5c31af7Sopenharmony_ciendif::VK_NV_device_generated_commands_compute[]
1273e5c31af7Sopenharmony_ci
1274e5c31af7Sopenharmony_ci[[pipelines-graphics]]
1275e5c31af7Sopenharmony_ci== Graphics Pipelines
1276e5c31af7Sopenharmony_ci
1277e5c31af7Sopenharmony_ciGraphics pipelines consist of multiple shader stages, multiple
1278e5c31af7Sopenharmony_cifixed-function pipeline stages, and a pipeline layout.
1279e5c31af7Sopenharmony_ci
1280e5c31af7Sopenharmony_ci[open,refpage='vkCreateGraphicsPipelines',desc='Create graphics pipelines',type='protos']
1281e5c31af7Sopenharmony_ci--
1282e5c31af7Sopenharmony_ci:refpage: vkCreateGraphicsPipelines
1283e5c31af7Sopenharmony_ci:objectnameplural: graphics pipelines
1284e5c31af7Sopenharmony_ci:objectnamecamelcase: graphicsPipeline
1285e5c31af7Sopenharmony_ci:objectcount: pname:createInfoCount
1286e5c31af7Sopenharmony_ci
1287e5c31af7Sopenharmony_ciTo create graphics pipelines, call:
1288e5c31af7Sopenharmony_ci
1289e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCreateGraphicsPipelines.adoc[]
1290e5c31af7Sopenharmony_ci
1291e5c31af7Sopenharmony_ci  * pname:device is the logical device that creates the graphics pipelines.
1292e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
1293e5c31af7Sopenharmony_ci  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
1294e5c31af7Sopenharmony_ci    pipeline caching is disabled; or the handle of a valid
1295e5c31af7Sopenharmony_ci    <<pipelines-cache,pipeline cache>> object, in which case use of that
1296e5c31af7Sopenharmony_ci    cache is enabled for the duration of the command.
1297e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1298e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1299e5c31af7Sopenharmony_ci  * pname:pipelineCache is the handle of a valid <<pipelines-cache,pipeline
1300e5c31af7Sopenharmony_ci    cache>> object.
1301e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1302e5c31af7Sopenharmony_ci  * pname:createInfoCount is the length of the pname:pCreateInfos and
1303e5c31af7Sopenharmony_ci    pname:pPipelines arrays.
1304e5c31af7Sopenharmony_ci  * pname:pCreateInfos is a pointer to an array of
1305e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineCreateInfo structures.
1306e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
1307e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
1308e5c31af7Sopenharmony_ci  * pname:pPipelines is a pointer to an array of slink:VkPipeline handles in
1309e5c31af7Sopenharmony_ci    which the resulting graphics pipeline objects are returned.
1310e5c31af7Sopenharmony_ci
1311e5c31af7Sopenharmony_ciThe slink:VkGraphicsPipelineCreateInfo structure includes an array of
1312e5c31af7Sopenharmony_cislink:VkPipelineShaderStageCreateInfo structures for each of the desired
1313e5c31af7Sopenharmony_ciactive shader stages, as well as creation information for all relevant
1314e5c31af7Sopenharmony_cifixed-function stages, and a pipeline layout.
1315e5c31af7Sopenharmony_ci
1316e5c31af7Sopenharmony_ciPipelines are created and returned as described for <<pipelines-multiple,
1317e5c31af7Sopenharmony_ciMultiple Pipeline Creation>>.
1318e5c31af7Sopenharmony_ci
1319e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1320e5c31af7Sopenharmony_ciIf a pipeline creation fails due to:
1321e5c31af7Sopenharmony_ci
1322e5c31af7Sopenharmony_ci  * The identified pipeline not being present in pname:pipelineCache
1323e5c31af7Sopenharmony_ci  * The pname:pNext chain not including a slink:VkPipelineOfflineCreateInfo
1324e5c31af7Sopenharmony_ci    structure
1325e5c31af7Sopenharmony_ci
1326e5c31af7Sopenharmony_cithe operation will continue as specified in <<pipelines-multiple, Multiple
1327e5c31af7Sopenharmony_ciPipeline Creation>> and the command will return
1328e5c31af7Sopenharmony_ciename:VK_ERROR_NO_PIPELINE_MATCH.
1329e5c31af7Sopenharmony_ciifdef::hidden[]
1330e5c31af7Sopenharmony_ci// tag::scdeviation[]
1331e5c31af7Sopenharmony_ci  * flink:vkCreateGraphicsPipelines returns ename:VK_ERROR_NO_PIPELINE_MATCH
1332e5c31af7Sopenharmony_ci    if the slink:VkGraphicsPipelineCreateInfo::pname:pNext chain does not
1333e5c31af7Sopenharmony_ci    include a valid slink:VkPipelineOfflineCreateInfo structure <<SCID-1>>.
1334e5c31af7Sopenharmony_ci// end::scdeviation[]
1335e5c31af7Sopenharmony_ciendif::hidden[]
1336e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1337e5c31af7Sopenharmony_ci
1338e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
1339e5c31af7Sopenharmony_ci
1340e5c31af7Sopenharmony_ci.Valid Usage
1341e5c31af7Sopenharmony_ci****
1342e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
1343e5c31af7Sopenharmony_ci  * [[VUID-vkCreateGraphicsPipelines-flags-00720]]
1344e5c31af7Sopenharmony_ci    If the pname:flags member of any element of pname:pCreateInfos contains
1345e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
1346e5c31af7Sopenharmony_ci    pname:basePipelineIndex member of that same element is not `-1`,
1347e5c31af7Sopenharmony_ci    pname:basePipelineIndex must: be less than the index into
1348e5c31af7Sopenharmony_ci    pname:pCreateInfos that corresponds to that element
1349e5c31af7Sopenharmony_ci  * [[VUID-vkCreateGraphicsPipelines-flags-00721]]
1350e5c31af7Sopenharmony_ci    If the pname:flags member of any element of pname:pCreateInfos contains
1351e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
1352e5c31af7Sopenharmony_ci    must: have been created with the
1353e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
1354e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1355e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
1356e5c31af7Sopenharmony_ci  * [[VUID-vkCreateGraphicsPipelines-pipelineCache-02876]]
1357e5c31af7Sopenharmony_ci    If pname:pipelineCache was created with
1358e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access
1359e5c31af7Sopenharmony_ci    to pname:pipelineCache must: be
1360e5c31af7Sopenharmony_ci    <<fundamentals-threadingbehavior,externally synchronized>>
1361e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
1362e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
1363e5c31af7Sopenharmony_ci****
1364e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1365e5c31af7Sopenharmony_ciifdef::hidden[]
1366e5c31af7Sopenharmony_ci// tag::scdeviation[]
1367e5c31af7Sopenharmony_ci  * flink:vkCreateGraphicsPipelines::pname:pipelineCache must: not be
1368e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE <<SCID-1>>, <<SCID-8>>.
1369e5c31af7Sopenharmony_ci// end::scdeviation[]
1370e5c31af7Sopenharmony_ciendif::hidden[]
1371e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1372e5c31af7Sopenharmony_ci
1373e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
1374e5c31af7Sopenharmony_ci[NOTE]
1375e5c31af7Sopenharmony_ci.Note
1376e5c31af7Sopenharmony_ci====
1377e5c31af7Sopenharmony_ciAn implicit cache may be provided by the implementation or a layer.
1378e5c31af7Sopenharmony_ciFor this reason, it is still valid to set
1379e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT on
1380e5c31af7Sopenharmony_cipname:flags for any element of pname:pCreateInfos while passing
1381e5c31af7Sopenharmony_cidlink:VK_NULL_HANDLE for pname:pipelineCache.
1382e5c31af7Sopenharmony_ci====
1383e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
1384e5c31af7Sopenharmony_ci
1385e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCreateGraphicsPipelines.adoc[]
1386e5c31af7Sopenharmony_ci--
1387e5c31af7Sopenharmony_ci
1388e5c31af7Sopenharmony_ci[open,refpage='VkGraphicsPipelineCreateInfo',desc='Structure specifying parameters of a newly created graphics pipeline',type='structs']
1389e5c31af7Sopenharmony_ci--
1390e5c31af7Sopenharmony_ci:refpage: VkGraphicsPipelineCreateInfo
1391e5c31af7Sopenharmony_ci
1392e5c31af7Sopenharmony_ciThe sname:VkGraphicsPipelineCreateInfo structure is defined as:
1393e5c31af7Sopenharmony_ci
1394e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkGraphicsPipelineCreateInfo.adoc[]
1395e5c31af7Sopenharmony_ci
1396e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
1397e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
1398e5c31af7Sopenharmony_ci    structure.
1399e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
1400e5c31af7Sopenharmony_ci    how the pipeline will be generated.
1401e5c31af7Sopenharmony_ci  * pname:stageCount is the number of entries in the pname:pStages array.
1402e5c31af7Sopenharmony_ci  * pname:pStages is a pointer to an array of pname:stageCount
1403e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageCreateInfo structures describing the set of
1404e5c31af7Sopenharmony_ci    the shader stages to be included in the graphics pipeline.
1405e5c31af7Sopenharmony_ci  * pname:pVertexInputState is a pointer to a
1406e5c31af7Sopenharmony_ci    slink:VkPipelineVertexInputStateCreateInfo structure.
1407e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1408e5c31af7Sopenharmony_ci    It is ignored if the pipeline includes a mesh shader stage.
1409e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1410e5c31af7Sopenharmony_ciifdef::VK_EXT_vertex_input_dynamic_state[]
1411e5c31af7Sopenharmony_ci    It can: be `NULL` if the pipeline is created with the
1412e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state set.
1413e5c31af7Sopenharmony_ciendif::VK_EXT_vertex_input_dynamic_state[]
1414e5c31af7Sopenharmony_ci  * pname:pInputAssemblyState is a pointer to a
1415e5c31af7Sopenharmony_ci    slink:VkPipelineInputAssemblyStateCreateInfo structure which determines
1416e5c31af7Sopenharmony_ci    input assembly behavior for vertex shading, as described in <<drawing,
1417e5c31af7Sopenharmony_ci    Drawing Commands>>.
1418e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1419e5c31af7Sopenharmony_ci    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
1420e5c31af7Sopenharmony_ci    can: be `NULL` if the pipeline is created with both
1421e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, and
1422e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic states set and
1423e5c31af7Sopenharmony_ci    <<limits-dynamicPrimitiveTopologyUnrestricted,
1424e5c31af7Sopenharmony_ci    pname:dynamicPrimitiveTopologyUnrestricted>> is ename:VK_TRUE.
1425e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1426e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1427e5c31af7Sopenharmony_ci    It is ignored if the pipeline includes a mesh shader stage.
1428e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1429e5c31af7Sopenharmony_ci  * pname:pTessellationState is a pointer to a
1430e5c31af7Sopenharmony_ci    slink:VkPipelineTessellationStateCreateInfo structure defining
1431e5c31af7Sopenharmony_ci    tessellation state used by tessellation shaders.
1432e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state2[]
1433e5c31af7Sopenharmony_ci    It can: be `NULL` if the pipeline is created with the
1434e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state set.
1435e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state2[]
1436e5c31af7Sopenharmony_ci  * pname:pViewportState is a pointer to a
1437e5c31af7Sopenharmony_ci    slink:VkPipelineViewportStateCreateInfo structure defining viewport
1438e5c31af7Sopenharmony_ci    state used when rasterization is enabled.
1439e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1440e5c31af7Sopenharmony_ci    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
1441e5c31af7Sopenharmony_ci    can: be `NULL` if the pipeline is created with both
1442e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, and
1443e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic states set.
1444e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1445e5c31af7Sopenharmony_ci  * pname:pRasterizationState is a pointer to a
1446e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateCreateInfo structure defining
1447e5c31af7Sopenharmony_ci    rasterization state.
1448e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1449e5c31af7Sopenharmony_ci    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
1450e5c31af7Sopenharmony_ci    can: be `NULL` if the pipeline is created with all of
1451e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT,
1452e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE,
1453e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT,
1454e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_CULL_MODE, ename:VK_DYNAMIC_STATE_FRONT_FACE,
1455e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE,
1456e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BIAS, and ename:VK_DYNAMIC_STATE_LINE_WIDTH
1457e5c31af7Sopenharmony_ci    dynamic states set.
1458e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1459e5c31af7Sopenharmony_ci  * pname:pMultisampleState is a pointer to a
1460e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo structure defining
1461e5c31af7Sopenharmony_ci    multisample state used when rasterization is enabled.
1462e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1463e5c31af7Sopenharmony_ci    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
1464e5c31af7Sopenharmony_ci    can: be `NULL` if the pipeline is created with all of
1465e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
1466e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, and
1467e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states set,
1468e5c31af7Sopenharmony_ci    and either <<features-alphaToOne,alphaToOne>> is disabled on the device
1469e5c31af7Sopenharmony_ci    or ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is set, in which case
1470e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo::pname:sampleShadingEnable is
1471e5c31af7Sopenharmony_ci    assumed to be ename:VK_FALSE.
1472e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1473e5c31af7Sopenharmony_ci  * pname:pDepthStencilState is a pointer to a
1474e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo structure defining
1475e5c31af7Sopenharmony_ci    depth/stencil state used when rasterization is enabled for depth or
1476e5c31af7Sopenharmony_ci    stencil attachments accessed during rendering.
1477e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1478e5c31af7Sopenharmony_ci    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
1479e5c31af7Sopenharmony_ci    can: be `NULL` if the pipeline is created with all of
1480e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
1481e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
1482e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
1483e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
1484e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
1485e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_OP, and
1486e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states set.
1487e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1488e5c31af7Sopenharmony_ci  * pname:pColorBlendState is a pointer to a
1489e5c31af7Sopenharmony_ci    slink:VkPipelineColorBlendStateCreateInfo structure defining color blend
1490e5c31af7Sopenharmony_ci    state used when rasterization is enabled for any color attachments
1491e5c31af7Sopenharmony_ci    accessed during rendering.
1492e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1493e5c31af7Sopenharmony_ci    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
1494e5c31af7Sopenharmony_ci    can: be `NULL` if the pipeline is created with all of
1495e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT,
1496e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT,
1497e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
1498e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT,
1499e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and
1500e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic states set.
1501e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1502e5c31af7Sopenharmony_ci  * pname:pDynamicState is a pointer to a
1503e5c31af7Sopenharmony_ci    slink:VkPipelineDynamicStateCreateInfo structure defining which
1504e5c31af7Sopenharmony_ci    properties of the pipeline state object are dynamic and can: be changed
1505e5c31af7Sopenharmony_ci    independently of the pipeline state.
1506e5c31af7Sopenharmony_ci    This can: be `NULL`, which means no state in the pipeline is considered
1507e5c31af7Sopenharmony_ci    dynamic.
1508e5c31af7Sopenharmony_ci  * pname:layout is the description of binding locations used by both the
1509e5c31af7Sopenharmony_ci    pipeline and descriptor sets used with the pipeline.
1510e5c31af7Sopenharmony_ci  * pname:renderPass is a handle to a render pass object describing the
1511e5c31af7Sopenharmony_ci    environment in which the pipeline will be used.
1512e5c31af7Sopenharmony_ci    The pipeline must: only be used with a render pass instance compatible
1513e5c31af7Sopenharmony_ci    with the one provided.
1514e5c31af7Sopenharmony_ci    See <<renderpass-compatibility,Render Pass Compatibility>> for more
1515e5c31af7Sopenharmony_ci    information.
1516e5c31af7Sopenharmony_ci  * pname:subpass is the index of the subpass in the render pass where this
1517e5c31af7Sopenharmony_ci    pipeline will be used.
1518e5c31af7Sopenharmony_ci  * pname:basePipelineHandle is a pipeline to derive from.
1519e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1520e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
1521e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1522e5c31af7Sopenharmony_ci  * pname:basePipelineIndex is an index into the pname:pCreateInfos
1523e5c31af7Sopenharmony_ci    parameter to use as a pipeline to derive from.
1524e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1525e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
1526e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1527e5c31af7Sopenharmony_ci
1528e5c31af7Sopenharmony_ciThe parameters pname:basePipelineHandle and pname:basePipelineIndex are
1529e5c31af7Sopenharmony_cidescribed in more detail in <<pipelines-pipeline-derivatives,Pipeline
1530e5c31af7Sopenharmony_ciDerivatives>>.
1531e5c31af7Sopenharmony_ci
1532e5c31af7Sopenharmony_ciifdef::VK_NV_glsl_shader[]
1533e5c31af7Sopenharmony_ciIf any shader stage fails to compile,
1534e5c31af7Sopenharmony_ciifdef::VK_EXT_debug_report[]
1535e5c31af7Sopenharmony_cithe compile log will be reported back to the application, and
1536e5c31af7Sopenharmony_ciendif::VK_EXT_debug_report[]
1537e5c31af7Sopenharmony_ciename:VK_ERROR_INVALID_SHADER_NV will be generated.
1538e5c31af7Sopenharmony_ciendif::VK_NV_glsl_shader[]
1539e5c31af7Sopenharmony_ci
1540e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1541e5c31af7Sopenharmony_ci[NOTE]
1542e5c31af7Sopenharmony_ci.Note
1543e5c31af7Sopenharmony_ci====
1544e5c31af7Sopenharmony_ciWith `apiext:VK_EXT_extended_dynamic_state3`, it is possible that many of
1545e5c31af7Sopenharmony_cithe sname:VkGraphicsPipelineCreateInfo members above can: be `NULL` because
1546e5c31af7Sopenharmony_ciall their state is dynamic and therefore ignored.
1547e5c31af7Sopenharmony_ciThis is optional so the application can: still use a valid pointer if it
1548e5c31af7Sopenharmony_cineeds to set the pname:pNext or pname:flags fields to specify state for
1549e5c31af7Sopenharmony_ciother extensions.
1550e5c31af7Sopenharmony_ci====
1551e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1552e5c31af7Sopenharmony_ci
1553e5c31af7Sopenharmony_ci[[pipelines-graphics-subsets]]
1554e5c31af7Sopenharmony_ciThe state required for a graphics pipeline is divided into
1555e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-vertex-input, vertex input state>>,
1556e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
1557e5c31af7Sopenharmony_cistate>>, <<pipelines-graphics-subsets-fragment-shader,fragment shader
1558e5c31af7Sopenharmony_cistate>>, and <<pipelines-graphics-subsets-fragment-output,fragment output
1559e5c31af7Sopenharmony_cistate>>.
1560e5c31af7Sopenharmony_ci
1561e5c31af7Sopenharmony_ci[[pipelines-graphics-subsets-vertex-input]]
1562e5c31af7Sopenharmony_ci.Vertex Input State
1563e5c31af7Sopenharmony_ciVertex input state is defined by:
1564e5c31af7Sopenharmony_ci
1565e5c31af7Sopenharmony_ci  * slink:VkPipelineVertexInputStateCreateInfo
1566e5c31af7Sopenharmony_ci  * slink:VkPipelineInputAssemblyStateCreateInfo
1567e5c31af7Sopenharmony_ci
1568e5c31af7Sopenharmony_ciifndef::VK_EXT_mesh_shader[]
1569e5c31af7Sopenharmony_ciThis state must: be specified to create a
1570e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
1571e5c31af7Sopenharmony_ciendif::VK_EXT_mesh_shader[]
1572e5c31af7Sopenharmony_ci
1573e5c31af7Sopenharmony_ciifdef::VK_EXT_mesh_shader[]
1574e5c31af7Sopenharmony_ciIf
1575e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1576e5c31af7Sopenharmony_cithis pipeline specifies
1577e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>>
1578e5c31af7Sopenharmony_cieither directly or by including it as a pipeline library and its
1579e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1580e5c31af7Sopenharmony_cipname:pStages includes a vertex shader, this state must: be specified to
1581e5c31af7Sopenharmony_cicreate a <<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
1582e5c31af7Sopenharmony_ciendif::VK_EXT_mesh_shader[]
1583e5c31af7Sopenharmony_ci
1584e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1585e5c31af7Sopenharmony_ciIf a pipeline includes
1586e5c31af7Sopenharmony_ciename:VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT in
1587e5c31af7Sopenharmony_cislink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags either explicitly
1588e5c31af7Sopenharmony_cior as a default, and either the conditions requiring this state for a
1589e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-complete,complete graphics pipeline>> are met
1590e5c31af7Sopenharmony_cior this pipeline does not specify
1591e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>> in
1592e5c31af7Sopenharmony_ciany way, that pipeline must: specify this state directly.
1593e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1594e5c31af7Sopenharmony_ci
1595e5c31af7Sopenharmony_ci
1596e5c31af7Sopenharmony_ci[[pipelines-graphics-subsets-pre-rasterization]]
1597e5c31af7Sopenharmony_ci.Pre-Rasterization Shader State
1598e5c31af7Sopenharmony_ciPre-rasterization shader state is defined by:
1599e5c31af7Sopenharmony_ci
1600e5c31af7Sopenharmony_ci  * slink:VkPipelineShaderStageCreateInfo entries for:
1601e5c31af7Sopenharmony_ci  ** Vertex shaders
1602e5c31af7Sopenharmony_ci  ** Tessellation control shaders
1603e5c31af7Sopenharmony_ci  ** Tessellation evaluation shaders
1604e5c31af7Sopenharmony_ci  ** Geometry shaders
1605e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1606e5c31af7Sopenharmony_ci  ** Task shaders
1607e5c31af7Sopenharmony_ci  ** Mesh shaders
1608e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1609e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1610e5c31af7Sopenharmony_ci  * Within the slink:VkPipelineLayout, all descriptor sets with
1611e5c31af7Sopenharmony_ci    pre-rasterization shader bindings if
1612e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT was specified.
1613e5c31af7Sopenharmony_ci  ** If ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT was not
1614e5c31af7Sopenharmony_ci     specified, the full pipeline layout must be specified.
1615e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1616e5c31af7Sopenharmony_ciifndef::VK_EXT_graphics_pipeline_library[]
1617e5c31af7Sopenharmony_ci  * Within the slink:VkPipelineLayout, the full pipeline layout must be
1618e5c31af7Sopenharmony_ci    specified.
1619e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1620e5c31af7Sopenharmony_ci  * slink:VkPipelineViewportStateCreateInfo
1621e5c31af7Sopenharmony_ci  * slink:VkPipelineRasterizationStateCreateInfo
1622e5c31af7Sopenharmony_ci  * slink:VkPipelineTessellationStateCreateInfo
1623e5c31af7Sopenharmony_ci  * slink:VkRenderPass and pname:subpass parameter
1624e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
1625e5c31af7Sopenharmony_ci  * The pname:viewMask parameter of slink:VkPipelineRenderingCreateInfo
1626e5c31af7Sopenharmony_ci    (formats are ignored)
1627e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
1628e5c31af7Sopenharmony_ciifdef::VK_EXT_discard_rectangles[]
1629e5c31af7Sopenharmony_ci  * slink:VkPipelineDiscardRectangleStateCreateInfoEXT
1630e5c31af7Sopenharmony_ciendif::VK_EXT_discard_rectangles[]
1631e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
1632e5c31af7Sopenharmony_ci  * slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
1633e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
1634e5c31af7Sopenharmony_ci
1635e5c31af7Sopenharmony_ciThis state must: be specified to create a
1636e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
1637e5c31af7Sopenharmony_ci
1638e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1639e5c31af7Sopenharmony_ciIf either the pname:pNext chain includes a
1640e5c31af7Sopenharmony_cislink:VkGraphicsPipelineLibraryCreateInfoEXT structure with
1641e5c31af7Sopenharmony_ciename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT
1642e5c31af7Sopenharmony_ciincluded in pname:flags, or it is not specified and would default to include
1643e5c31af7Sopenharmony_cithat value, this state must: be specified in the pipeline.
1644e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1645e5c31af7Sopenharmony_ci
1646e5c31af7Sopenharmony_ci
1647e5c31af7Sopenharmony_ci[[pipelines-graphics-subsets-fragment-shader]]
1648e5c31af7Sopenharmony_ci.Fragment Shader State
1649e5c31af7Sopenharmony_ciFragment shader state is defined by:
1650e5c31af7Sopenharmony_ci
1651e5c31af7Sopenharmony_ci  * A slink:VkPipelineShaderStageCreateInfo entry for the fragment shader
1652e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1653e5c31af7Sopenharmony_ci  * Within the slink:VkPipelineLayout, all descriptor sets with fragment
1654e5c31af7Sopenharmony_ci    shader bindings if
1655e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT was specified.
1656e5c31af7Sopenharmony_ci  ** If ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT was not
1657e5c31af7Sopenharmony_ci     specified, the full pipeline layout must be specified.
1658e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1659e5c31af7Sopenharmony_ciifndef::VK_EXT_graphics_pipeline_library[]
1660e5c31af7Sopenharmony_ci  * Within the slink:VkPipelineLayout, the full pipeline layout must be
1661e5c31af7Sopenharmony_ci    specified.
1662e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1663e5c31af7Sopenharmony_ci  * slink:VkPipelineMultisampleStateCreateInfo
1664e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
1665e5c31af7Sopenharmony_ci    if <<primsrast-sampleshading, sample shading>> is enabled or
1666e5c31af7Sopenharmony_ci    pname:renderpass is not dlink:VK_NULL_HANDLE
1667e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
1668e5c31af7Sopenharmony_ci  * slink:VkPipelineDepthStencilStateCreateInfo
1669e5c31af7Sopenharmony_ci  * slink:VkRenderPass and pname:subpass parameter
1670e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
1671e5c31af7Sopenharmony_ci  * The pname:viewMask parameter of slink:VkPipelineRenderingCreateInfo
1672e5c31af7Sopenharmony_ci    (formats are ignored)
1673e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
1674e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
1675e5c31af7Sopenharmony_ci  * slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
1676e5c31af7Sopenharmony_ciifdef::VK_NV_fragment_shading_rate_enums[]
1677e5c31af7Sopenharmony_ci  * slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV
1678e5c31af7Sopenharmony_ciendif::VK_NV_fragment_shading_rate_enums[]
1679e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
1680e5c31af7Sopenharmony_ciifdef::VK_NV_representative_fragment_test[]
1681e5c31af7Sopenharmony_ci  * slink:VkPipelineRepresentativeFragmentTestStateCreateInfoNV
1682e5c31af7Sopenharmony_ciendif::VK_NV_representative_fragment_test[]
1683e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
1684e5c31af7Sopenharmony_ci  * Inclusion/omission of the
1685e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
1686e5c31af7Sopenharmony_ci    flag
1687e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
1688e5c31af7Sopenharmony_ciifdef::VK_EXT_fragment_density_map[]
1689e5c31af7Sopenharmony_ci  * Inclusion/omission of the
1690e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
1691e5c31af7Sopenharmony_ci    flag
1692e5c31af7Sopenharmony_ciendif::VK_EXT_fragment_density_map[]
1693e5c31af7Sopenharmony_ci
1694e5c31af7Sopenharmony_ciIf
1695e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1696e5c31af7Sopenharmony_cia pipeline specifies
1697e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>>
1698e5c31af7Sopenharmony_cieither directly or by including it as a pipeline library and
1699e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1700e5c31af7Sopenharmony_cipname:rasterizerDiscardEnable is set to ename:VK_FALSE
1701e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
1702e5c31af7Sopenharmony_cior ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE is used,
1703e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
1704e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1705e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1706e5c31af7Sopenharmony_cithis state must: be specified to create a
1707e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
1708e5c31af7Sopenharmony_ci
1709e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1710e5c31af7Sopenharmony_ciIf a pipeline includes
1711e5c31af7Sopenharmony_ciename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT in
1712e5c31af7Sopenharmony_cislink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags either explicitly
1713e5c31af7Sopenharmony_cior as a default, and either the conditions requiring this state for a
1714e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-complete,complete graphics pipeline>> are met
1715e5c31af7Sopenharmony_cior this pipeline does not specify
1716e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>> in
1717e5c31af7Sopenharmony_ciany way, that pipeline must: specify this state directly.
1718e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1719e5c31af7Sopenharmony_ci
1720e5c31af7Sopenharmony_ci
1721e5c31af7Sopenharmony_ci[[pipelines-graphics-subsets-fragment-output]]
1722e5c31af7Sopenharmony_ci.Fragment Output State
1723e5c31af7Sopenharmony_ciFragment output state is defined by:
1724e5c31af7Sopenharmony_ci
1725e5c31af7Sopenharmony_ci  * slink:VkPipelineColorBlendStateCreateInfo
1726e5c31af7Sopenharmony_ci  * slink:VkRenderPass and pname:subpass parameter
1727e5c31af7Sopenharmony_ci  * slink:VkPipelineMultisampleStateCreateInfo
1728e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
1729e5c31af7Sopenharmony_ci  * slink:VkPipelineRenderingCreateInfo
1730e5c31af7Sopenharmony_ciifdef::VK_AMD_mixed_attachment_samples[]
1731e5c31af7Sopenharmony_ci  * slink:VkAttachmentSampleCountInfoAMD
1732e5c31af7Sopenharmony_ciendif::VK_AMD_mixed_attachment_samples[]
1733e5c31af7Sopenharmony_ciifdef::VK_NV_framebuffer_mixed_samples[]
1734e5c31af7Sopenharmony_ci  * slink:VkAttachmentSampleCountInfoNV
1735e5c31af7Sopenharmony_ciendif::VK_NV_framebuffer_mixed_samples[]
1736e5c31af7Sopenharmony_ciifdef::VK_ANDROID_external_format_resolve[]
1737e5c31af7Sopenharmony_ci  * slink:VkExternalFormatANDROID
1738e5c31af7Sopenharmony_ciendif::VK_ANDROID_external_format_resolve[]
1739e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
1740e5c31af7Sopenharmony_ciifdef::VK_EXT_attachment_feedback_loop_layout[]
1741e5c31af7Sopenharmony_ci  * Inclusion/omission of the
1742e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT and
1743e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
1744e5c31af7Sopenharmony_ci    flags
1745e5c31af7Sopenharmony_ciendif::VK_EXT_attachment_feedback_loop_layout[]
1746e5c31af7Sopenharmony_ci
1747e5c31af7Sopenharmony_ciIf
1748e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1749e5c31af7Sopenharmony_cia pipeline specifies
1750e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>>
1751e5c31af7Sopenharmony_cieither directly or by including it as a pipeline library and
1752e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1753e5c31af7Sopenharmony_cipname:rasterizerDiscardEnable is set to ename:VK_FALSE
1754e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
1755e5c31af7Sopenharmony_cior ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE is used,
1756e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
1757e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1758e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1759e5c31af7Sopenharmony_cithis state must: be specified to create a
1760e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
1761e5c31af7Sopenharmony_ci
1762e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1763e5c31af7Sopenharmony_ciIf a pipeline includes
1764e5c31af7Sopenharmony_ciename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT in
1765e5c31af7Sopenharmony_cislink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags either explicitly
1766e5c31af7Sopenharmony_cior as a default, and either the conditions requiring this state for a
1767e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-complete,complete graphics pipeline>> are met
1768e5c31af7Sopenharmony_cior this pipeline does not specify
1769e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>> in
1770e5c31af7Sopenharmony_ciany way, that pipeline must: specify this state directly.
1771e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1772e5c31af7Sopenharmony_ci
1773e5c31af7Sopenharmony_ci
1774e5c31af7Sopenharmony_ci[[pipelines-graphics-subsets-dynamic-state]]
1775e5c31af7Sopenharmony_ci.Dynamic State
1776e5c31af7Sopenharmony_ciDynamic state values set via pname:pDynamicState must: be ignored if the
1777e5c31af7Sopenharmony_cistate they correspond to is not otherwise statically set by one of the state
1778e5c31af7Sopenharmony_cisubsets used to create the pipeline.
1779e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1780e5c31af7Sopenharmony_ciAdditionally, setting dynamic state values must: not modify whether state in
1781e5c31af7Sopenharmony_cia linked library is static or dynamic; this is set and unchangeable when the
1782e5c31af7Sopenharmony_cilibrary is created.
1783e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1784e5c31af7Sopenharmony_ciFor example, if a pipeline only included
1785e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
1786e5c31af7Sopenharmony_cistate>>, then any dynamic state value corresponding to depth or stencil
1787e5c31af7Sopenharmony_citesting has no effect.
1788e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1789e5c31af7Sopenharmony_ciAny linked library that has dynamic state enabled that same dynamic state
1790e5c31af7Sopenharmony_cimust: also be enabled in all the other linked libraries to which that
1791e5c31af7Sopenharmony_cidynamic state applies.
1792e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1793e5c31af7Sopenharmony_ci
1794e5c31af7Sopenharmony_ci[[pipelines-graphics-subsets-complete]]
1795e5c31af7Sopenharmony_ci.Complete Graphics Pipelines
1796e5c31af7Sopenharmony_ci
1797e5c31af7Sopenharmony_ciA complete graphics pipeline always includes
1798e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
1799e5c31af7Sopenharmony_cistate>>, with other subsets included depending on that state as specified in
1800e5c31af7Sopenharmony_cithe above sections.
1801e5c31af7Sopenharmony_ci
1802e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
1803e5c31af7Sopenharmony_ci.Graphics Pipeline Library Layouts
1804e5c31af7Sopenharmony_ci
1805e5c31af7Sopenharmony_ciIf different subsets are linked together with pipeline layouts created with
1806e5c31af7Sopenharmony_ciename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, the final
1807e5c31af7Sopenharmony_cieffective pipeline layout is effectively the union of the linked pipeline
1808e5c31af7Sopenharmony_cilayouts.
1809e5c31af7Sopenharmony_ciWhen binding descriptor sets for this pipeline, the pipeline layout used
1810e5c31af7Sopenharmony_cimust: be compatible with this union.
1811e5c31af7Sopenharmony_ciThis pipeline layout can: be overridden when linking with
1812e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT by providing a
1813e5c31af7Sopenharmony_cislink:VkPipelineLayout that is <<descriptorsets-compatibility,compatible>>
1814e5c31af7Sopenharmony_ciwith this union other than
1815e5c31af7Sopenharmony_ciename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, or when linking
1816e5c31af7Sopenharmony_ciwithout ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT by providing
1817e5c31af7Sopenharmony_cia slink:VkPipelineLayout that is fully
1818e5c31af7Sopenharmony_ci<<descriptorsets-compatibility,compatible>> with this union.
1819e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
1820e5c31af7Sopenharmony_ci
1821e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
1822e5c31af7Sopenharmony_ciIf a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
1823e5c31af7Sopenharmony_cipname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
1824e5c31af7Sopenharmony_cifrom that structure is used instead of pname:flags from this structure.
1825e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
1826e5c31af7Sopenharmony_ci
1827e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
1828e5c31af7Sopenharmony_ciIn Vulkan SC, the pipeline compilation process occurs
1829e5c31af7Sopenharmony_ci<<pipelines-offline-compilation,offline>> and the pname:pStages are not
1830e5c31af7Sopenharmony_cineeded at runtime and may: be omitted.
1831e5c31af7Sopenharmony_ciIf omitted, pname:stageCount must: be set to `0` and pname:pStages must: be
1832e5c31af7Sopenharmony_ci`NULL`.
1833e5c31af7Sopenharmony_ciIf provided, the values must: match the values specified to the offline
1834e5c31af7Sopenharmony_cicompiler.
1835e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
1836e5c31af7Sopenharmony_ci
1837e5c31af7Sopenharmony_ci.Valid Usage
1838e5c31af7Sopenharmony_ci****
1839e5c31af7Sopenharmony_ci:pipelineType: graphics
1840e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
1841e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-stage-02096]]
1842e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1843e5c31af7Sopenharmony_ci    pre-rasterization shader state>> the pname:stage member of one element
1844e5c31af7Sopenharmony_ci    of pname:pStages must: be ename:VK_SHADER_STAGE_VERTEX_BIT
1845e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1846e5c31af7Sopenharmony_ci    or ename:VK_SHADER_STAGE_MESH_BIT_EXT
1847e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1848e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1849e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02095]]
1850e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1851e5c31af7Sopenharmony_ci    pre-rasterization shader state>> the geometric shader stages provided in
1852e5c31af7Sopenharmony_ci    pname:pStages must: be either from the mesh shading pipeline
1853e5c31af7Sopenharmony_ci    (pname:stage is ename:VK_SHADER_STAGE_TASK_BIT_EXT or
1854e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_MESH_BIT_EXT) or from the primitive shading
1855e5c31af7Sopenharmony_ci    pipeline (pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT,
1856e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
1857e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or
1858e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_GEOMETRY_BIT)
1859e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
1860e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader+VK_EXT_mesh_shader[]
1861e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-TaskNV-07063]]
1862e5c31af7Sopenharmony_ci    The shader stages for ename:VK_SHADER_STAGE_TASK_BIT_EXT or
1863e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_MESH_BIT_EXT must: use either the code:TaskNV and
1864e5c31af7Sopenharmony_ci    code:MeshNV {ExecutionModel} or the code:TaskEXT and code:MeshEXT
1865e5c31af7Sopenharmony_ci    {ExecutionModel}, but must: not use both
1866e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader+VK_EXT_mesh_shader[]
1867e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00729]]
1868e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1869e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes a
1870e5c31af7Sopenharmony_ci    tessellation control shader stage, it must: include a tessellation
1871e5c31af7Sopenharmony_ci    evaluation shader stage
1872e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00730]]
1873e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1874e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes a
1875e5c31af7Sopenharmony_ci    tessellation evaluation shader stage, it must: include a tessellation
1876e5c31af7Sopenharmony_ci    control shader stage
1877e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-09022]]
1878e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1879e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes a
1880e5c31af7Sopenharmony_ci    tessellation control shader stage,
1881e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1882e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled
1883e5c31af7Sopenharmony_ci    or the ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state is
1884e5c31af7Sopenharmony_ci    not set,
1885e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1886e5c31af7Sopenharmony_ci    pname:pTessellationState must: be a valid pointer to a valid
1887e5c31af7Sopenharmony_ci    slink:VkPipelineTessellationStateCreateInfo structure
1888e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1889e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pTessellationState-09023]]
1890e5c31af7Sopenharmony_ci    If pname:pTessellationState is not `NULL` it must: be a pointer to a
1891e5c31af7Sopenharmony_ci    valid slink:VkPipelineTessellationStateCreateInfo structure
1892e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1893e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00732]]
1894e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1895e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes tessellation
1896e5c31af7Sopenharmony_ci    shader stages, the shader code of at least one stage must: contain an
1897e5c31af7Sopenharmony_ci    code:OpExecutionMode instruction specifying the type of subdivision in
1898e5c31af7Sopenharmony_ci    the pipeline
1899e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00733]]
1900e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1901e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes tessellation
1902e5c31af7Sopenharmony_ci    shader stages, and the shader code of both stages contain an
1903e5c31af7Sopenharmony_ci    code:OpExecutionMode instruction specifying the type of subdivision in
1904e5c31af7Sopenharmony_ci    the pipeline, they must: both specify the same subdivision mode
1905e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00734]]
1906e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1907e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes tessellation
1908e5c31af7Sopenharmony_ci    shader stages, the shader code of at least one stage must: contain an
1909e5c31af7Sopenharmony_ci    code:OpExecutionMode instruction specifying the output patch size in the
1910e5c31af7Sopenharmony_ci    pipeline
1911e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00735]]
1912e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1913e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes tessellation
1914e5c31af7Sopenharmony_ci    shader stages, and the shader code of both contain an
1915e5c31af7Sopenharmony_ci    code:OpExecutionMode instruction specifying the out patch size in the
1916e5c31af7Sopenharmony_ci    pipeline, they must: both specify the same patch size
1917e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-08888]]
1918e5c31af7Sopenharmony_ci    If the pipeline is being created with
1919e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
1920e5c31af7Sopenharmony_ci    state>> and <<pipelines-graphics-subsets-vertex-input, vertex input
1921e5c31af7Sopenharmony_ci    state>> and pname:pStages includes tessellation shader stages,
1922e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1923e5c31af7Sopenharmony_ci    and either ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is
1924e5c31af7Sopenharmony_ci    not enabled or
1925e5c31af7Sopenharmony_ci    <<limits-dynamicPrimitiveTopologyUnrestricted,pname:dynamicPrimitiveTopologyUnrestricted>>
1926e5c31af7Sopenharmony_ci    is ename:VK_FALSE,
1927e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1928e5c31af7Sopenharmony_ci    the pname:topology member of pname:pInputAssembly must: be
1929e5c31af7Sopenharmony_ci    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
1930e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-topology-08889]]
1931e5c31af7Sopenharmony_ci    If the pipeline is being created with
1932e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
1933e5c31af7Sopenharmony_ci    state>> and <<pipelines-graphics-subsets-vertex-input, vertex input
1934e5c31af7Sopenharmony_ci    state>> and the pname:topology member of pname:pInputAssembly is
1935e5c31af7Sopenharmony_ci    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
1936e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1937e5c31af7Sopenharmony_ci    and either ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is
1938e5c31af7Sopenharmony_ci    not enabled or
1939e5c31af7Sopenharmony_ci    <<limits-dynamicPrimitiveTopologyUnrestricted,pname:dynamicPrimitiveTopologyUnrestricted>>
1940e5c31af7Sopenharmony_ci    is ename:VK_FALSE,
1941e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1942e5c31af7Sopenharmony_ci    then pname:pStages must: include tessellation shader stages
1943e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-TessellationEvaluation-07723]]
1944e5c31af7Sopenharmony_ci    If the pipeline is being created with a code:TessellationEvaluation
1945e5c31af7Sopenharmony_ci    {ExecutionModel}, no code:Geometry {ExecutionModel}, uses the
1946e5c31af7Sopenharmony_ci    code:PointMode {ExecutionMode}, and
1947e5c31af7Sopenharmony_ci    <<features-shaderTessellationAndGeometryPointSize,
1948e5c31af7Sopenharmony_ci    pname:shaderTessellationAndGeometryPointSize>> is enabled, a
1949e5c31af7Sopenharmony_ci    code:PointSize decorated variable must: be written to
1950e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
1951e5c31af7Sopenharmony_ci    if <<features-maintenance5, pname:maintenance5>> is not enabled
1952e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
1953e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-topology-08773]]
1954e5c31af7Sopenharmony_ci    If the pipeline is being created with a code:Vertex {ExecutionModel} and
1955e5c31af7Sopenharmony_ci    no code:TessellationEvaluation or code:Geometry {ExecutionModel}, and
1956e5c31af7Sopenharmony_ci    the pname:topology member of pname:pInputAssembly is
1957e5c31af7Sopenharmony_ci    ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
1958e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
1959e5c31af7Sopenharmony_ci    and either ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is
1960e5c31af7Sopenharmony_ci    not enabled or
1961e5c31af7Sopenharmony_ci    <<limits-dynamicPrimitiveTopologyUnrestricted,pname:dynamicPrimitiveTopologyUnrestricted>>
1962e5c31af7Sopenharmony_ci    is ename:VK_FALSE,
1963e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
1964e5c31af7Sopenharmony_ci    a code:PointSize decorated variable must: be written to
1965e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
1966e5c31af7Sopenharmony_ci    if <<features-maintenance5, pname:maintenance5>> is not enabled
1967e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
1968e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
1969e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-maintenance5-08775]]
1970e5c31af7Sopenharmony_ci    If <<features-maintenance5, pname:maintenance5>> is enabled and a
1971e5c31af7Sopenharmony_ci    code:PointSize decorated variable is written to, all execution paths
1972e5c31af7Sopenharmony_ci    must: write to a code:PointSize decorated variable
1973e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
1974e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-TessellationEvaluation-07724]]
1975e5c31af7Sopenharmony_ci    If the pipeline is being created with a code:TessellationEvaluation
1976e5c31af7Sopenharmony_ci    {ExecutionModel}, no code:Geometry {ExecutionModel}, uses the
1977e5c31af7Sopenharmony_ci    code:PointMode {ExecutionMode}, and
1978e5c31af7Sopenharmony_ci    <<features-shaderTessellationAndGeometryPointSize,
1979e5c31af7Sopenharmony_ci    pname:shaderTessellationAndGeometryPointSize>> is not enabled, a
1980e5c31af7Sopenharmony_ci    code:PointSize decorated variable must: not be written to
1981e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-shaderTessellationAndGeometryPointSize-08776]]
1982e5c31af7Sopenharmony_ci    If the pipeline is being created with a code:Geometry {ExecutionModel},
1983e5c31af7Sopenharmony_ci    uses the code:OutputPoints {ExecutionMode}, and
1984e5c31af7Sopenharmony_ci    <<features-shaderTessellationAndGeometryPointSize,
1985e5c31af7Sopenharmony_ci    pname:shaderTessellationAndGeometryPointSize>> is enabled, a
1986e5c31af7Sopenharmony_ci    code:PointSize decorated variable must: be written to for every vertex
1987e5c31af7Sopenharmony_ci    emitted
1988e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
1989e5c31af7Sopenharmony_ci    if <<features-maintenance5, pname:maintenance5>> is not enabled
1990e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
1991e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-Geometry-07726]]
1992e5c31af7Sopenharmony_ci    If the pipeline is being created with a code:Geometry {ExecutionModel},
1993e5c31af7Sopenharmony_ci    uses the code:OutputPoints {ExecutionMode}, and
1994e5c31af7Sopenharmony_ci    <<features-shaderTessellationAndGeometryPointSize,
1995e5c31af7Sopenharmony_ci    pname:shaderTessellationAndGeometryPointSize>> is not enabled, a
1996e5c31af7Sopenharmony_ci    code:PointSize decorated variable must: not be written to
1997e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00738]]
1998e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
1999e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes a geometry
2000e5c31af7Sopenharmony_ci    shader stage, and does not include any tessellation shader stages, its
2001e5c31af7Sopenharmony_ci    shader code must: contain an code:OpExecutionMode instruction specifying
2002e5c31af7Sopenharmony_ci    an input primitive type that is <<shaders-geometry-execution,
2003e5c31af7Sopenharmony_ci    compatible>> with the primitive topology specified in
2004e5c31af7Sopenharmony_ci    pname:pInputAssembly
2005e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00739]]
2006e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2007e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:pStages includes a geometry
2008e5c31af7Sopenharmony_ci    shader stage, and also includes tessellation shader stages, its shader
2009e5c31af7Sopenharmony_ci    code must: contain an code:OpExecutionMode instruction specifying an
2010e5c31af7Sopenharmony_ci    input primitive type that is <<shaders-geometry-execution, compatible>>
2011e5c31af7Sopenharmony_ci    with the primitive topology that is output by the tessellation stages
2012e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00740]]
2013e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2014e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and
2015e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
2016e5c31af7Sopenharmony_ci    it includes both a fragment shader and a geometry shader, and the
2017e5c31af7Sopenharmony_ci    fragment shader code reads from an input variable that is decorated with
2018e5c31af7Sopenharmony_ci    code:PrimitiveId, then the geometry shader code must: write to a
2019e5c31af7Sopenharmony_ci    matching output variable, decorated with code:PrimitiveId, in all
2020e5c31af7Sopenharmony_ci    execution paths
2021e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2022e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-PrimitiveId-06264]]
2023e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2024e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, it includes a mesh shader and the
2025e5c31af7Sopenharmony_ci    fragment shader code reads from an input variable that is decorated with
2026e5c31af7Sopenharmony_ci    code:PrimitiveId, then the mesh shader code must: write to a matching
2027e5c31af7Sopenharmony_ci    output variable, decorated with code:PrimitiveId, in all execution paths
2028e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2029e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06038]]
2030e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
2031e5c31af7Sopenharmony_ci    being created with <<pipelines-graphics-subsets-fragment-shader,
2032e5c31af7Sopenharmony_ci    fragment shader state>> the fragment shader must: not read from any
2033e5c31af7Sopenharmony_ci    input attachment that is defined as ename:VK_ATTACHMENT_UNUSED in
2034e5c31af7Sopenharmony_ci    pname:subpass
2035e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00742]]
2036e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2037e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and multiple pre-rasterization shader
2038e5c31af7Sopenharmony_ci    stages are included in pname:pStages, the shader code for the entry
2039e5c31af7Sopenharmony_ci    points identified by those pname:pStages and the rest of the state
2040e5c31af7Sopenharmony_ci    identified by this structure must: adhere to the pipeline linking rules
2041e5c31af7Sopenharmony_ci    described in the <<interfaces,Shader Interfaces>> chapter
2042e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-None-04889]]
2043e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2044e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and
2045e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
2046e5c31af7Sopenharmony_ci    the fragment shader and last
2047e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
2048e5c31af7Sopenharmony_ci    stage>> and any relevant state must: adhere to the pipeline linking
2049e5c31af7Sopenharmony_ci    rules described in the <<interfaces,Shader Interfaces>> chapter
2050e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06041]]
2051e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, and the pipeline is
2052e5c31af7Sopenharmony_ci    being created with <<pipelines-graphics-subsets-fragment-output,
2053e5c31af7Sopenharmony_ci    fragment output interface state>>, then for each color attachment in the
2054e5c31af7Sopenharmony_ci    subpass, if the <<potential-format-features,potential format features>>
2055e5c31af7Sopenharmony_ci    of the format of the corresponding attachment description do not contain
2056e5c31af7Sopenharmony_ci    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
2057e5c31af7Sopenharmony_ci    pname:blendEnable member of the corresponding element of the
2058e5c31af7Sopenharmony_ci    pname:pAttachments member of pname:pColorBlendState must: be
2059e5c31af7Sopenharmony_ci    ename:VK_FALSE
2060e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07609]]
2061e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, and the pipeline is
2062e5c31af7Sopenharmony_ci    being created with <<pipelines-graphics-subsets-fragment-output,
2063e5c31af7Sopenharmony_ci    fragment output interface state>>, and the pname:pColorBlendState
2064e5c31af7Sopenharmony_ci    pointer is not `NULL`, and the subpass uses color attachments, the
2065e5c31af7Sopenharmony_ci    pname:attachmentCount member of pname:pColorBlendState must: be equal to
2066e5c31af7Sopenharmony_ci    the pname:colorAttachmentCount used to create pname:subpass
2067e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04130]]
2068e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2069e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and pname:pViewportState->pViewports
2070e5c31af7Sopenharmony_ci    is not dynamic, then pname:pViewportState->pViewports must: be a valid
2071e5c31af7Sopenharmony_ci    pointer to an array of pname:pViewportState->viewportCount valid
2072e5c31af7Sopenharmony_ci    sname:VkViewport structures
2073e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04131]]
2074e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2075e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and pname:pViewportState->pScissors is
2076e5c31af7Sopenharmony_ci    not dynamic, then pname:pViewportState->pScissors must: be a valid
2077e5c31af7Sopenharmony_ci    pointer to an array of pname:pViewportState->scissorCount sname:VkRect2D
2078e5c31af7Sopenharmony_ci    structures
2079e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749]]
2080e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2081e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and the <<features-wideLines,
2082e5c31af7Sopenharmony_ci    pname:wideLines>> feature is not enabled, and no element of the
2083e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState is
2084e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_LINE_WIDTH, the pname:lineWidth member of
2085e5c31af7Sopenharmony_ci    pname:pRasterizationState must: be `1.0`
2086e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-09024]]
2087e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2088e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
2089e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
2090e5c31af7Sopenharmony_ci    the ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state is
2091e5c31af7Sopenharmony_ci    enabled or
2092e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
2093e5c31af7Sopenharmony_ci    the pname:rasterizerDiscardEnable member of pname:pRasterizationState is
2094e5c31af7Sopenharmony_ci    ename:VK_FALSE,
2095e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
2096e5c31af7Sopenharmony_ci    and either the `apiext:VK_EXT_extended_dynamic_state3` extension is not
2097e5c31af7Sopenharmony_ci    enabled, or either the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT or
2098e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic states are not set,
2099e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
2100e5c31af7Sopenharmony_ci    pname:pViewportState must: be a valid pointer to a valid
2101e5c31af7Sopenharmony_ci    slink:VkPipelineViewportStateCreateInfo structure
2102e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
2103e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pViewportState-09025]]
2104e5c31af7Sopenharmony_ci    If pname:pViewportState is not `NULL` it must: be a valid pointer to a
2105e5c31af7Sopenharmony_ci    valid slink:VkPipelineViewportStateCreateInfo structure
2106e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
2107e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-09026]]
2108e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
2109e5c31af7Sopenharmony_ci    fragment output interface state>>,
2110e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
2111e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled
2112e5c31af7Sopenharmony_ci    or any of the ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
2113e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or
2114e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states is
2115e5c31af7Sopenharmony_ci    not set, or <<features-alphaToOne,alphaToOne>> is enabled on the device
2116e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set,
2117e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
2118e5c31af7Sopenharmony_ci    pname:pMultisampleState must: be a valid pointer to a valid
2119e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo structure
2120e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-09027]]
2121e5c31af7Sopenharmony_ci    If pname:pMultisampleState is not `NULL` it must: be a valid pointer to
2122e5c31af7Sopenharmony_ci    a valid slink:VkPipelineMultisampleStateCreateInfo structure
2123e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-alphaToCoverageEnable-08891]]
2124e5c31af7Sopenharmony_ci    If the pipeline is being created with
2125e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
2126e5c31af7Sopenharmony_ci    the
2127e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo::pname:alphaToCoverageEnable
2128e5c31af7Sopenharmony_ci    is not ignored and is ename:VK_TRUE, then the
2129e5c31af7Sopenharmony_ci    <<interfaces-fragmentoutput, Fragment Output Interface>> must: contain a
2130e5c31af7Sopenharmony_ci    variable for the alpha code:Component word in code:Location 0 at
2131e5c31af7Sopenharmony_ci    code:Index 0
2132e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09028]]
2133e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
2134e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-fragment-shader, fragment
2135e5c31af7Sopenharmony_ci    shader state>>, and pname:subpass uses a depth/stencil attachment,
2136e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
2137e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled
2138e5c31af7Sopenharmony_ci    or, any of the ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
2139e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
2140e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
2141e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
2142e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
2143e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_OP, or
2144e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states are not set,
2145e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
2146e5c31af7Sopenharmony_ci    pname:pDepthStencilState must: be a valid pointer to a valid
2147e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo structure
2148e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09029]]
2149e5c31af7Sopenharmony_ci    If pname:pDepthStencilState is not `NULL` it must: be a valid pointer to
2150e5c31af7Sopenharmony_ci    a valid slink:VkPipelineDepthStencilStateCreateInfo structure
2151e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09030]]
2152e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
2153e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-fragment-output, fragment
2154e5c31af7Sopenharmony_ci    output interface state>>, and pname:subpass uses color attachments,
2155e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
2156e5c31af7Sopenharmony_ci    and `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled, or
2157e5c31af7Sopenharmony_ci    any of the ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT,
2158e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT,
2159e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
2160e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT,
2161e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, or
2162e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic states are not set,
2163e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
2164e5c31af7Sopenharmony_ci    pname:pColorBlendState must: be a valid pointer to a valid
2165e5c31af7Sopenharmony_ci    slink:VkPipelineColorBlendStateCreateInfo structure
2166e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754]]
2167e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2168e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, the <<features-depthBiasClamp,
2169e5c31af7Sopenharmony_ci    pname:depthBiasClamp>> feature is not enabled, no element of the
2170e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState is
2171e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BIAS, and the pname:depthBiasEnable member
2172e5c31af7Sopenharmony_ci    of pname:pRasterizationState is ename:VK_TRUE, the pname:depthBiasClamp
2173e5c31af7Sopenharmony_ci    member of pname:pRasterizationState must: be `0.0`
2174e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-02510]]
2175e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2176e5c31af7Sopenharmony_ci    fragment shader state>>,
2177e5c31af7Sopenharmony_ciifdef::VK_EXT_depth_range_unrestricted[]
2178e5c31af7Sopenharmony_ci    the `apiext:VK_EXT_depth_range_unrestricted` extension is not enabled
2179e5c31af7Sopenharmony_ciendif::VK_EXT_depth_range_unrestricted[]
2180e5c31af7Sopenharmony_ci    and no element of the pname:pDynamicStates member of pname:pDynamicState
2181e5c31af7Sopenharmony_ci    is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the
2182e5c31af7Sopenharmony_ci    pname:depthBoundsTestEnable member of pname:pDepthStencilState is
2183e5c31af7Sopenharmony_ci    ename:VK_TRUE, the pname:minDepthBounds and pname:maxDepthBounds members
2184e5c31af7Sopenharmony_ci    of pname:pDepthStencilState must: be between `0.0` and `1.0`, inclusive
2185e5c31af7Sopenharmony_ciifdef::VK_EXT_sample_locations[]
2186e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07610]]
2187e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2188e5c31af7Sopenharmony_ci    fragment shader state>> or <<pipelines-graphics-subsets-fragment-output,
2189e5c31af7Sopenharmony_ci    fragment output interface state>>, and pname:rasterizationSamples and
2190e5c31af7Sopenharmony_ci    pname:sampleLocationsInfo are not dynamic, and
2191e5c31af7Sopenharmony_ci    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
2192e5c31af7Sopenharmony_ci    included in the pname:pNext chain of pname:pMultisampleState is
2193e5c31af7Sopenharmony_ci    ename:VK_TRUE, pname:sampleLocationsInfo.sampleLocationGridSize.width
2194e5c31af7Sopenharmony_ci    must: evenly divide
2195e5c31af7Sopenharmony_ci    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.width as
2196e5c31af7Sopenharmony_ci    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
2197e5c31af7Sopenharmony_ci    pname:samples parameter equaling pname:rasterizationSamples
2198e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07611]]
2199e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2200e5c31af7Sopenharmony_ci    fragment shader state>> or <<pipelines-graphics-subsets-fragment-output,
2201e5c31af7Sopenharmony_ci    fragment output interface state>>, and pname:rasterizationSamples and
2202e5c31af7Sopenharmony_ci    pname:sampleLocationsInfo are not dynamic, and
2203e5c31af7Sopenharmony_ci    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
2204e5c31af7Sopenharmony_ci    the included in the pname:pNext chain of pname:pMultisampleState is
2205e5c31af7Sopenharmony_ci    ename:VK_TRUE or ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT is
2206e5c31af7Sopenharmony_ci    used, pname:sampleLocationsInfo.sampleLocationGridSize.height must:
2207e5c31af7Sopenharmony_ci    evenly divide
2208e5c31af7Sopenharmony_ci    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.height as
2209e5c31af7Sopenharmony_ci    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
2210e5c31af7Sopenharmony_ci    pname:samples parameter equaling pname:rasterizationSamples
2211e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07612]]
2212e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2213e5c31af7Sopenharmony_ci    fragment shader state>> or <<pipelines-graphics-subsets-fragment-output,
2214e5c31af7Sopenharmony_ci    fragment output interface state>>, and pname:rasterizationSamples and
2215e5c31af7Sopenharmony_ci    pname:sampleLocationsInfo are not dynamic, and
2216e5c31af7Sopenharmony_ci    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
2217e5c31af7Sopenharmony_ci    included in the pname:pNext chain of pname:pMultisampleState is
2218e5c31af7Sopenharmony_ci    ename:VK_TRUE or ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT is
2219e5c31af7Sopenharmony_ci    used, pname:sampleLocationsInfo.sampleLocationsPerPixel must: equal
2220e5c31af7Sopenharmony_ci    pname:rasterizationSamples
2221e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524]]
2222e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2223e5c31af7Sopenharmony_ci    fragment shader state>>, and the pname:sampleLocationsEnable member of a
2224e5c31af7Sopenharmony_ci    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure included in
2225e5c31af7Sopenharmony_ci    the pname:pNext chain of pname:pMultisampleState is ename:VK_TRUE, the
2226e5c31af7Sopenharmony_ci    fragment shader code must: not statically use the extended instruction
2227e5c31af7Sopenharmony_ci    code:InterpolateAtSample
2228e5c31af7Sopenharmony_ciendif::VK_EXT_sample_locations[]
2229e5c31af7Sopenharmony_ciifdef::VK_EXT_multisampled_render_to_single_sampled[]
2230e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-multisampledRenderToSingleSampled-06853]]
2231e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
2232e5c31af7Sopenharmony_ci    fragment output interface state>>, and none of the
2233e5c31af7Sopenharmony_ci    `apiext:VK_AMD_mixed_attachment_samples` extension, the
2234e5c31af7Sopenharmony_ci    `apiext:VK_NV_framebuffer_mixed_samples` extension, or the
2235e5c31af7Sopenharmony_ci    <<features-multisampledRenderToSingleSampled,
2236e5c31af7Sopenharmony_ci    pname:multisampledRenderToSingleSampled>> feature are enabled,
2237e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic, and if pname:subpass uses
2238e5c31af7Sopenharmony_ci    color and/or depth/stencil attachments, then the
2239e5c31af7Sopenharmony_ci    pname:rasterizationSamples member of pname:pMultisampleState must: be
2240e5c31af7Sopenharmony_ci    the same as the sample count for those subpass attachments
2241e5c31af7Sopenharmony_ciendif::VK_EXT_multisampled_render_to_single_sampled[]
2242e5c31af7Sopenharmony_ciifdef::VK_AMD_mixed_attachment_samples[]
2243e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01505]]
2244e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
2245e5c31af7Sopenharmony_ci    fragment output interface state>>, and the
2246e5c31af7Sopenharmony_ci    `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
2247e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic, and if pname:subpass uses
2248e5c31af7Sopenharmony_ci    color and/or depth/stencil attachments, then the
2249e5c31af7Sopenharmony_ci    pname:rasterizationSamples member of pname:pMultisampleState must: equal
2250e5c31af7Sopenharmony_ci    the maximum of the sample counts of those subpass attachments
2251e5c31af7Sopenharmony_ciendif::VK_AMD_mixed_attachment_samples[]
2252e5c31af7Sopenharmony_ciifdef::VK_EXT_multisampled_render_to_single_sampled[]
2253e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06854]]
2254e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, the
2255e5c31af7Sopenharmony_ci    `apiext:VK_EXT_multisampled_render_to_single_sampled` extension is
2256e5c31af7Sopenharmony_ci    enabled, pname:rasterizationSamples is not dynamic, and pname:subpass
2257e5c31af7Sopenharmony_ci    has a slink:VkMultisampledRenderToSingleSampledInfoEXT structure
2258e5c31af7Sopenharmony_ci    included in the slink:VkSubpassDescription2::pname:pNext chain with
2259e5c31af7Sopenharmony_ci    pname:multisampledRenderToSingleSampledEnable equal to ename:VK_TRUE,
2260e5c31af7Sopenharmony_ci    then the pname:rasterizationSamples member of pname:pMultisampleState
2261e5c31af7Sopenharmony_ci    must: be equal to
2262e5c31af7Sopenharmony_ci    slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
2263e5c31af7Sopenharmony_ciendif::VK_EXT_multisampled_render_to_single_sampled[]
2264e5c31af7Sopenharmony_ciifdef::VK_NV_framebuffer_mixed_samples[]
2265e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01411]]
2266e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
2267e5c31af7Sopenharmony_ci    fragment output interface state>>, the
2268e5c31af7Sopenharmony_ci    `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
2269e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic, and if pname:subpass has a
2270e5c31af7Sopenharmony_ci    depth/stencil attachment and depth test, stencil test, or depth bounds
2271e5c31af7Sopenharmony_ci    test are enabled, then the pname:rasterizationSamples member of
2272e5c31af7Sopenharmony_ci    pname:pMultisampleState must: be the same as the sample count of the
2273e5c31af7Sopenharmony_ci    depth/stencil attachment
2274e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01412]]
2275e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
2276e5c31af7Sopenharmony_ci    fragment output interface state>>, the
2277e5c31af7Sopenharmony_ci    `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
2278e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic, and if pname:subpass has any
2279e5c31af7Sopenharmony_ci    color attachments, then the pname:rasterizationSamples member of
2280e5c31af7Sopenharmony_ci    pname:pMultisampleState must: be greater than or equal to the sample
2281e5c31af7Sopenharmony_ci    count for those subpass attachments
2282e5c31af7Sopenharmony_ciendif::VK_NV_framebuffer_mixed_samples[]
2283e5c31af7Sopenharmony_ciifdef::VK_NV_coverage_reduction_mode[]
2284e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-coverageReductionMode-02722]]
2285e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
2286e5c31af7Sopenharmony_ci    fragment output interface state>>, the
2287e5c31af7Sopenharmony_ci    `apiext:VK_NV_coverage_reduction_mode` extension is enabled, and
2288e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic, the coverage reduction mode
2289e5c31af7Sopenharmony_ci    specified by
2290e5c31af7Sopenharmony_ci    slink:VkPipelineCoverageReductionStateCreateInfoNV::pname:coverageReductionMode,
2291e5c31af7Sopenharmony_ci    the pname:rasterizationSamples member of pname:pMultisampleState and the
2292e5c31af7Sopenharmony_ci    sample counts for the color and depth/stencil attachments (if the
2293e5c31af7Sopenharmony_ci    subpass has them) must: be a valid combination returned by
2294e5c31af7Sopenharmony_ci    fname:vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
2295e5c31af7Sopenharmony_ciendif::VK_NV_coverage_reduction_mode[]
2296e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-00758]]
2297e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
2298e5c31af7Sopenharmony_ci    fragment output interface state>>, pname:rasterizationSamples is not
2299e5c31af7Sopenharmony_ci    dynamic, and pname:subpass does not use any color and/or depth/stencil
2300e5c31af7Sopenharmony_ci    attachments, then the pname:rasterizationSamples member of
2301e5c31af7Sopenharmony_ci    pname:pMultisampleState must: follow the rules for a
2302e5c31af7Sopenharmony_ci    <<renderpass-noattachments, zero-attachment subpass>>
2303e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06046]]
2304e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass must: be
2305e5c31af7Sopenharmony_ci    a valid subpass within pname:renderPass
2306e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_multiview[]
2307e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06047]]
2308e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
2309e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
2310e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, pname:subpass viewMask is not `0`, and
2311e5c31af7Sopenharmony_ci    pname:multiviewTessellationShader is not enabled, then pname:pStages
2312e5c31af7Sopenharmony_ci    must: not include tessellation shaders
2313e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06048]]
2314e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
2315e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
2316e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, pname:subpass viewMask is not `0`, and
2317e5c31af7Sopenharmony_ci    pname:multiviewGeometryShader is not enabled, then pname:pStages must:
2318e5c31af7Sopenharmony_ci    not include a geometry shader
2319e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06049]]
2320e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
2321e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
2322e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and pname:subpass viewMask is not `0`,
2323e5c31af7Sopenharmony_ci    all of the shaders in the pipeline must: not write to the code:Layer
2324e5c31af7Sopenharmony_ci    built-in output
2325e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06050]]
2326e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
2327e5c31af7Sopenharmony_ci    being created with <<pipelines-graphics-subsets-pre-rasterization,
2328e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and pname:subpass viewMask is not `0`,
2329e5c31af7Sopenharmony_ci    then all of the shaders in the pipeline must: not include variables
2330e5c31af7Sopenharmony_ci    decorated with the code:Layer built-in decoration in their interfaces
2331e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07717]]
2332e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
2333e5c31af7Sopenharmony_ci    being created with <<pipelines-graphics-subsets-pre-rasterization,
2334e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and pname:subpass viewMask is not `0`,
2335e5c31af7Sopenharmony_ci    then all of the shaders in the pipeline must: not include variables
2336e5c31af7Sopenharmony_ci    decorated with the code:ViewMask built-in decoration in their interfaces
2337e5c31af7Sopenharmony_ciifdef::VK_EXT_mesh_shader[]
2338e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07064]]
2339e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
2340e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
2341e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, pname:subpass viewMask is not `0`, and
2342e5c31af7Sopenharmony_ci    pname:multiviewMeshShader is not enabled, then pname:pStages must: not
2343e5c31af7Sopenharmony_ci    include a mesh shader
2344e5c31af7Sopenharmony_ciendif::VK_EXT_mesh_shader[]
2345e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_multiview[]
2346e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_device_group[]
2347e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00764]]
2348e5c31af7Sopenharmony_ci    pname:flags must: not contain the ename:VK_PIPELINE_CREATE_DISPATCH_BASE
2349e5c31af7Sopenharmony_ci    flag
2350e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_device_group[]
2351e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_maintenance2,VK_KHR_create_renderpass2[]
2352e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-01565]]
2353e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2354e5c31af7Sopenharmony_ci    fragment shader state>> and an input attachment was referenced by an
2355e5c31af7Sopenharmony_ci    pname:aspectMask at pname:renderPass creation time, the fragment shader
2356e5c31af7Sopenharmony_ci    must: only read from the aspects that were specified for that input
2357e5c31af7Sopenharmony_ci    attachment
2358e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_maintenance2,VK_KHR_create_renderpass2[]
2359e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-layout-01688]]
2360e5c31af7Sopenharmony_ci    The number of resources in pname:layout accessible to each shader stage
2361e5c31af7Sopenharmony_ci    that is used by the pipeline must: be less than or equal to
2362e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
2363e5c31af7Sopenharmony_ciifdef::VK_NV_clip_space_w_scaling[]
2364e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715]]
2365e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2366e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and no element of the
2367e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState is
2368e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, and the
2369e5c31af7Sopenharmony_ci    pname:viewportWScalingEnable member of a
2370e5c31af7Sopenharmony_ci    slink:VkPipelineViewportWScalingStateCreateInfoNV structure, included in
2371e5c31af7Sopenharmony_ci    the pname:pNext chain of pname:pViewportState, is ename:VK_TRUE, the
2372e5c31af7Sopenharmony_ci    pname:pViewportWScalings member of the
2373e5c31af7Sopenharmony_ci    slink:VkPipelineViewportWScalingStateCreateInfoNV must: be a pointer to
2374e5c31af7Sopenharmony_ci    an array of
2375e5c31af7Sopenharmony_ci    slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportCount
2376e5c31af7Sopenharmony_ci    valid slink:VkViewportWScalingNV structures
2377e5c31af7Sopenharmony_ciendif::VK_NV_clip_space_w_scaling[]
2378e5c31af7Sopenharmony_ciifdef::VK_NV_scissor_exclusive[]
2379e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04056]]
2380e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2381e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and no element of the
2382e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState is
2383e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV, and if
2384e5c31af7Sopenharmony_ci    pname:pViewportState->pNext chain includes a
2385e5c31af7Sopenharmony_ci    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure, and
2386e5c31af7Sopenharmony_ci    if its pname:exclusiveScissorCount member is not `0`, then its
2387e5c31af7Sopenharmony_ci    pname:pExclusiveScissors member must: be a valid pointer to an array of
2388e5c31af7Sopenharmony_ci    pname:exclusiveScissorCount slink:VkRect2D structures
2389e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07854]]
2390e5c31af7Sopenharmony_ci    If ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV is included in the
2391e5c31af7Sopenharmony_ci    pname:pDynamicStates array then the implementation must: support at
2392e5c31af7Sopenharmony_ci    least pname:specVersion `2` of the `apiext:VK_NV_scissor_exclusive`
2393e5c31af7Sopenharmony_ci    extension
2394e5c31af7Sopenharmony_ciendif::VK_NV_scissor_exclusive[]
2395e5c31af7Sopenharmony_ciifdef::VK_NV_shading_rate_image[]
2396e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057]]
2397e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2398e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and no element of the
2399e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState is
2400e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV, and if
2401e5c31af7Sopenharmony_ci    pname:pViewportState->pNext chain includes a
2402e5c31af7Sopenharmony_ci    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV structure,
2403e5c31af7Sopenharmony_ci    then its pname:pShadingRatePalettes member must: be a valid pointer to
2404e5c31af7Sopenharmony_ci    an array of pname:viewportCount valid slink:VkShadingRatePaletteNV
2405e5c31af7Sopenharmony_ci    structures
2406e5c31af7Sopenharmony_ciendif::VK_NV_shading_rate_image[]
2407e5c31af7Sopenharmony_ciifdef::VK_EXT_discard_rectangles[]
2408e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04058]]
2409e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2410e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and no element of the
2411e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState is
2412e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, and if pname:pNext chain
2413e5c31af7Sopenharmony_ci    includes a slink:VkPipelineDiscardRectangleStateCreateInfoEXT structure,
2414e5c31af7Sopenharmony_ci    and if its pname:discardRectangleCount member is not `0`, then its
2415e5c31af7Sopenharmony_ci    pname:pDiscardRectangles member must: be a valid pointer to an array of
2416e5c31af7Sopenharmony_ci    pname:discardRectangleCount slink:VkRect2D structures
2417e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07855]]
2418e5c31af7Sopenharmony_ci    If ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT is included in
2419e5c31af7Sopenharmony_ci    the pname:pDynamicStates array then the implementation must: support at
2420e5c31af7Sopenharmony_ci    least pname:specVersion `2` of the `apiext:VK_EXT_discard_rectangles`
2421e5c31af7Sopenharmony_ci    extension
2422e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07856]]
2423e5c31af7Sopenharmony_ci    If ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT is included in the
2424e5c31af7Sopenharmony_ci    pname:pDynamicStates array then the implementation must: support at
2425e5c31af7Sopenharmony_ci    least pname:specVersion `2` of the `apiext:VK_EXT_discard_rectangles`
2426e5c31af7Sopenharmony_ci    extension
2427e5c31af7Sopenharmony_ciendif::VK_EXT_discard_rectangles[]
2428e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02097]]
2429e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-vertex-input,
2430e5c31af7Sopenharmony_ci    vertex input state>>, and pname:pVertexInputState is not dynamic, then
2431e5c31af7Sopenharmony_ci    pname:pVertexInputState must: be a valid pointer to a valid
2432e5c31af7Sopenharmony_ci    slink:VkPipelineVertexInputStateCreateInfo structure
2433e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-Input-07904]]
2434e5c31af7Sopenharmony_ci    If the pipeline is being created with
2435e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
2436e5c31af7Sopenharmony_ci    pname:pVertexInputState is not dynamic, then all variables with the
2437e5c31af7Sopenharmony_ci    code:Input storage class decorated with code:Location in the code:Vertex
2438e5c31af7Sopenharmony_ci    {ExecutionModel} code:OpEntryPoint must: contain a location in
2439e5c31af7Sopenharmony_ci    slink:VkVertexInputAttributeDescription::pname:location
2440e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-Input-08733]]
2441e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-vertex-input,
2442e5c31af7Sopenharmony_ci    vertex input state>> and pname:pVertexInputState is not dynamic, then
2443e5c31af7Sopenharmony_ci    the numeric type associated with all code:Input variables of the
2444e5c31af7Sopenharmony_ci    corresponding code:Location in the code:Vertex {ExecutionModel}
2445e5c31af7Sopenharmony_ci    code:OpEntryPoint must: be the same as
2446e5c31af7Sopenharmony_ci    slink:VkVertexInputAttributeDescription::pname:format
2447e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-08929]]
2448e5c31af7Sopenharmony_ci    If the pipeline is being created with
2449e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
2450e5c31af7Sopenharmony_ci    pname:pVertexInputState is not dynamic, and
2451e5c31af7Sopenharmony_ci    slink:VkVertexInputAttributeDescription::pname:format has a 64-bit
2452e5c31af7Sopenharmony_ci    component, then the scalar width associated with all code:Input
2453e5c31af7Sopenharmony_ci    variables of the corresponding code:Location in the code:Vertex
2454e5c31af7Sopenharmony_ci    {ExecutionModel} code:OpEntryPoint must: be 64-bit
2455e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-08930]]
2456e5c31af7Sopenharmony_ci    If the pipeline is being created with
2457e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
2458e5c31af7Sopenharmony_ci    pname:pVertexInputState is not dynamic, and the scalar width associated
2459e5c31af7Sopenharmony_ci    with a code:Location decorated code:Input variable in the code:Vertex
2460e5c31af7Sopenharmony_ci    {ExecutionModel} code:OpEntryPoint is 64-bit, then the corresponding
2461e5c31af7Sopenharmony_ci    slink:VkVertexInputAttributeDescription::pname:format must: have a
2462e5c31af7Sopenharmony_ci    64-bit component
2463e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-09198]]
2464e5c31af7Sopenharmony_ci    If the pipeline is being created with
2465e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
2466e5c31af7Sopenharmony_ci    pname:pVertexInputState is not dynamic, and
2467e5c31af7Sopenharmony_ci    slink:VkVertexInputAttributeDescription::pname:format has a 64-bit
2468e5c31af7Sopenharmony_ci    component, then all code:Input variables at the corresponding
2469e5c31af7Sopenharmony_ci    code:Location in the code:Vertex {ExecutionModel} code:OpEntryPoint
2470e5c31af7Sopenharmony_ci    must: not use components that are not present in the format
2471e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-dynamicPrimitiveTopologyUnrestricted-09031]]
2472e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-vertex-input,
2473e5c31af7Sopenharmony_ci    vertex input state>>,
2474e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
2475e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not
2476e5c31af7Sopenharmony_ci    enabled, or either ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, or
2477e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic states are not set, or
2478e5c31af7Sopenharmony_ci    <<limits-dynamicPrimitiveTopologyUnrestricted,
2479e5c31af7Sopenharmony_ci    pname:dynamicPrimitiveTopologyUnrestricted>> is ename:VK_FALSE,
2480e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
2481e5c31af7Sopenharmony_ci    pname:pInputAssemblyState must: be a valid pointer to a valid
2482e5c31af7Sopenharmony_ci    slink:VkPipelineInputAssemblyStateCreateInfo structure
2483e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pInputAssemblyState-09032]]
2484e5c31af7Sopenharmony_ci    If pname:pInputAssemblyState is not `NULL` it must: be a valid pointer
2485e5c31af7Sopenharmony_ci    to a valid slink:VkPipelineInputAssemblyStateCreateInfo structure
2486e5c31af7Sopenharmony_ciifdef::VK_EXT_transform_feedback[]
2487e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02317]]
2488e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2489e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, the code:Xfb execution mode can: be
2490e5c31af7Sopenharmony_ci    specified by no more than one shader stage in pname:pStages
2491e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02318]]
2492e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2493e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and any shader stage in pname:pStages
2494e5c31af7Sopenharmony_ci    specifies code:Xfb execution mode it must: be the last
2495e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
2496e5c31af7Sopenharmony_ci    stage>>
2497e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319]]
2498e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2499e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and a
2500e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
2501e5c31af7Sopenharmony_ci    value other than zero is specified, all variables in the output
2502e5c31af7Sopenharmony_ci    interface of the entry point being compiled decorated with
2503e5c31af7Sopenharmony_ci    code:Position, code:PointSize, code:ClipDistance, or code:CullDistance
2504e5c31af7Sopenharmony_ci    must: be decorated with identical code:Stream values that match the
2505e5c31af7Sopenharmony_ci    pname:rasterizationStream
2506e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02320]]
2507e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2508e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
2509e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
2510e5c31af7Sopenharmony_ci    is zero, or not specified, all variables in the output interface of the
2511e5c31af7Sopenharmony_ci    entry point being compiled decorated with code:Position, code:PointSize,
2512e5c31af7Sopenharmony_ci    code:ClipDistance, or code:CullDistance must: be decorated with a
2513e5c31af7Sopenharmony_ci    code:Stream value of zero, or must: not specify the code:Stream
2514e5c31af7Sopenharmony_ci    decoration
2515e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-geometryStreams-02321]]
2516e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2517e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and the last
2518e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
2519e5c31af7Sopenharmony_ci    stage>> is a geometry shader, and that geometry shader uses the
2520e5c31af7Sopenharmony_ci    code:GeometryStreams capability, then
2521e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
2522e5c31af7Sopenharmony_ci    feature must: be enabled
2523e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2524e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-None-02322]]
2525e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2526e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and there are any mesh shader stages
2527e5c31af7Sopenharmony_ci    in the pipeline there must: not be any shader stage in the pipeline with
2528e5c31af7Sopenharmony_ci    a code:Xfb execution mode
2529e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2530e5c31af7Sopenharmony_ciendif::VK_EXT_transform_feedback[]
2531e5c31af7Sopenharmony_ciifdef::VK_EXT_line_rasterization[]
2532e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766]]
2533e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2534e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and at least one of
2535e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
2536e5c31af7Sopenharmony_ci    state>> or <<pipelines-graphics-subsets-fragment-shader, fragment shader
2537e5c31af7Sopenharmony_ci    state>>, and pname:pMultisampleState is not `NULL`, the
2538e5c31af7Sopenharmony_ci    pname:lineRasterizationMode member of a
2539e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationLineStateCreateInfoEXT structure included
2540e5c31af7Sopenharmony_ci    in the pname:pNext chain of pname:pRasterizationState is
2541e5c31af7Sopenharmony_ci    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT or
2542e5c31af7Sopenharmony_ci    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
2543e5c31af7Sopenharmony_ci    pname:alphaToCoverageEnable, pname:alphaToOneEnable, and
2544e5c31af7Sopenharmony_ci    pname:sampleShadingEnable members of pname:pMultisampleState must: all
2545e5c31af7Sopenharmony_ci    be ename:VK_FALSE
2546e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-stippledLineEnable-02767]]
2547e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2548e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, the pname:stippledLineEnable member of
2549e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationLineStateCreateInfoEXT is ename:VK_TRUE,
2550e5c31af7Sopenharmony_ci    and no element of the pname:pDynamicStates member of pname:pDynamicState
2551e5c31af7Sopenharmony_ci    is ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT, then the
2552e5c31af7Sopenharmony_ci    pname:lineStippleFactor member of
2553e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationLineStateCreateInfoEXT must: be in the
2554e5c31af7Sopenharmony_ci    range [eq]#[1,256]#
2555e5c31af7Sopenharmony_ciendif::VK_EXT_line_rasterization[]
2556e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
2557e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03372]]
2558e5c31af7Sopenharmony_ci    pname:flags must: not include
2559e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
2560e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03373]]
2561e5c31af7Sopenharmony_ci    pname:flags must: not include
2562e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
2563e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03374]]
2564e5c31af7Sopenharmony_ci    pname:flags must: not include
2565e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
2566e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03375]]
2567e5c31af7Sopenharmony_ci    pname:flags must: not include
2568e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
2569e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03376]]
2570e5c31af7Sopenharmony_ci    pname:flags must: not include
2571e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
2572e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03377]]
2573e5c31af7Sopenharmony_ci    pname:flags must: not include
2574e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
2575e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03577]]
2576e5c31af7Sopenharmony_ci    pname:flags must: not include
2577e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
2578e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
2579e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing_motion_blur[]
2580e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04947]]
2581e5c31af7Sopenharmony_ci    pname:flags must: not include
2582e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
2583e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing_motion_blur[]
2584e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
2585e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378]]
2586e5c31af7Sopenharmony_ci    If
2587e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state[]
2588e5c31af7Sopenharmony_ci    the <<features-extendedDynamicState, pname:extendedDynamicState>>
2589e5c31af7Sopenharmony_ci    feature is not enabled,
2590e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state[]
2591e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3+VK_EXT_extended_dynamic_state[and]
2592e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3[]
2593e5c31af7Sopenharmony_ci    the value of slink:VkApplicationInfo::pname:apiVersion used to create
2594e5c31af7Sopenharmony_ci    the slink:VkInstance is less than Version 1.3
2595e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3[]
2596e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
2597e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_CULL_MODE,
2598e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRONT_FACE,
2599e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY,
2600e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
2601e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
2602e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE,
2603e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
2604e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
2605e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
2606e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
2607e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, or
2608e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_OP
2609e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03379]]
2610e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2611e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
2612e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is included in the
2613e5c31af7Sopenharmony_ci    pname:pDynamicStates array then pname:viewportCount must: be zero
2614e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380]]
2615e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2616e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
2617e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT is included in the
2618e5c31af7Sopenharmony_ci    pname:pDynamicStates array then pname:scissorCount must: be zero
2619e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132]]
2620e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2621e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
2622e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is included in the
2623e5c31af7Sopenharmony_ci    pname:pDynamicStates array then ename:VK_DYNAMIC_STATE_VIEWPORT must:
2624e5c31af7Sopenharmony_ci    not be present
2625e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133]]
2626e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2627e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
2628e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT is included in the
2629e5c31af7Sopenharmony_ci    pname:pDynamicStates array then ename:VK_DYNAMIC_STATE_SCISSOR must: not
2630e5c31af7Sopenharmony_ci    be present
2631e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2632e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07065]]
2633e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2634e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and includes a mesh shader, there
2635e5c31af7Sopenharmony_ci    must: be no element of the pname:pDynamicStates member of
2636e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, or
2637e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE
2638e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2639e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
2640e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
2641e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04868]]
2642e5c31af7Sopenharmony_ci    If
2643e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state[]
2644e5c31af7Sopenharmony_ci    the <<features-extendedDynamicState2, pname:extendedDynamicState2>>
2645e5c31af7Sopenharmony_ci    feature is not enabled,
2646e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state[]
2647e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3+VK_EXT_extended_dynamic_state[and]
2648e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3[]
2649e5c31af7Sopenharmony_ci    the value of slink:VkApplicationInfo::pname:apiVersion used to create
2650e5c31af7Sopenharmony_ci    the slink:VkInstance is less than Version 1.3
2651e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3[]
2652e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
2653e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE,
2654e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, or
2655e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE
2656e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04869]]
2657e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState2LogicOp,
2658e5c31af7Sopenharmony_ci    pname:extendedDynamicState2LogicOp>> feature is not enabled, there must:
2659e5c31af7Sopenharmony_ci    be no element of the pname:pDynamicStates member of pname:pDynamicState
2660e5c31af7Sopenharmony_ci    set to ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT
2661e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04870]]
2662e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState2PatchControlPoints,
2663e5c31af7Sopenharmony_ci    pname:extendedDynamicState2PatchControlPoints>> feature is not enabled,
2664e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
2665e5c31af7Sopenharmony_ci    pname:pDynamicState set to
2666e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
2667e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2668e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07066]]
2669e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2670e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and includes a mesh shader, there
2671e5c31af7Sopenharmony_ci    must: be no element of the pname:pDynamicStates member of
2672e5c31af7Sopenharmony_ci    pname:pDynamicState set to
2673e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, or
2674e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
2675e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2676e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
2677e5c31af7Sopenharmony_ciifdef::VK_NV_device_generated_commands[]
2678e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-02877]]
2679e5c31af7Sopenharmony_ci    If pname:flags includes
2680e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the
2681e5c31af7Sopenharmony_ci    <<features-deviceGeneratedCommands, pname:deviceGeneratedCommands>>
2682e5c31af7Sopenharmony_ci    feature must: be enabled
2683e5c31af7Sopenharmony_ciifdef::VK_EXT_transform_feedback[]
2684e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-02966]]
2685e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2686e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and pname:flags includes
2687e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then all stages must:
2688e5c31af7Sopenharmony_ci    not specify code:Xfb execution mode
2689e5c31af7Sopenharmony_ciendif::VK_EXT_transform_feedback[]
2690e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-libraryCount-06648]]
2691e5c31af7Sopenharmony_ci    If the pipeline is not created with a
2692e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-complete, complete set of state>>,
2693e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
2694e5c31af7Sopenharmony_ci    or slink:VkPipelineLibraryCreateInfoKHR::pname:libraryCount is not `0`,
2695e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
2696e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:groupCount and
2697e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:pipelineCount
2698e5c31af7Sopenharmony_ci    must: be `0`
2699e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-libraryCount-06649]]
2700e5c31af7Sopenharmony_ci    If the pipeline is created with a <<pipelines-graphics-subsets-complete,
2701e5c31af7Sopenharmony_ci    complete set of state>>,
2702e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
2703e5c31af7Sopenharmony_ci    and slink:VkPipelineLibraryCreateInfoKHR::pname:libraryCount is `0`,
2704e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
2705e5c31af7Sopenharmony_ci    and the pname:pNext chain includes an instance of
2706e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV,
2707e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:groupCount must:
2708e5c31af7Sopenharmony_ci    be greater than `0`
2709e5c31af7Sopenharmony_ciendif::VK_NV_device_generated_commands[]
2710e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
2711e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pipelineCreationCacheControl-02878]]
2712e5c31af7Sopenharmony_ci    If the <<features-pipelineCreationCacheControl,
2713e5c31af7Sopenharmony_ci    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
2714e5c31af7Sopenharmony_ci    must: not include
2715e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or
2716e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
2717e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
2718e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_protected_access[]
2719e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pipelineProtectedAccess-07368]]
2720e5c31af7Sopenharmony_ci    If the <<features-pipelineProtectedAccess,
2721e5c31af7Sopenharmony_ci    pname:pipelineProtectedAccess>> feature is not enabled, pname:flags
2722e5c31af7Sopenharmony_ci    must: not include ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
2723e5c31af7Sopenharmony_ci    or ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
2724e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-07369]]
2725e5c31af7Sopenharmony_ci    pname:flags must: not include both
2726e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT and
2727e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
2728e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_protected_access[]
2729e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
2730e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04494]]
2731e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2732e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2733e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2734e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2735e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2736e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
2737e5c31af7Sopenharmony_ci    must: be greater than or equal to `1`
2738e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04495]]
2739e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2740e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2741e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2742e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2743e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2744e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
2745e5c31af7Sopenharmony_ci    must: be greater than or equal to `1`
2746e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04496]]
2747e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2748e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2749e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2750e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2751e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2752e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
2753e5c31af7Sopenharmony_ci    must: be a power-of-two value
2754e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04497]]
2755e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2756e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2757e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2758e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2759e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2760e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
2761e5c31af7Sopenharmony_ci    must: be a power-of-two value
2762e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04498]]
2763e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2764e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2765e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2766e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2767e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2768e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
2769e5c31af7Sopenharmony_ci    must: be less than or equal to `4`
2770e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04499]]
2771e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2772e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2773e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2774e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2775e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2776e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
2777e5c31af7Sopenharmony_ci    must: be less than or equal to `4`
2778e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04500]]
2779e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2780e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2781e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2782e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2783e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, and the
2784e5c31af7Sopenharmony_ci    <<features-pipelineFragmentShadingRate,
2785e5c31af7Sopenharmony_ci    pname:pipelineFragmentShadingRate>> feature is not enabled,
2786e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
2787e5c31af7Sopenharmony_ci    and
2788e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
2789e5c31af7Sopenharmony_ci    must: both be equal to `1`
2790e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06567]]
2791e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2792e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2793e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2794e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2795e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2796e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[0]
2797e5c31af7Sopenharmony_ci    must: be a valid elink:VkFragmentShadingRateCombinerOpKHR value
2798e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06568]]
2799e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2800e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2801e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2802e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2803e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2804e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[1]
2805e5c31af7Sopenharmony_ci    must: be a valid elink:VkFragmentShadingRateCombinerOpKHR value
2806e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04501]]
2807e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2808e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2809e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2810e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2811e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, and the
2812e5c31af7Sopenharmony_ci    <<features-primitiveFragmentShadingRate,
2813e5c31af7Sopenharmony_ci    pname:primitiveFragmentShadingRate>> feature is not enabled,
2814e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[0]
2815e5c31af7Sopenharmony_ci    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
2816e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04502]]
2817e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2818e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2819e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
2820e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2821e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, and the
2822e5c31af7Sopenharmony_ci    <<features-attachmentFragmentShadingRate,
2823e5c31af7Sopenharmony_ci    pname:attachmentFragmentShadingRate>> feature is not enabled,
2824e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[1]
2825e5c31af7Sopenharmony_ci    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
2826e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
2827e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04503]]
2828e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2829e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and the
2830e5c31af7Sopenharmony_ci    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
2831e5c31af7Sopenharmony_ci    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
2832e5c31af7Sopenharmony_ci    supported, ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is not included in
2833e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, and
2834e5c31af7Sopenharmony_ci    slink:VkPipelineViewportStateCreateInfo::pname:viewportCount is greater
2835e5c31af7Sopenharmony_ci    than `1`, entry points specified in pname:pStages must: not write to the
2836e5c31af7Sopenharmony_ci    code:PrimitiveShadingRateKHR built-in
2837e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
2838e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04504]]
2839e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2840e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and the
2841e5c31af7Sopenharmony_ci    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
2842e5c31af7Sopenharmony_ci    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
2843e5c31af7Sopenharmony_ci    supported, and entry points specified in pname:pStages write to the
2844e5c31af7Sopenharmony_ci    code:ViewportIndex built-in, they must: not also write to the
2845e5c31af7Sopenharmony_ci    code:PrimitiveShadingRateKHR built-in
2846e5c31af7Sopenharmony_ciifdef::VK_NV_viewport_array2[]
2847e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04505]]
2848e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2849e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and the
2850e5c31af7Sopenharmony_ci    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
2851e5c31af7Sopenharmony_ci    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
2852e5c31af7Sopenharmony_ci    supported, and entry points specified in pname:pStages write to the
2853e5c31af7Sopenharmony_ci    code:ViewportMaskNV built-in, they must: not also write to the
2854e5c31af7Sopenharmony_ci    code:PrimitiveShadingRateKHR built-in
2855e5c31af7Sopenharmony_ciendif::VK_NV_viewport_array2[]
2856e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04506]]
2857e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2858e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
2859e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
2860e5c31af7Sopenharmony_ci    the <<limits-fragmentShadingRateNonTrivialCombinerOps,
2861e5c31af7Sopenharmony_ci    pname:fragmentShadingRateNonTrivialCombinerOps>> limit is not supported,
2862e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2863e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, elements of
2864e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps
2865e5c31af7Sopenharmony_ci    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
2866e5c31af7Sopenharmony_ci    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
2867e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
2868e5c31af7Sopenharmony_ciifdef::VK_NV_fragment_shading_rate_enums[]
2869e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-None-06569]]
2870e5c31af7Sopenharmony_ci     If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2871e5c31af7Sopenharmony_ci     fragment shader state>>
2872e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2873e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2874e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRateType
2875e5c31af7Sopenharmony_ci    must: be a valid elink:VkFragmentShadingRateTypeNV value
2876e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06570]]
2877e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2878e5c31af7Sopenharmony_ci    fragment shader state>> and
2879e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2880e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2881e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
2882e5c31af7Sopenharmony_ci    must: be a valid elink:VkFragmentShadingRateNV value
2883e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06571]]
2884e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2885e5c31af7Sopenharmony_ci    fragment shader state>> and
2886e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2887e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2888e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[0]
2889e5c31af7Sopenharmony_ci    must: be a valid elink:VkFragmentShadingRateCombinerOpKHR value
2890e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06572]]
2891e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2892e5c31af7Sopenharmony_ci    fragment shader state>> and
2893e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2894e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates,
2895e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[1]
2896e5c31af7Sopenharmony_ci    must: be a valid elink:VkFragmentShadingRateCombinerOpKHR value
2897e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04569]]
2898e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2899e5c31af7Sopenharmony_ci    fragment shader state>> and
2900e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2901e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, and the
2902e5c31af7Sopenharmony_ci    <<features-fragmentShadingRateEnums, pname:fragmentShadingRateEnums>>
2903e5c31af7Sopenharmony_ci    feature is not enabled,
2904e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRateType
2905e5c31af7Sopenharmony_ci    must: be equal to ename:VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV
2906e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04570]]
2907e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2908e5c31af7Sopenharmony_ci    fragment shader state>> and
2909e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2910e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, and the
2911e5c31af7Sopenharmony_ci    <<features-pipelineFragmentShadingRate,
2912e5c31af7Sopenharmony_ci    pname:pipelineFragmentShadingRate>> feature is not enabled,
2913e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
2914e5c31af7Sopenharmony_ci    must: be equal to
2915e5c31af7Sopenharmony_ci    ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV
2916e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04571]]
2917e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2918e5c31af7Sopenharmony_ci    fragment shader state>> and
2919e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2920e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, and the
2921e5c31af7Sopenharmony_ci    <<features-primitiveFragmentShadingRate,
2922e5c31af7Sopenharmony_ci    pname:primitiveFragmentShadingRate>> feature is not enabled,
2923e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[0]
2924e5c31af7Sopenharmony_ci    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
2925e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04572]]
2926e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2927e5c31af7Sopenharmony_ci    fragment shader state>> and
2928e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2929e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, and the
2930e5c31af7Sopenharmony_ci    <<features-attachmentFragmentShadingRate,
2931e5c31af7Sopenharmony_ci    pname:attachmentFragmentShadingRate>> feature is not enabled,
2932e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[1]
2933e5c31af7Sopenharmony_ci    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
2934e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04573]]
2935e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2936e5c31af7Sopenharmony_ci    fragment shader state>>, and the
2937e5c31af7Sopenharmony_ci    <<limits-fragmentShadingRateNonTrivialCombinerOps,
2938e5c31af7Sopenharmony_ci    pname:fragmentShadingRateNonTrivialCombinerOps>> limit is not supported
2939e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
2940e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates, elements of
2941e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps
2942e5c31af7Sopenharmony_ci    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
2943e5c31af7Sopenharmony_ci    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
2944e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-None-04574]]
2945e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2946e5c31af7Sopenharmony_ci    fragment shader state>>, and the
2947e5c31af7Sopenharmony_ci    <<features-supersampleFragmentShadingRates,
2948e5c31af7Sopenharmony_ci    pname:supersampleFragmentShadingRates>> feature is not enabled,
2949e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
2950e5c31af7Sopenharmony_ci    must: not be equal to
2951e5c31af7Sopenharmony_ci    ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,
2952e5c31af7Sopenharmony_ci    ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,
2953e5c31af7Sopenharmony_ci    ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, or
2954e5c31af7Sopenharmony_ci    ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV
2955e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-None-04575]]
2956e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2957e5c31af7Sopenharmony_ci    fragment shader state>>, and the
2958e5c31af7Sopenharmony_ci    <<features-noInvocationFragmentShadingRates,
2959e5c31af7Sopenharmony_ci    pname:noInvocationFragmentShadingRates>> feature is not enabled,
2960e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
2961e5c31af7Sopenharmony_ci    must: not be equal to ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV
2962e5c31af7Sopenharmony_ciendif::VK_NV_fragment_shading_rate_enums[]
2963e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
2964e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03578]]
2965e5c31af7Sopenharmony_ci    All elements of the pname:pDynamicStates member of pname:pDynamicState
2966e5c31af7Sopenharmony_ci    must: not be ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR
2967e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
2968e5c31af7Sopenharmony_ciifdef::VK_EXT_vertex_input_dynamic_state[]
2969e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04807]]
2970e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2971e5c31af7Sopenharmony_ci    pre-rasterization shader state>> and the
2972e5c31af7Sopenharmony_ci    <<features-vertexInputDynamicState, pname:vertexInputDynamicState>>
2973e5c31af7Sopenharmony_ci    feature is not enabled, there must: be no element of the
2974e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState set to
2975e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT
2976e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2977e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07067]]
2978e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
2979e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and includes a mesh shader, there
2980e5c31af7Sopenharmony_ci    must: be no element of the pname:pDynamicStates member of
2981e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT
2982e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
2983e5c31af7Sopenharmony_ciendif::VK_EXT_vertex_input_dynamic_state[]
2984e5c31af7Sopenharmony_ciifdef::VK_EXT_color_write_enable[]
2985e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04800]]
2986e5c31af7Sopenharmony_ci    If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is
2987e5c31af7Sopenharmony_ci    not enabled, there must: be no element of the pname:pDynamicStates
2988e5c31af7Sopenharmony_ci    member of pname:pDynamicState set to
2989e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT
2990e5c31af7Sopenharmony_ciendif::VK_EXT_color_write_enable[]
2991e5c31af7Sopenharmony_ciifdef::VK_QCOM_render_pass_shader_resolve[]
2992e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationSamples-04899]]
2993e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
2994e5c31af7Sopenharmony_ci    fragment shader state>>, and the
2995e5c31af7Sopenharmony_ci    `apiext:VK_QCOM_render_pass_shader_resolve` extension is enabled,
2996e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic, and if subpass has any input
2997e5c31af7Sopenharmony_ci    attachments, and if the subpass description contains
2998e5c31af7Sopenharmony_ci    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the sample
2999e5c31af7Sopenharmony_ci    count of the input attachments must: equal pname:rasterizationSamples
3000e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-sampleShadingEnable-04900]]
3001e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3002e5c31af7Sopenharmony_ci    fragment shader state>>, and the
3003e5c31af7Sopenharmony_ci    `apiext:VK_QCOM_render_pass_shader_resolve` extension is enabled, and if
3004e5c31af7Sopenharmony_ci    the subpass description contains
3005e5c31af7Sopenharmony_ci    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then
3006e5c31af7Sopenharmony_ci    pname:sampleShadingEnable must: be false
3007e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04901]]
3008e5c31af7Sopenharmony_ci    If pname:flags includes
3009e5c31af7Sopenharmony_ci    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass
3010e5c31af7Sopenharmony_ci    must: be the last subpass in a subpass dependency chain
3011e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04902]]
3012e5c31af7Sopenharmony_ci    If pname:flags includes
3013e5c31af7Sopenharmony_ci    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
3014e5c31af7Sopenharmony_ci    pname:pResolveAttachments is not `NULL`, then each resolve attachment
3015e5c31af7Sopenharmony_ci    must: be ename:VK_ATTACHMENT_UNUSED
3016e5c31af7Sopenharmony_ciendif::VK_QCOM_render_pass_shader_resolve[]
3017e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
3018e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06576]]
3019e5c31af7Sopenharmony_ci    If the <<features-dynamicRendering, pname:dynamicRendering>> feature is
3020e5c31af7Sopenharmony_ci    not enabled and the pipeline requires
3021e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
3022e5c31af7Sopenharmony_ci    state>>, <<pipelines-graphics-subsets-fragment-shader, fragment shader
3023e5c31af7Sopenharmony_ci    state>>, or <<pipelines-graphics-subsets-fragment-output, fragment
3024e5c31af7Sopenharmony_ci    output interface state>>, pname:renderPass must: not be
3025e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE
3026e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-multiview-06577]]
3027e5c31af7Sopenharmony_ci    If the <<features-multiview, pname:multiview>> feature is not enabled,
3028e5c31af7Sopenharmony_ci    the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3029e5c31af7Sopenharmony_ci    pre-rasterization shader state>>,
3030e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
3031e5c31af7Sopenharmony_ci    or <<pipelines-graphics-subsets-fragment-output, fragment output
3032e5c31af7Sopenharmony_ci    interface state>>, and pname:renderPass is dlink:VK_NULL_HANDLE,
3033e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask must: be `0`
3034e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06578]]
3035e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3036e5c31af7Sopenharmony_ci    pre-rasterization shader state>>,
3037e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
3038e5c31af7Sopenharmony_ci    or <<pipelines-graphics-subsets-fragment-output, fragment output
3039e5c31af7Sopenharmony_ci    interface state>>, and pname:renderPass is dlink:VK_NULL_HANDLE, the
3040e5c31af7Sopenharmony_ci    index of the most significant bit in
3041e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask must: be less than
3042e5c31af7Sopenharmony_ci    <<limits-maxMultiviewViewCount, pname:maxMultiviewViewCount>>
3043e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06579]]
3044e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3045e5c31af7Sopenharmony_ci    fragment output interface state>>, and pname:renderPass is
3046e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, and
3047e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount is not
3048e5c31af7Sopenharmony_ci    0, slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats
3049e5c31af7Sopenharmony_ci    must: be a valid pointer to an array of pname:colorAttachmentCount valid
3050e5c31af7Sopenharmony_ci    elink:VkFormat values
3051e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06580]]
3052e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3053e5c31af7Sopenharmony_ci    fragment output interface state>>, and pname:renderPass is
3054e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, each element of
3055e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats must:
3056e5c31af7Sopenharmony_ci    be a valid elink:VkFormat value
3057e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06582]]
3058e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3059e5c31af7Sopenharmony_ci    fragment output interface state>>, pname:renderPass is
3060e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, and any element of
3061e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats is
3062e5c31af7Sopenharmony_ci    not ename:VK_FORMAT_UNDEFINED, that format must: be a format with
3063e5c31af7Sopenharmony_ci    <<potential-format-features, potential format features>> that include
3064e5c31af7Sopenharmony_ci    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
3065e5c31af7Sopenharmony_ciifdef::VK_NV_linear_color_attachment[]
3066e5c31af7Sopenharmony_ci    or ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
3067e5c31af7Sopenharmony_ciendif::VK_NV_linear_color_attachment[]
3068e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06583]]
3069e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3070e5c31af7Sopenharmony_ci    fragment output interface state>>, and pname:renderPass is
3071e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE,
3072e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat must:
3073e5c31af7Sopenharmony_ci    be a valid elink:VkFormat value
3074e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06584]]
3075e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3076e5c31af7Sopenharmony_ci    fragment output interface state>>, and pname:renderPass is
3077e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE,
3078e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat must:
3079e5c31af7Sopenharmony_ci    be a valid elink:VkFormat value
3080e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06585]]
3081e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3082e5c31af7Sopenharmony_ci    fragment output interface state>>, pname:renderPass is
3083e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, and
3084e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat is not
3085e5c31af7Sopenharmony_ci    ename:VK_FORMAT_UNDEFINED, it must: be a format with
3086e5c31af7Sopenharmony_ci    <<potential-format-features, potential format features>> that include
3087e5c31af7Sopenharmony_ci    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
3088e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06586]]
3089e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3090e5c31af7Sopenharmony_ci    fragment output interface state>>, pname:renderPass is
3091e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, and
3092e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat is
3093e5c31af7Sopenharmony_ci    not ename:VK_FORMAT_UNDEFINED, it must: be a format with
3094e5c31af7Sopenharmony_ci    <<potential-format-features, potential format features>> that include
3095e5c31af7Sopenharmony_ci    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
3096e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06587]]
3097e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3098e5c31af7Sopenharmony_ci    fragment output interface state>>, pname:renderPass is
3099e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, and
3100e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat is not
3101e5c31af7Sopenharmony_ci    ename:VK_FORMAT_UNDEFINED, it must: be a format that includes a depth
3102e5c31af7Sopenharmony_ci    component
3103e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06588]]
3104e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3105e5c31af7Sopenharmony_ci    fragment output interface state>>, pname:renderPass is
3106e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, and
3107e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat is
3108e5c31af7Sopenharmony_ci    not ename:VK_FORMAT_UNDEFINED, it must: be a format that includes a
3109e5c31af7Sopenharmony_ci    stencil component
3110e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06589]]
3111e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3112e5c31af7Sopenharmony_ci    fragment output interface state>>, pname:renderPass is
3113e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE,
3114e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat is not
3115e5c31af7Sopenharmony_ci    ename:VK_FORMAT_UNDEFINED, and
3116e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat is
3117e5c31af7Sopenharmony_ci    not ename:VK_FORMAT_UNDEFINED, pname:depthAttachmentFormat must: equal
3118e5c31af7Sopenharmony_ci    pname:stencilAttachmentFormat
3119e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09033]]
3120e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3121e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-fragment-shader, fragment
3122e5c31af7Sopenharmony_ci    shader state>> and <<pipelines-graphics-subsets-fragment-output,
3123e5c31af7Sopenharmony_ci    fragment output interface state>>, and either of
3124e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat or
3125e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat are
3126e5c31af7Sopenharmony_ci    not ename:VK_FORMAT_UNDEFINED,
3127e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
3128e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled
3129e5c31af7Sopenharmony_ci    or any of the ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
3130e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
3131e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
3132e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
3133e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
3134e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_OP, or
3135e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states are not set,
3136e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3137e5c31af7Sopenharmony_ci    pname:pDepthStencilState must: be a valid pointer to a valid
3138e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo structure
3139e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09034]]
3140e5c31af7Sopenharmony_ci    If pname:pDepthStencilState is not `NULL` it must: be a valid pointer to
3141e5c31af7Sopenharmony_ci    a valid slink:VkPipelineDepthStencilStateCreateInfo structure
3142e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
3143e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09035]]
3144e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE and the pipeline is being
3145e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-fragment-shader, fragment
3146e5c31af7Sopenharmony_ci    shader state>> but not <<pipelines-graphics-subsets-fragment-output,
3147e5c31af7Sopenharmony_ci    fragment output interface state>>,
3148e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
3149e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not
3150e5c31af7Sopenharmony_ci    enabled, or any of the ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
3151e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
3152e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
3153e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
3154e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
3155e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_OP, or
3156e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states are not set,
3157e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3158e5c31af7Sopenharmony_ci    pname:pDepthStencilState must: be a valid pointer to a valid
3159e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo structure
3160e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09036]]
3161e5c31af7Sopenharmony_ci    If pname:pDepthStencilState is not `NULL` it must: be a valid pointer to
3162e5c31af7Sopenharmony_ci    a valid slink:VkPipelineDepthStencilStateCreateInfo structure
3163e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
3164e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09037]]
3165e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3166e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-fragment-output, fragment
3167e5c31af7Sopenharmony_ci    output interface state>>, and
3168e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount is not
3169e5c31af7Sopenharmony_ci    equal to `0`,
3170e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
3171e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not
3172e5c31af7Sopenharmony_ci    enabled, or any of the ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT,
3173e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT,
3174e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
3175e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT,
3176e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, or
3177e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic states are not set,
3178e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3179e5c31af7Sopenharmony_ci    pname:pColorBlendState must: be a valid pointer to a valid
3180e5c31af7Sopenharmony_ci    slink:VkPipelineColorBlendStateCreateInfo structure
3181e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pColorBlendState-09038]]
3182e5c31af7Sopenharmony_ci    If pname:pColorBlendState is not `NULL` it must: be a valid pointer to a
3183e5c31af7Sopenharmony_ci    valid slink:VkPipelineColorBlendStateCreateInfo structure
3184e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06055]]
3185e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, pname:pColorBlendState is
3186e5c31af7Sopenharmony_ci    not dynamic, and the pipeline is being created with
3187e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
3188e5c31af7Sopenharmony_ci    state>>, pname:pColorBlendState->attachmentCount must: be equal to
3189e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount
3190e5c31af7Sopenharmony_ciifdef::VK_KHR_multiview,VK_VERSION_1_1[]
3191e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06057]]
3192e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3193e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
3194e5c31af7Sopenharmony_ci    pre-rasterization shader state>>,
3195e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, and the
3196e5c31af7Sopenharmony_ci    <<features-multiview-tess, pname:multiviewTessellationShader>> feature
3197e5c31af7Sopenharmony_ci    is not enabled, then pname:pStages must: not include tessellation
3198e5c31af7Sopenharmony_ci    shaders
3199e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06058]]
3200e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3201e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
3202e5c31af7Sopenharmony_ci    pre-rasterization shader state>>,
3203e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, and the
3204e5c31af7Sopenharmony_ci    <<features-multiview-gs, pname:multiviewGeometryShader>> feature is not
3205e5c31af7Sopenharmony_ci    enabled, then pname:pStages must: not include a geometry shader
3206e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07718]]
3207e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3208e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
3209e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
3210e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, all of
3211e5c31af7Sopenharmony_ci    the shaders in the pipeline must: not write to the code:Layer built-in
3212e5c31af7Sopenharmony_ci    output
3213e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06059]]
3214e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3215e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
3216e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
3217e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, all of
3218e5c31af7Sopenharmony_ci    the shaders in the pipeline must: not include variables decorated with
3219e5c31af7Sopenharmony_ci    the code:Layer built-in decoration in their interfaces
3220e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07719]]
3221e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3222e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
3223e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
3224e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, all of
3225e5c31af7Sopenharmony_ci    the shaders in the pipeline must: not include variables decorated with
3226e5c31af7Sopenharmony_ci    the code:ViewIndex built-in decoration in their interfaces
3227e5c31af7Sopenharmony_ciifdef::VK_EXT_mesh_shader[]
3228e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07720]]
3229e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3230e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
3231e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and
3232e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, and
3233e5c31af7Sopenharmony_ci    pname:multiviewMeshShader is not enabled, then pname:pStages must: not
3234e5c31af7Sopenharmony_ci    include a mesh shader
3235e5c31af7Sopenharmony_ciendif::VK_EXT_mesh_shader[]
3236e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06061]]
3237e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3238e5c31af7Sopenharmony_ci    fragment shader state>> and pname:renderPass is dlink:VK_NULL_HANDLE,
3239e5c31af7Sopenharmony_ci    fragment shaders in pname:pStages must: not include the
3240e5c31af7Sopenharmony_ci    code:InputAttachment capability
3241e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_tile_image[]
3242e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-08710]]
3243e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3244e5c31af7Sopenharmony_ci    fragment shader state>> and pname:renderPass is not
3245e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, fragment shaders in pname:pStages must: not
3246e5c31af7Sopenharmony_ci    include any of the code:TileImageColorReadAccessEXT,
3247e5c31af7Sopenharmony_ci    code:TileImageDepthReadAccessEXT, or code:TileImageStencilReadAccessEXT
3248e5c31af7Sopenharmony_ci    capabilities
3249e5c31af7Sopenharmony_ciendif::VK_EXT_shader_tile_image[]
3250e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06062]]
3251e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3252e5c31af7Sopenharmony_ci    fragment output interface state>> and pname:renderPass is
3253e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, for each color attachment format defined by the
3254e5c31af7Sopenharmony_ci    pname:pColorAttachmentFormats member of
3255e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo, if its
3256e5c31af7Sopenharmony_ci    <<potential-format-features,potential format features>> do not contain
3257e5c31af7Sopenharmony_ci    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
3258e5c31af7Sopenharmony_ci    pname:blendEnable member of the corresponding element of the
3259e5c31af7Sopenharmony_ci    pname:pAttachments member of pname:pColorBlendState must: be
3260e5c31af7Sopenharmony_ci    ename:VK_FALSE
3261e5c31af7Sopenharmony_ciendif::VK_KHR_multiview,VK_VERSION_1_1[]
3262e5c31af7Sopenharmony_ciifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
3263e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06063]]
3264e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3265e5c31af7Sopenharmony_ci    fragment output interface state>> and pname:renderPass is
3266e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, if the pname:pNext chain includes
3267e5c31af7Sopenharmony_ci    slink:VkAttachmentSampleCountInfoAMD or
3268e5c31af7Sopenharmony_ci    sname:VkAttachmentSampleCountInfoNV, the pname:colorAttachmentCount
3269e5c31af7Sopenharmony_ci    member of that structure must: be equal to the value of
3270e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount
3271e5c31af7Sopenharmony_ciendif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
3272e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
3273e5c31af7Sopenharmony_ciifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
3274e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06591]]
3275e5c31af7Sopenharmony_ci    If pname:pStages includes a fragment shader stage, and the fragment
3276e5c31af7Sopenharmony_ci    shader declares the code:EarlyFragmentTests execution mode, the
3277e5c31af7Sopenharmony_ci    pname:flags member of slink:VkPipelineDepthStencilStateCreateInfo must:
3278e5c31af7Sopenharmony_ci    not include
3279e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
3280e5c31af7Sopenharmony_ci    or
3281e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
3282e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
3283e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06482]]
3284e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3285e5c31af7Sopenharmony_ci    fragment output interface state>> and the pname:flags member of
3286e5c31af7Sopenharmony_ci    slink:VkPipelineColorBlendStateCreateInfo includes
3287e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT,
3288e5c31af7Sopenharmony_ci    pname:renderpass must: not be dlink:VK_NULL_HANDLE
3289e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06483]]
3290e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3291e5c31af7Sopenharmony_ci    fragment output interface state>> and the pname:flags member of
3292e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo includes
3293e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
3294e5c31af7Sopenharmony_ci    or
3295e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT,
3296e5c31af7Sopenharmony_ci    pname:renderpass must: not be dlink:VK_NULL_HANDLE
3297e5c31af7Sopenharmony_ciifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
3298e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pColorAttachmentSamples-06592]]
3299e5c31af7Sopenharmony_ci    If the <<pipelines-graphics-subsets-fragment-output, fragment output
3300e5c31af7Sopenharmony_ci    interface state>>, elements of the pname:pColorAttachmentSamples member
3301e5c31af7Sopenharmony_ci    of slink:VkAttachmentSampleCountInfoAMD or
3302e5c31af7Sopenharmony_ci    slink:VkAttachmentSampleCountInfoNV must: be valid
3303e5c31af7Sopenharmony_ci    elink:VkSampleCountFlagBits values
3304e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-depthStencilAttachmentSamples-06593]]
3305e5c31af7Sopenharmony_ci    If the <<pipelines-graphics-subsets-fragment-output, fragment output
3306e5c31af7Sopenharmony_ci    interface state>> and the pname:depthStencilAttachmentSamples member of
3307e5c31af7Sopenharmony_ci    slink:VkAttachmentSampleCountInfoAMD or
3308e5c31af7Sopenharmony_ci    slink:VkAttachmentSampleCountInfoNV is not 0, it must: be a valid
3309e5c31af7Sopenharmony_ci    elink:VkSampleCountFlagBits value
3310e5c31af7Sopenharmony_ciendif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
3311e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
3312e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06484]]
3313e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
3314e5c31af7Sopenharmony_ci    fragment output interface state>> and the pname:flags member of
3315e5c31af7Sopenharmony_ci    slink:VkPipelineColorBlendStateCreateInfo includes
3316e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT
3317e5c31af7Sopenharmony_ci    pname:subpass must: have been created with
3318e5c31af7Sopenharmony_ci    ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT
3319e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06485]]
3320e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3321e5c31af7Sopenharmony_ci    fragment shader state>> and the pname:flags member of
3322e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo includes
3323e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT,
3324e5c31af7Sopenharmony_ci    pname:subpass must: have been created with
3325e5c31af7Sopenharmony_ci    ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
3326e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06486]]
3327e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3328e5c31af7Sopenharmony_ci    fragment shader state>> and the pname:flags member of
3329e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo includes
3330e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT,
3331e5c31af7Sopenharmony_ci    pname:subpass must: have been created with
3332e5c31af7Sopenharmony_ci    ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
3333e5c31af7Sopenharmony_ciendif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
3334e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
3335e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pipelineStageCreationFeedbackCount-06594]]
3336e5c31af7Sopenharmony_ci    If
3337e5c31af7Sopenharmony_ci    slink:VkPipelineCreationFeedbackCreateInfo::pname:pipelineStageCreationFeedbackCount
3338e5c31af7Sopenharmony_ci    is not `0`, it must: be equal to pname:stageCount
3339e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
3340e5c31af7Sopenharmony_ciifdef::VK_NVX_multiview_per_view_attributes[]
3341e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06595]]
3342e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
3343e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-pre-rasterization,
3344e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
3345e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
3346e5c31af7Sopenharmony_ci    and
3347e5c31af7Sopenharmony_ci    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributesPositionXOnly
3348e5c31af7Sopenharmony_ci    is ename:VK_TRUE then
3349e5c31af7Sopenharmony_ci    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributes must:
3350e5c31af7Sopenharmony_ci    also be ename:VK_TRUE
3351e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06596]]
3352e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3353e5c31af7Sopenharmony_ci    only one of
3354e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3355e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
3356e5c31af7Sopenharmony_ci    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3357e5c31af7Sopenharmony_ci    includes the other flag, the value of
3358e5c31af7Sopenharmony_ci    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributes
3359e5c31af7Sopenharmony_ci    specified in both this pipeline and the library must: be equal
3360e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06597]]
3361e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3362e5c31af7Sopenharmony_ci    includes
3363e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3364e5c31af7Sopenharmony_ci    another element includes
3365e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the value of
3366e5c31af7Sopenharmony_ci    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributes
3367e5c31af7Sopenharmony_ci    specified in both libraries must: be equal
3368e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06598]]
3369e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3370e5c31af7Sopenharmony_ci    only one of
3371e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3372e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
3373e5c31af7Sopenharmony_ci    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3374e5c31af7Sopenharmony_ci    includes the other flag, the value of
3375e5c31af7Sopenharmony_ci    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributesPositionXOnly
3376e5c31af7Sopenharmony_ci    specified in both this pipeline and the library must: be equal
3377e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06599]]
3378e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3379e5c31af7Sopenharmony_ci    includes
3380e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3381e5c31af7Sopenharmony_ci    another element includes
3382e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the value of
3383e5c31af7Sopenharmony_ci    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributesPositionXOnly
3384e5c31af7Sopenharmony_ci    specified in both libraries must: be equal
3385e5c31af7Sopenharmony_ciendif::VK_NVX_multiview_per_view_attributes[]
3386e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-06600]]
3387e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3388e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
3389e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
3390e5c31af7Sopenharmony_ci    pname:pStages must: be a valid pointer to an array of pname:stageCount
3391e5c31af7Sopenharmony_ci    valid slink:VkPipelineShaderStageCreateInfo structures
3392e5c31af7Sopenharmony_ciifndef::VK_EXT_extended_dynamic_state3[]
3393e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-06601]]
3394e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3395e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, pname:pRasterizationState must: be a
3396e5c31af7Sopenharmony_ci    valid pointer to a valid slink:VkPipelineRasterizationStateCreateInfo
3397e5c31af7Sopenharmony_ci    structure
3398e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3399e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
3400e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-09039]]
3401e5c31af7Sopenharmony_ci    If
3402e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
3403e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3404e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3405e5c31af7Sopenharmony_ci    and
3406e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
3407e5c31af7Sopenharmony_ci    the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled, or
3408e5c31af7Sopenharmony_ci    any of the ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
3409e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or
3410e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states are
3411e5c31af7Sopenharmony_ci    not set, or <<features-alphaToOne,alphaToOne>> is enabled on the device
3412e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set, then
3413e5c31af7Sopenharmony_ci    pname:pMultisampleState must: be a valid pointer to a valid
3414e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo structure
3415e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-09040]]
3416e5c31af7Sopenharmony_ci    If pname:pRasterizationState is not `NULL` it must: be a valid pointer
3417e5c31af7Sopenharmony_ci    to a valid slink:VkPipelineRasterizationStateCreateInfo structure
3418e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3419e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-layout-06602]]
3420e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3421e5c31af7Sopenharmony_ci    fragment shader state>> or
3422e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
3423e5c31af7Sopenharmony_ci    state>>, pname:layout must: be a valid slink:VkPipelineLayout handle
3424e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06603]]
3425e5c31af7Sopenharmony_ci    If <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization
3426e5c31af7Sopenharmony_ci    shader state>>, <<pipelines-graphics-subsets-fragment-shader, fragment
3427e5c31af7Sopenharmony_ci    shader state>>, or <<pipelines-graphics-subsets-fragment-output,
3428e5c31af7Sopenharmony_ci    fragment output state>>,
3429e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
3430e5c31af7Sopenharmony_ci    and pname:renderPass is not dlink:VK_NULL_HANDLE,
3431e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
3432e5c31af7Sopenharmony_ci    pname:renderPass must: be a valid slink:VkRenderPass handle
3433e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-stageCount-06604]]
3434e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3435e5c31af7Sopenharmony_ci    pre-rasterization shader state>> or
3436e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
3437e5c31af7Sopenharmony_ci    pname:stageCount must: be greater than `0`
3438e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
3439e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-graphicsPipelineLibrary-06606]]
3440e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
3441e5c31af7Sopenharmony_ci    If the <<features-graphicsPipelineLibrary,
3442e5c31af7Sopenharmony_ci    pname:graphicsPipelineLibrary>> feature is not enabled,
3443e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
3444e5c31af7Sopenharmony_ci    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
3445e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
3446e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
3447e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06608]]
3448e5c31af7Sopenharmony_ci    If the pipeline defines, or includes as libraries, all the state subsets
3449e5c31af7Sopenharmony_ci    required for a <<pipelines-graphics-subsets-complete, complete graphics
3450e5c31af7Sopenharmony_ci    pipeline>>, pname:flags must: not include
3451e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
3452e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06609]]
3453e5c31af7Sopenharmony_ci    If pname:flags includes
3454e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, pipeline
3455e5c31af7Sopenharmony_ci    libraries included via slink:VkPipelineLibraryCreateInfoKHR must: have
3456e5c31af7Sopenharmony_ci    been created with
3457e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
3458e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-09245]]
3459e5c31af7Sopenharmony_ci    If pname:flags includes
3460e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT,
3461e5c31af7Sopenharmony_ci    pname:flags must: also include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
3462e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06610]]
3463e5c31af7Sopenharmony_ci    If pname:flags includes
3464e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT,
3465e5c31af7Sopenharmony_ci    pipeline libraries included via slink:VkPipelineLibraryCreateInfoKHR
3466e5c31af7Sopenharmony_ci    must: have been created with
3467e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
3468e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06611]]
3469e5c31af7Sopenharmony_ci    Any pipeline libraries included via
3470e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries must: not include
3471e5c31af7Sopenharmony_ci    any <<pipelines-graphics-subsets, state subset>> already defined by this
3472e5c31af7Sopenharmony_ci    structure or defined by any other pipeline library in
3473e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3474e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06612]]
3475e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3476e5c31af7Sopenharmony_ci    only one of
3477e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3478e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
3479e5c31af7Sopenharmony_ci    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3480e5c31af7Sopenharmony_ci    includes the other flag, and pname:layout was not created with
3481e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the
3482e5c31af7Sopenharmony_ci    pname:layout used by this pipeline and the library must: be _identically
3483e5c31af7Sopenharmony_ci    defined_
3484e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06613]]
3485e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3486e5c31af7Sopenharmony_ci    includes
3487e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3488e5c31af7Sopenharmony_ci    another element includes
3489e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the
3490e5c31af7Sopenharmony_ci    pname:layout specified by either library was not created with
3491e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the
3492e5c31af7Sopenharmony_ci    pname:layout used by each library must: be _identically defined_
3493e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06614]]
3494e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3495e5c31af7Sopenharmony_ci    only one of
3496e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3497e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
3498e5c31af7Sopenharmony_ci    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
3499e5c31af7Sopenharmony_ci    other subset, and pname:layout was created with
3500e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the
3501e5c31af7Sopenharmony_ci    pname:layout used by the library must: also have been created with
3502e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT
3503e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06615]]
3504e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3505e5c31af7Sopenharmony_ci    includes
3506e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3507e5c31af7Sopenharmony_ci    another element includes
3508e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the
3509e5c31af7Sopenharmony_ci    pname:layout specified by either library was created with
3510e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the
3511e5c31af7Sopenharmony_ci    pname:layout used by both libraries must: have been created with
3512e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT
3513e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06616]]
3514e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3515e5c31af7Sopenharmony_ci    only one of
3516e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3517e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
3518e5c31af7Sopenharmony_ci    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
3519e5c31af7Sopenharmony_ci    other subset, and pname:layout was created with
3520e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, elements of
3521e5c31af7Sopenharmony_ci    the pname:pSetLayouts array which pname:layout was created with that are
3522e5c31af7Sopenharmony_ci    not dlink:VK_NULL_HANDLE must: be _identically defined_ to the element
3523e5c31af7Sopenharmony_ci    at the same index of pname:pSetLayouts used to create the library's
3524e5c31af7Sopenharmony_ci    pname:layout
3525e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06617]]
3526e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3527e5c31af7Sopenharmony_ci    includes
3528e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3529e5c31af7Sopenharmony_ci    another element includes
3530e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the
3531e5c31af7Sopenharmony_ci    pname:layout specified by either library was created with
3532e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, elements of
3533e5c31af7Sopenharmony_ci    the pname:pSetLayouts array which either pname:layout was created with
3534e5c31af7Sopenharmony_ci    that are not dlink:VK_NULL_HANDLE must: be _identically defined_ to the
3535e5c31af7Sopenharmony_ci    element at the same index of pname:pSetLayouts used to create the other
3536e5c31af7Sopenharmony_ci    library's pname:layout
3537e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06618]]
3538e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3539e5c31af7Sopenharmony_ci    only one of
3540e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3541e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
3542e5c31af7Sopenharmony_ci    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3543e5c31af7Sopenharmony_ci    includes the other flag, any descriptor set layout _N_ specified by
3544e5c31af7Sopenharmony_ci    pname:layout in both this pipeline and the library which include
3545e5c31af7Sopenharmony_ci    bindings accessed by shader stages in each must: be _identically
3546e5c31af7Sopenharmony_ci    defined_
3547e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06619]]
3548e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3549e5c31af7Sopenharmony_ci    includes
3550e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3551e5c31af7Sopenharmony_ci    another element includes
3552e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, any
3553e5c31af7Sopenharmony_ci    descriptor set layout _N_ specified by pname:layout in both libraries
3554e5c31af7Sopenharmony_ci    which include bindings accessed by shader stages in each must: be
3555e5c31af7Sopenharmony_ci    _identically defined_
3556e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06620]]
3557e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3558e5c31af7Sopenharmony_ci    only one of
3559e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3560e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
3561e5c31af7Sopenharmony_ci    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3562e5c31af7Sopenharmony_ci    includes the other flag, push constants specified in pname:layout in
3563e5c31af7Sopenharmony_ci    both this pipeline and the library which are available to shader stages
3564e5c31af7Sopenharmony_ci    in each must: be _identically defined_
3565e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06621]]
3566e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3567e5c31af7Sopenharmony_ci    includes
3568e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3569e5c31af7Sopenharmony_ci    another element includes
3570e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, push
3571e5c31af7Sopenharmony_ci    constants specified in pname:layout in both this pipeline and the
3572e5c31af7Sopenharmony_ci    library which are available to shader stages in each must: be
3573e5c31af7Sopenharmony_ci    _identically defined_
3574e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06679]]
3575e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3576e5c31af7Sopenharmony_ci    only one of
3577e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3578e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
3579e5c31af7Sopenharmony_ci    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
3580e5c31af7Sopenharmony_ci    other subset, any element of the pname:pSetLayouts array when
3581e5c31af7Sopenharmony_ci    pname:layout was created and the corresponding element of the
3582e5c31af7Sopenharmony_ci    pname:pSetLayouts array used to create the library's pname:layout must:
3583e5c31af7Sopenharmony_ci    not both be dlink:VK_NULL_HANDLE
3584e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06681]]
3585e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3586e5c31af7Sopenharmony_ci    includes
3587e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3588e5c31af7Sopenharmony_ci    another element includes
3589e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and any
3590e5c31af7Sopenharmony_ci    element of the pname:pSetLayouts array used to create each library's
3591e5c31af7Sopenharmony_ci    pname:layout was dlink:VK_NULL_HANDLE, then the corresponding element of
3592e5c31af7Sopenharmony_ci    the pname:pSetLayouts array used to create the other library's
3593e5c31af7Sopenharmony_ci    pname:layout must: not be dlink:VK_NULL_HANDLE
3594e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06756]]
3595e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3596e5c31af7Sopenharmony_ci    only one of
3597e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3598e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
3599e5c31af7Sopenharmony_ci    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
3600e5c31af7Sopenharmony_ci    other subset, and any element of the pname:pSetLayouts array which
3601e5c31af7Sopenharmony_ci    pname:layout was created with was dlink:VK_NULL_HANDLE, then the
3602e5c31af7Sopenharmony_ci    corresponding element of the pname:pSetLayouts array used to create the
3603e5c31af7Sopenharmony_ci    library's pname:layout must: not have shader bindings for shaders in the
3604e5c31af7Sopenharmony_ci    other subset
3605e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06757]]
3606e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3607e5c31af7Sopenharmony_ci    only one of
3608e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3609e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
3610e5c31af7Sopenharmony_ci    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
3611e5c31af7Sopenharmony_ci    other subset, and any element of the pname:pSetLayouts array used to
3612e5c31af7Sopenharmony_ci    create the library's pname:layout was dlink:VK_NULL_HANDLE, then the
3613e5c31af7Sopenharmony_ci    corresponding element of the pname:pSetLayouts array used to create this
3614e5c31af7Sopenharmony_ci    pipeline's pname:layout must: not have shader bindings for shaders in
3615e5c31af7Sopenharmony_ci    the other subset
3616e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06758]]
3617e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3618e5c31af7Sopenharmony_ci    includes
3619e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3620e5c31af7Sopenharmony_ci    another element includes
3621e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and any
3622e5c31af7Sopenharmony_ci    element of the pname:pSetLayouts array used to create each library's
3623e5c31af7Sopenharmony_ci    pname:layout was dlink:VK_NULL_HANDLE, then the corresponding element of
3624e5c31af7Sopenharmony_ci    the pname:pSetLayouts array used to create the other library's
3625e5c31af7Sopenharmony_ci    pname:layout must: not have shader bindings for shaders in the other
3626e5c31af7Sopenharmony_ci    subset
3627e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06682]]
3628e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3629e5c31af7Sopenharmony_ci    both
3630e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3631e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pname:layout
3632e5c31af7Sopenharmony_ci    must: have been created with no elements of the pname:pSetLayouts array
3633e5c31af7Sopenharmony_ci    set to dlink:VK_NULL_HANDLE
3634e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06683]]
3635e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3636e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3637e5c31af7Sopenharmony_ci    pname:pRasterizationState->rasterizerDiscardEnable is ename:VK_TRUE,
3638e5c31af7Sopenharmony_ci    pname:layout must: have been created with no elements of the
3639e5c31af7Sopenharmony_ci    pname:pSetLayouts array set to dlink:VK_NULL_HANDLE
3640e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06684]]
3641e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes at
3642e5c31af7Sopenharmony_ci    least one of and no more than two of
3643e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3644e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
3645e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3646e5c31af7Sopenharmony_ci    and an element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3647e5c31af7Sopenharmony_ci    includes one of the other flags, the value of pname:subpass must: be
3648e5c31af7Sopenharmony_ci    equal to that used to create the library
3649e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06623]]
3650e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3651e5c31af7Sopenharmony_ci    includes at least one of and no more than two of
3652e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3653e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
3654e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3655e5c31af7Sopenharmony_ci    and another element of
3656e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes one of
3657e5c31af7Sopenharmony_ci    the other flags, the value of pname:subpass used to create each library
3658e5c31af7Sopenharmony_ci    must: be identical
3659e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderpass-06624]]
3660e5c31af7Sopenharmony_ci    If pname:renderpass is not dlink:VK_NULL_HANDLE,
3661e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes at
3662e5c31af7Sopenharmony_ci    least one of and no more than two of
3663e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3664e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
3665e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3666e5c31af7Sopenharmony_ci    and an element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3667e5c31af7Sopenharmony_ci    includes one of the other flags, pname:renderPass must: be compatible
3668e5c31af7Sopenharmony_ci    with that used to create the library
3669e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
3670e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderpass-06625]]
3671e5c31af7Sopenharmony_ci    If pname:renderpass is dlink:VK_NULL_HANDLE,
3672e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes at
3673e5c31af7Sopenharmony_ci    least one of and no more than two of
3674e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3675e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
3676e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3677e5c31af7Sopenharmony_ci    and an element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3678e5c31af7Sopenharmony_ci    includes one of the other flags, the value of pname:renderPass used to
3679e5c31af7Sopenharmony_ci    create that library must: also be dlink:VK_NULL_HANDLE
3680e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06626]]
3681e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes at
3682e5c31af7Sopenharmony_ci    least one of and no more than two of
3683e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3684e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
3685e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, an
3686e5c31af7Sopenharmony_ci    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3687e5c31af7Sopenharmony_ci    includes one of the other flags, and pname:renderPass is
3688e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE, the value of
3689e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask used by this
3690e5c31af7Sopenharmony_ci    pipeline and that specified by the library must: be identical
3691e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06627]]
3692e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3693e5c31af7Sopenharmony_ci    includes at least one of and no more than two of
3694e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3695e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
3696e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3697e5c31af7Sopenharmony_ci    another element of
3698e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes one of
3699e5c31af7Sopenharmony_ci    the other flags, and pname:renderPass was dlink:VK_NULL_HANDLE for both
3700e5c31af7Sopenharmony_ci    libraries, the value of
3701e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask set by each library
3702e5c31af7Sopenharmony_ci    must: be identical
3703e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06628]]
3704e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3705e5c31af7Sopenharmony_ci    includes at least one of and no more than two of
3706e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3707e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
3708e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3709e5c31af7Sopenharmony_ci    and another element of
3710e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes one of
3711e5c31af7Sopenharmony_ci    the other flags, the pname:renderPass objects used to create each
3712e5c31af7Sopenharmony_ci    library must: be compatible or all equal to dlink:VK_NULL_HANDLE
3713e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderpass-06631]]
3714e5c31af7Sopenharmony_ci    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline requires
3715e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
3716e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
3717e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled
3718e5c31af7Sopenharmony_ci    or any of the ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
3719e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or
3720e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states is
3721e5c31af7Sopenharmony_ci    not set, or <<features-alphaToOne,alphaToOne>> is enabled on the device
3722e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set,
3723e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3724e5c31af7Sopenharmony_ci    then pname:pMultisampleState must: be a valid pointer to a valid
3725e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo structure
3726e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-Input-06632]]
3727e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3728e5c31af7Sopenharmony_ci    fragment shader state>> with a fragment shader that either enables
3729e5c31af7Sopenharmony_ci    <<primsrast-sampleshading, sample shading>> or decorates any variable in
3730e5c31af7Sopenharmony_ci    the code:Input storage class with code:Sample,
3731e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
3732e5c31af7Sopenharmony_ci    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled
3733e5c31af7Sopenharmony_ci    or any of the ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
3734e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or
3735e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states is
3736e5c31af7Sopenharmony_ci    not set, or <<features-alphaToOne,alphaToOne>> is enabled on the device
3737e5c31af7Sopenharmony_ci    and ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set,
3738e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3739e5c31af7Sopenharmony_ci    then pname:pMultisampleState must: be a valid pointer to a valid
3740e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo structure
3741e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
3742e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06633]]
3743e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3744e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a
3745e5c31af7Sopenharmony_ci    pname:pMultisampleState that was not `NULL`, and an element of
3746e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries was created with
3747e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3748e5c31af7Sopenharmony_ci    pname:pMultisampleState must: be _identically defined_ to that used to
3749e5c31af7Sopenharmony_ci    create the library
3750e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06634]]
3751e5c31af7Sopenharmony_ci    If an element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3752e5c31af7Sopenharmony_ci    was created with
3753e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a
3754e5c31af7Sopenharmony_ci    pname:pMultisampleState that was not `NULL`, and if
3755e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3756e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3757e5c31af7Sopenharmony_ci    pname:pMultisampleState must: be _identically defined_ to that used to
3758e5c31af7Sopenharmony_ci    create the library
3759e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06635]]
3760e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3761e5c31af7Sopenharmony_ci    was created with
3762e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a
3763e5c31af7Sopenharmony_ci    pname:pMultisampleState that was not `NULL`, and if a different element
3764e5c31af7Sopenharmony_ci    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries was created
3765e5c31af7Sopenharmony_ci    with
3766e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3767e5c31af7Sopenharmony_ci    the pname:pMultisampleState used to create each library must: be
3768e5c31af7Sopenharmony_ci    _identically defined_
3769e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06636]]
3770e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3771e5c31af7Sopenharmony_ci    was created with
3772e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT and
3773e5c31af7Sopenharmony_ci    a value of pname:pMultisampleState->sampleShading equal ename:VK_TRUE,
3774e5c31af7Sopenharmony_ci    and if a different element of
3775e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries was created with
3776e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the
3777e5c31af7Sopenharmony_ci    pname:pMultisampleState used to create each library must: be
3778e5c31af7Sopenharmony_ci    _identically defined_
3779e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06637]]
3780e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3781e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3782e5c31af7Sopenharmony_ci    pname:pMultisampleState->sampleShading is ename:VK_TRUE, and an element
3783e5c31af7Sopenharmony_ci    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries was created
3784e5c31af7Sopenharmony_ci    with ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the
3785e5c31af7Sopenharmony_ci    pname:pMultisampleState used to create that library must: be
3786e5c31af7Sopenharmony_ci    _identically defined_ pname:pMultisampleState
3787e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
3788e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06638]]
3789e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3790e5c31af7Sopenharmony_ci    only one of
3791e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3792e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
3793e5c31af7Sopenharmony_ci    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3794e5c31af7Sopenharmony_ci    includes the other flag, values specified in
3795e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR for both this
3796e5c31af7Sopenharmony_ci    pipeline and that library must: be identical
3797e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06639]]
3798e5c31af7Sopenharmony_ci    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
3799e5c31af7Sopenharmony_ci    includes
3800e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
3801e5c31af7Sopenharmony_ci    another element includes
3802e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, values
3803e5c31af7Sopenharmony_ci    specified in slink:VkPipelineFragmentShadingRateStateCreateInfoKHR for
3804e5c31af7Sopenharmony_ci    both this pipeline and that library must: be identical
3805e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
3806e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06640]]
3807e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3808e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3809e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
3810e5c31af7Sopenharmony_ci    pname:pStages must: be a valid pointer to an array of pname:stageCount
3811e5c31af7Sopenharmony_ci    valid slink:VkPipelineShaderStageCreateInfo structures
3812e5c31af7Sopenharmony_ciifndef::VK_EXT_extended_dynamic_state3[]
3813e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06641]]
3814e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3815e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
3816e5c31af7Sopenharmony_ci    pname:pRasterizationState must: be a valid pointer to a valid
3817e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateCreateInfo structure
3818e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3819e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06642]]
3820e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3821e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3822e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pname:layout
3823e5c31af7Sopenharmony_ci    must: be a valid slink:VkPipelineLayout handle
3824e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06643]]
3825e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3826e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, or
3827e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
3828e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
3829e5c31af7Sopenharmony_ci    and pname:renderPass is not dlink:VK_NULL_HANDLE, pname:renderPass must:
3830e5c31af7Sopenharmony_ci    be a valid slink:VkRenderPass handle
3831e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06644]]
3832e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
3833e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
3834e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
3835e5c31af7Sopenharmony_ci    pname:stageCount must: be greater than `0`
3836e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_executable_properties[]
3837e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06645]]
3838e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags is
3839e5c31af7Sopenharmony_ci    non-zero, if pname:flags includes
3840e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, any
3841e5c31af7Sopenharmony_ci    libraries must: have also been created with
3842e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
3843e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06646]]
3844e5c31af7Sopenharmony_ci    If slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes more
3845e5c31af7Sopenharmony_ci    than one library, and any library was created with
3846e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, all
3847e5c31af7Sopenharmony_ci    libraries must: have also been created with
3848e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
3849e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06647]]
3850e5c31af7Sopenharmony_ci    If slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes at
3851e5c31af7Sopenharmony_ci    least one library,
3852e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags is non-zero,
3853e5c31af7Sopenharmony_ci    and any library was created with
3854e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR,
3855e5c31af7Sopenharmony_ci    pname:flags must: include
3856e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
3857e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_executable_properties[]
3858e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-None-07826]]
3859e5c31af7Sopenharmony_ci    If the pipeline includes a <<pipelines-graphics-subsets-complete,
3860e5c31af7Sopenharmony_ci    complete set of state>>, and there are no libraries included in
3861e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries, then
3862e5c31af7Sopenharmony_ci    slink:VkPipelineLayout must: be a valid pipeline layout
3863e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-layout-07827]]
3864e5c31af7Sopenharmony_ci    If the pipeline includes a <<pipelines-graphics-subsets-complete,
3865e5c31af7Sopenharmony_ci    complete set of state>> specified entirely by libraries, and each
3866e5c31af7Sopenharmony_ci    library was created with a slink:VkPipelineLayout created without
3867e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then
3868e5c31af7Sopenharmony_ci    pname:layout must: be <<descriptorsets-compatibility,compatible>> with
3869e5c31af7Sopenharmony_ci    the layouts in those libraries
3870e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06729]]
3871e5c31af7Sopenharmony_ci    If pname:flags includes
3872e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, the pipeline
3873e5c31af7Sopenharmony_ci    includes a <<pipelines-graphics-subsets-complete, complete set of
3874e5c31af7Sopenharmony_ci    state>> specified entirely by libraries, and each library was created
3875e5c31af7Sopenharmony_ci    with a slink:VkPipelineLayout created with
3876e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then
3877e5c31af7Sopenharmony_ci    pname:layout must: be <<descriptorsets-compatibility,compatible>> with
3878e5c31af7Sopenharmony_ci    the union of the libraries' pipeline layouts other than the
3879e5c31af7Sopenharmony_ci    inclusion/exclusion of
3880e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT
3881e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06730]]
3882e5c31af7Sopenharmony_ci    If pname:flags does not include
3883e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, the pipeline
3884e5c31af7Sopenharmony_ci    includes a <<pipelines-graphics-subsets-complete, complete set of
3885e5c31af7Sopenharmony_ci    state>> specified entirely by libraries, and each library was created
3886e5c31af7Sopenharmony_ci    with a slink:VkPipelineLayout created with
3887e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then
3888e5c31af7Sopenharmony_ci    pname:layout must: be <<descriptorsets-compatibility, compatible>> with
3889e5c31af7Sopenharmony_ci    the union of the libraries' pipeline layouts
3890e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
3891e5c31af7Sopenharmony_ciifdef::VK_EXT_conservative_rasterization[]
3892e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-08892]]
3893e5c31af7Sopenharmony_ci    If <<limits-conservativePointAndLineRasterization,
3894e5c31af7Sopenharmony_ci    pname:conservativePointAndLineRasterization>> is not supported; the
3895e5c31af7Sopenharmony_ci    pipeline is being created with
3896e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
3897e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
3898e5c31af7Sopenharmony_ci    state>>; the pipeline does not include a geometry shader; and the value
3899e5c31af7Sopenharmony_ci    of slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology is
3900e5c31af7Sopenharmony_ci    ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
3901e5c31af7Sopenharmony_ci    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, or
3902e5c31af7Sopenharmony_ci    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
3903e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
3904e5c31af7Sopenharmony_ci    and either ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is
3905e5c31af7Sopenharmony_ci    not enabled or
3906e5c31af7Sopenharmony_ci    <<limits-dynamicPrimitiveTopologyUnrestricted,pname:dynamicPrimitiveTopologyUnrestricted>>
3907e5c31af7Sopenharmony_ci    is ename:VK_FALSE,
3908e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
3909e5c31af7Sopenharmony_ci    then
3910e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
3911e5c31af7Sopenharmony_ci    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
3912e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-06760]]
3913e5c31af7Sopenharmony_ci    If <<limits-conservativePointAndLineRasterization,
3914e5c31af7Sopenharmony_ci    pname:conservativePointAndLineRasterization>> is not supported, the
3915e5c31af7Sopenharmony_ci    pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3916e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and the pipeline includes a geometry
3917e5c31af7Sopenharmony_ci    shader with either the code:OutputPoints or code:OutputLineStrip
3918e5c31af7Sopenharmony_ci    execution modes,
3919e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
3920e5c31af7Sopenharmony_ci    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
3921e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader[]
3922e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-06761]]
3923e5c31af7Sopenharmony_ci    If <<limits-conservativePointAndLineRasterization,
3924e5c31af7Sopenharmony_ci    pname:conservativePointAndLineRasterization>> is not supported, the
3925e5c31af7Sopenharmony_ci    pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3926e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and the pipeline includes a mesh
3927e5c31af7Sopenharmony_ci    shader with either the code:OutputPoints or code:OutputLinesNV execution
3928e5c31af7Sopenharmony_ci    modes,
3929e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
3930e5c31af7Sopenharmony_ci    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
3931e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader[]
3932e5c31af7Sopenharmony_ciendif::VK_EXT_conservative_rasterization[]
3933e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-06894]]
3934e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3935e5c31af7Sopenharmony_ci    pre-rasterization shader state>> but not
3936e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
3937e5c31af7Sopenharmony_ci    elements of pname:pStages must: not have pname:stage set to
3938e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_FRAGMENT_BIT
3939e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-06895]]
3940e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3941e5c31af7Sopenharmony_ci    fragment shader state>> but not
3942e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
3943e5c31af7Sopenharmony_ci    state>>, elements of pname:pStages must: not have pname:stage set to a
3944e5c31af7Sopenharmony_ci    shader stage which participates in pre-rasterization
3945e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-06896]]
3946e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
3947e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, all elements of pname:pStages must:
3948e5c31af7Sopenharmony_ci    have a pname:stage set to a shader stage which participates in
3949e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>> or
3950e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
3951e5c31af7Sopenharmony_ci    state>>
3952e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-stage-06897]]
3953e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
3954e5c31af7Sopenharmony_ci    fragment shader state>> and/or
3955e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
3956e5c31af7Sopenharmony_ci    state>>, any value of pname:stage must: not be set in more than one
3957e5c31af7Sopenharmony_ci    element of pname:pStages
3958e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
3959e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3TessellationDomainOrigin-07370]]
3960e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3TessellationDomainOrigin,
3961e5c31af7Sopenharmony_ci    pname:extendedDynamicState3TessellationDomainOrigin>> feature is not
3962e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
3963e5c31af7Sopenharmony_ci    pname:pDynamicState set to
3964e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT
3965e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClampEnable-07371]]
3966e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3DepthClampEnable,
3967e5c31af7Sopenharmony_ci    pname:extendedDynamicState3DepthClampEnable>> feature is not enabled,
3968e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
3969e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT
3970e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3PolygonMode-07372]]
3971e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3PolygonMode,
3972e5c31af7Sopenharmony_ci    pname:extendedDynamicState3PolygonMode>> feature is not enabled, there
3973e5c31af7Sopenharmony_ci    must: be no element of the pname:pDynamicStates member of
3974e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT
3975e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RasterizationSamples-07373]]
3976e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3RasterizationSamples,
3977e5c31af7Sopenharmony_ci    pname:extendedDynamicState3RasterizationSamples>> feature is not
3978e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
3979e5c31af7Sopenharmony_ci    pname:pDynamicState set to
3980e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
3981e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3SampleMask-07374]]
3982e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3SampleMask,
3983e5c31af7Sopenharmony_ci    pname:extendedDynamicState3SampleMask>> feature is not enabled, there
3984e5c31af7Sopenharmony_ci    must: be no element of the pname:pDynamicStates member of
3985e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT
3986e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3AlphaToCoverageEnable-07375]]
3987e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3AlphaToCoverageEnable,
3988e5c31af7Sopenharmony_ci    pname:extendedDynamicState3AlphaToCoverageEnable>> feature is not
3989e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
3990e5c31af7Sopenharmony_ci    pname:pDynamicState set to
3991e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT
3992e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3AlphaToOneEnable-07376]]
3993e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3AlphaToOneEnable,
3994e5c31af7Sopenharmony_ci    pname:extendedDynamicState3AlphaToOneEnable>> feature is not enabled,
3995e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
3996e5c31af7Sopenharmony_ci    pname:pDynamicState set to
3997e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT
3998e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LogicOpEnable-07377]]
3999e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3LogicOpEnable,
4000e5c31af7Sopenharmony_ci    pname:extendedDynamicState3LogicOpEnable>> feature is not enabled, there
4001e5c31af7Sopenharmony_ci    must: be no element of the pname:pDynamicStates member of
4002e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT
4003e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendEnable-07378]]
4004e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ColorBlendEnable,
4005e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ColorBlendEnable>> feature is not enabled,
4006e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4007e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
4008e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendEquation-07379]]
4009e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ColorBlendEquation,
4010e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ColorBlendEquation>> feature is not enabled,
4011e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4012e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4013e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT
4014e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorWriteMask-07380]]
4015e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ColorWriteMask,
4016e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ColorWriteMask>> feature is not enabled,
4017e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4018e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT
4019e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RasterizationStream-07381]]
4020e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3RasterizationStream,
4021e5c31af7Sopenharmony_ci    pname:extendedDynamicState3RasterizationStream>> feature is not enabled,
4022e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4023e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4024e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT
4025e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ConservativeRasterizationMode-07382]]
4026e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ConservativeRasterizationMode,
4027e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ConservativeRasterizationMode>> feature is
4028e5c31af7Sopenharmony_ci    not enabled, there must: be no element of the pname:pDynamicStates
4029e5c31af7Sopenharmony_ci    member of pname:pDynamicState set to
4030e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT
4031e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ExtraPrimitiveOverestimationSize-07383]]
4032e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ExtraPrimitiveOverestimationSize,
4033e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ExtraPrimitiveOverestimationSize>> feature is
4034e5c31af7Sopenharmony_ci    not enabled, there must: be no element of the pname:pDynamicStates
4035e5c31af7Sopenharmony_ci    member of pname:pDynamicState set to
4036e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT
4037e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClipEnable-07384]]
4038e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3DepthClipEnable,
4039e5c31af7Sopenharmony_ci    pname:extendedDynamicState3DepthClipEnable>> feature is not enabled,
4040e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4041e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT
4042e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3SampleLocationsEnable-07385]]
4043e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3SampleLocationsEnable,
4044e5c31af7Sopenharmony_ci    pname:extendedDynamicState3SampleLocationsEnable>> feature is not
4045e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4046e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4047e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
4048e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendAdvanced-07386]]
4049e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ColorBlendAdvanced,
4050e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ColorBlendAdvanced>> feature is not enabled,
4051e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4052e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4053e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT
4054e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ProvokingVertexMode-07387]]
4055e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ProvokingVertexMode,
4056e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ProvokingVertexMode>> feature is not enabled,
4057e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4058e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4059e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT
4060e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LineRasterizationMode-07388]]
4061e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3LineRasterizationMode,
4062e5c31af7Sopenharmony_ci    pname:extendedDynamicState3LineRasterizationMode>> feature is not
4063e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4064e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4065e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
4066e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LineStippleEnable-07389]]
4067e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3LineStippleEnable,
4068e5c31af7Sopenharmony_ci    pname:extendedDynamicState3LineStippleEnable>> feature is not enabled,
4069e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4070e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4071e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT
4072e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClipNegativeOneToOne-07390]]
4073e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3DepthClipNegativeOneToOne,
4074e5c31af7Sopenharmony_ci    pname:extendedDynamicState3DepthClipNegativeOneToOne>> feature is not
4075e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4076e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4077e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT
4078e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ViewportWScalingEnable-07391]]
4079e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ViewportWScalingEnable,
4080e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ViewportWScalingEnable>> feature is not
4081e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4082e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4083e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV
4084e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ViewportSwizzle-07392]]
4085e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ViewportSwizzle,
4086e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ViewportSwizzle>> feature is not enabled,
4087e5c31af7Sopenharmony_ci    there must: be no element of the pname:pDynamicStates member of
4088e5c31af7Sopenharmony_ci    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
4089e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageToColorEnable-07393]]
4090e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3CoverageToColorEnable,
4091e5c31af7Sopenharmony_ci    pname:extendedDynamicState3CoverageToColorEnable>> feature is not
4092e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4093e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4094e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV
4095e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageToColorLocation-07394]]
4096e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3CoverageToColorLocation,
4097e5c31af7Sopenharmony_ci    pname:extendedDynamicState3CoverageToColorLocation>> feature is not
4098e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4099e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4100e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV
4101e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationMode-07395]]
4102e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3CoverageModulationMode,
4103e5c31af7Sopenharmony_ci    pname:extendedDynamicState3CoverageModulationMode>> feature is not
4104e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4105e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4106e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV
4107e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationTableEnable-07396]]
4108e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3CoverageModulationTableEnable,
4109e5c31af7Sopenharmony_ci    pname:extendedDynamicState3CoverageModulationTableEnable>> feature is
4110e5c31af7Sopenharmony_ci    not enabled, there must: be no element of the pname:pDynamicStates
4111e5c31af7Sopenharmony_ci    member of pname:pDynamicState set to
4112e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV
4113e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationTable-07397]]
4114e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3CoverageModulationTable,
4115e5c31af7Sopenharmony_ci    pname:extendedDynamicState3CoverageModulationTable>> feature is not
4116e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4117e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4118e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV
4119e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageReductionMode-07398]]
4120e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3CoverageReductionMode,
4121e5c31af7Sopenharmony_ci    pname:extendedDynamicState3CoverageReductionMode>> feature is not
4122e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4123e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4124e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV
4125e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RepresentativeFragmentTestEnable-07399]]
4126e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3RepresentativeFragmentTestEnable,
4127e5c31af7Sopenharmony_ci    pname:extendedDynamicState3RepresentativeFragmentTestEnable>> feature is
4128e5c31af7Sopenharmony_ci    not enabled, there must: be no element of the pname:pDynamicStates
4129e5c31af7Sopenharmony_ci    member of pname:pDynamicState set to
4130e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV
4131e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ShadingRateImageEnable-07400]]
4132e5c31af7Sopenharmony_ci    If the <<features-extendedDynamicState3ShadingRateImageEnable,
4133e5c31af7Sopenharmony_ci    pname:extendedDynamicState3ShadingRateImageEnable>> feature is not
4134e5c31af7Sopenharmony_ci    enabled, there must: be no element of the pname:pDynamicStates member of
4135e5c31af7Sopenharmony_ci    pname:pDynamicState set to
4136e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV
4137e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
4138e5c31af7Sopenharmony_ciifdef::VK_EXT_opacity_micromap[]
4139e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-07401]]
4140e5c31af7Sopenharmony_ci    pname:flags must: not include
4141e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
4142e5c31af7Sopenharmony_ciendif::VK_EXT_opacity_micromap[]
4143e5c31af7Sopenharmony_ciifdef::VK_NV_displacement_micromap[]
4144e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-07997]]
4145e5c31af7Sopenharmony_ci    pname:flags must: not include
4146e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
4147e5c31af7Sopenharmony_ciendif::VK_NV_displacement_micromap[]
4148e5c31af7Sopenharmony_ciifdef::VK_QCOM_multiview_per_view_viewports[]
4149e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07730]]
4150e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
4151e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and no element of the
4152e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState is
4153e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT or
4154e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, and if
4155e5c31af7Sopenharmony_ci    <<features-multiview-per-view-viewports,
4156e5c31af7Sopenharmony_ci    pname:multiviewPerViewViewports>> is enabled, then the index of the most
4157e5c31af7Sopenharmony_ci    significant bit in each element of
4158e5c31af7Sopenharmony_ci    slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks must: be less
4159e5c31af7Sopenharmony_ci    than pname:pViewportState->viewportCount
4160e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07731]]
4161e5c31af7Sopenharmony_ci    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
4162e5c31af7Sopenharmony_ci    pre-rasterization shader state>>, and no element of the
4163e5c31af7Sopenharmony_ci    pname:pDynamicStates member of pname:pDynamicState is
4164e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR or
4165e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, and if
4166e5c31af7Sopenharmony_ci    <<features-multiview-per-view-viewports,
4167e5c31af7Sopenharmony_ci    pname:multiviewPerViewViewports>> is enabled, then the index of the most
4168e5c31af7Sopenharmony_ci    significant bit in each element of
4169e5c31af7Sopenharmony_ci    slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks must: be less
4170e5c31af7Sopenharmony_ci    than pname:pViewportState->scissorCount
4171e5c31af7Sopenharmony_ciendif::VK_QCOM_multiview_per_view_viewports[]
4172e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_tile_image[]
4173e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-08711]]
4174e5c31af7Sopenharmony_ci    If pname:pStages includes a fragment shader stage,
4175e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE is not set in
4176e5c31af7Sopenharmony_ci    slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and the
4177e5c31af7Sopenharmony_ci    fragment shader declares the code:EarlyFragmentTests execution mode and
4178e5c31af7Sopenharmony_ci    uses code:OpDepthAttachmentReadEXT, the pname:depthWriteEnable member of
4179e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo must: be ename:VK_FALSE
4180e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-08712]]
4181e5c31af7Sopenharmony_ci    If pname:pStages includes a fragment shader stage,
4182e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK is not set in
4183e5c31af7Sopenharmony_ci    slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and the
4184e5c31af7Sopenharmony_ci    fragment shader declares the code:EarlyFragmentTests execution mode and
4185e5c31af7Sopenharmony_ci    uses code:OpStencilAttachmentReadEXT, the value of
4186e5c31af7Sopenharmony_ci    slink:VkStencilOpState::pname:writeMask for both pname:front and
4187e5c31af7Sopenharmony_ci    pname:back in slink:VkPipelineDepthStencilStateCreateInfo must: be `0`
4188e5c31af7Sopenharmony_ciendif::VK_EXT_shader_tile_image[]
4189e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4190e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-08744]]
4191e5c31af7Sopenharmony_ci    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline requires
4192e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output state>> or
4193e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
4194e5c31af7Sopenharmony_ci    the pipeline enables <<primsrast-sampleshading, sample shading>>,
4195e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic, and the pname:pNext chain
4196e5c31af7Sopenharmony_ci    includes a slink:VkPipelineRenderingCreateInfo structure,
4197e5c31af7Sopenharmony_ci    pname:rasterizationSamples must: be a valid elink:VkSampleCountFlagBits
4198e5c31af7Sopenharmony_ci    value that is set in pname:imageCreateSampleCounts (as defined in
4199e5c31af7Sopenharmony_ci    <<resources-image-creation-limits,Image Creation Limits>>) for every
4200e5c31af7Sopenharmony_ci    element of pname:depthAttachmentFormat, pname:stencilAttachmentFormat
4201e5c31af7Sopenharmony_ci    and the pname:pColorAttachmentFormats array which is not
4202e5c31af7Sopenharmony_ci    ename:VK_FORMAT_UNDEFINED
4203e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4204e5c31af7Sopenharmony_ciifndef::VK_EXT_graphics_pipeline_library[]
4205e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-None-08893]]
4206e5c31af7Sopenharmony_ci    The pipeline must: be created with
4207e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4208e5c31af7Sopenharmony_ci    state>>
4209e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-08894]]
4210e5c31af7Sopenharmony_ci    If pname:pStages includes a vertex shader stage, the pipeline must: be
4211e5c31af7Sopenharmony_ci    created with <<pipelines-graphics-subsets-vertex-input, vertex input
4212e5c31af7Sopenharmony_ci    state>>
4213e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-08896]]
4214e5c31af7Sopenharmony_ci    If
4215e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state2,VK_VERSION_1_3[]
4216e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates includes
4217e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, or if it does not and
4218e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state2,VK_VERSION_1_3[]
4219e5c31af7Sopenharmony_ci    pname:pRasterizationState->rasterizerDiscardEnable is ename:VK_FALSE,
4220e5c31af7Sopenharmony_ci    the pipeline must: be created with
4221e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
4222e5c31af7Sopenharmony_ci    and <<pipelines-graphics-subsets-fragment-output,fragment output
4223e5c31af7Sopenharmony_ci    interface state>>
4224e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
4225e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
4226e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08897]]
4227e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
4228e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT,
4229e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4230e5c31af7Sopenharmony_ci    state>> is specified either in a library or by the inclusion of
4231e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
4232e5c31af7Sopenharmony_ci    and that state includes a vertex shader stage in pname:pStages, the
4233e5c31af7Sopenharmony_ci    pipeline must: define <<pipelines-graphics-subsets-vertex-input, vertex
4234e5c31af7Sopenharmony_ci    input state>>
4235e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08898]]
4236e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
4237e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT, and
4238e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4239e5c31af7Sopenharmony_ci    state>> is not specified, the pipeline must: define
4240e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-vertex-input, vertex input state>>
4241e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08899]]
4242e5c31af7Sopenharmony_ci    If pname:flags does not include
4243e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
4244e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4245e5c31af7Sopenharmony_ci    state>> is specified either in a library or by the inclusion of
4246e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
4247e5c31af7Sopenharmony_ci    and that state includes a vertex shader stage in pname:pStages, the
4248e5c31af7Sopenharmony_ci    pipeline must: either define
4249e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4250e5c31af7Sopenharmony_ci    state>> or include that state in a linked pipeline library
4251e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08900]]
4252e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
4253e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT the
4254e5c31af7Sopenharmony_ci    pipeline must: define <<pipelines-graphics-subsets-pre-rasterization,
4255e5c31af7Sopenharmony_ci    pre-rasterization shader state>>
4256e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08901]]
4257e5c31af7Sopenharmony_ci    If pname:flags does not include
4258e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the pipeline must: either
4259e5c31af7Sopenharmony_ci    define <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization
4260e5c31af7Sopenharmony_ci    shader state>> or include that state in a linked pipeline library
4261e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08903]]
4262e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
4263e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
4264e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4265e5c31af7Sopenharmony_ci    state>> is specified either in a library or by the inclusion of
4266e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
4267e5c31af7Sopenharmony_ci    and that state
4268e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state2,VK_VERSION_1_3[]
4269e5c31af7Sopenharmony_ci    either includes ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or
4270e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state2,VK_VERSION_1_3[]
4271e5c31af7Sopenharmony_ci    has pname:pRasterizationState->rasterizerDiscardEnable set to
4272e5c31af7Sopenharmony_ci    ename:VK_FALSE, the pipeline must: define
4273e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
4274e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08904]]
4275e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
4276e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and
4277e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4278e5c31af7Sopenharmony_ci    state>> is not specified, the pipeline must: define
4279e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
4280e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08906]]
4281e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
4282e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
4283e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4284e5c31af7Sopenharmony_ci    state>> is specified either in a library or by the inclusion of
4285e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
4286e5c31af7Sopenharmony_ci    and that state
4287e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state2,VK_VERSION_1_3[]
4288e5c31af7Sopenharmony_ci    either includes ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or
4289e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state2,VK_VERSION_1_3[]
4290e5c31af7Sopenharmony_ci    has pname:pRasterizationState->rasterizerDiscardEnable set to
4291e5c31af7Sopenharmony_ci    ename:VK_FALSE, the pipeline must: define
4292e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output,fragment output interface
4293e5c31af7Sopenharmony_ci    state>>
4294e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08907]]
4295e5c31af7Sopenharmony_ci    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
4296e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and
4297e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4298e5c31af7Sopenharmony_ci    state>> is not specified, the pipeline must: define
4299e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output,fragment output interface
4300e5c31af7Sopenharmony_ci    state>>
4301e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08909]]
4302e5c31af7Sopenharmony_ci    If pname:flags does not include
4303e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
4304e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4305e5c31af7Sopenharmony_ci    state>> is specified either in a library or by the inclusion of
4306e5c31af7Sopenharmony_ci    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
4307e5c31af7Sopenharmony_ci    and that state
4308e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state2,VK_VERSION_1_3[]
4309e5c31af7Sopenharmony_ci    either includes ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or
4310e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state2,VK_VERSION_1_3[]
4311e5c31af7Sopenharmony_ci    has pname:pRasterizationState->rasterizerDiscardEnable set to
4312e5c31af7Sopenharmony_ci    ename:VK_FALSE, the pipeline must: define
4313e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output,fragment output interface
4314e5c31af7Sopenharmony_ci    state>> and <<pipelines-graphics-subsets-fragment-shader, fragment
4315e5c31af7Sopenharmony_ci    shader state>> or include those states in linked pipeline libraries
4316e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
4317e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-None-09043]]
4318e5c31af7Sopenharmony_ci    If
4319e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
4320e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates does not include
4321e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and
4322e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
4323e5c31af7Sopenharmony_ci    the format of any color attachment is
4324e5c31af7Sopenharmony_ci    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the pname:colorWriteMask member
4325e5c31af7Sopenharmony_ci    of the corresponding element of pname:pColorBlendState->pAttachments
4326e5c31af7Sopenharmony_ci    must: either include all of ename:VK_COLOR_COMPONENT_R_BIT,
4327e5c31af7Sopenharmony_ci    ename:VK_COLOR_COMPONENT_G_BIT, and ename:VK_COLOR_COMPONENT_B_BIT, or
4328e5c31af7Sopenharmony_ci    none of them
4329e5c31af7Sopenharmony_ciifdef::VK_ANDROID_external_format_resolve[]
4330e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4331e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09301]]
4332e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4333e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4334e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4335e5c31af7Sopenharmony_ci    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
4336e5c31af7Sopenharmony_ci    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`,
4337e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:viewMask must: be `0`
4338e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09304]]
4339e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4340e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4341e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4342e5c31af7Sopenharmony_ci    state>>, pname:renderPass is dlink:VK_NULL_HANDLE,
4343e5c31af7Sopenharmony_ci    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, and
4344e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic,
4345e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
4346e5c31af7Sopenharmony_ci    must: be `1`
4347e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09305]]
4348e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4349e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4350e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4351e5c31af7Sopenharmony_ci    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
4352e5c31af7Sopenharmony_ci    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, and
4353e5c31af7Sopenharmony_ci    pname:blendEnable is not dynamic, the pname:blendEnable member of each
4354e5c31af7Sopenharmony_ci    element of pname:pColorBlendState->pAttachments must: be ename:VK_FALSE
4355e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
4356e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09306]]
4357e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4358e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4359e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4360e5c31af7Sopenharmony_ci    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
4361e5c31af7Sopenharmony_ci    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, and
4362e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates does not include
4363e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
4364e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:width must:
4365e5c31af7Sopenharmony_ci    be `1`
4366e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09307]]
4367e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4368e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4369e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4370e5c31af7Sopenharmony_ci    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
4371e5c31af7Sopenharmony_ci    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, and
4372e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates does not include
4373e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
4374e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:height
4375e5c31af7Sopenharmony_ci    must: be `1`
4376e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09308]]
4377e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4378e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4379e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, pre-rasterization shader
4380e5c31af7Sopenharmony_ci    state>> and <<pipelines-graphics-subsets-fragment-output, fragment
4381e5c31af7Sopenharmony_ci    output interface state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
4382e5c31af7Sopenharmony_ci    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, the last
4383e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
4384e5c31af7Sopenharmony_ci    stage>> must: not statically use a variable with the
4385e5c31af7Sopenharmony_ci    code:PrimitiveShadingRateKHR built-in
4386e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
4387e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09309]]
4388e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4389e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4390e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4391e5c31af7Sopenharmony_ci    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
4392e5c31af7Sopenharmony_ci    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`,
4393e5c31af7Sopenharmony_ci    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount must: be
4394e5c31af7Sopenharmony_ci    `1`
4395e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09310]]
4396e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4397e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4398e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
4399e5c31af7Sopenharmony_ci    and <<pipelines-graphics-subsets-fragment-output, fragment output
4400e5c31af7Sopenharmony_ci    interface state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
4401e5c31af7Sopenharmony_ci    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, the
4402e5c31af7Sopenharmony_ci    fragment shader must: not declare the code:DepthReplacing or
4403e5c31af7Sopenharmony_ci    code:StencilRefReplacingEXT execution modes
4404e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4405e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09313]]
4406e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4407e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4408e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4409e5c31af7Sopenharmony_ci    state>>, pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass
4410e5c31af7Sopenharmony_ci    includes an external format resolve attachment, and
4411e5c31af7Sopenharmony_ci    pname:rasterizationSamples is not dynamic,
4412e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
4413e5c31af7Sopenharmony_ci    must: be ename:VK_SAMPLE_COUNT_1_BIT
4414e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09314]]
4415e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4416e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4417e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4418e5c31af7Sopenharmony_ci    state>>, pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass
4419e5c31af7Sopenharmony_ci    includes an external format resolve attachment, and pname:blendEnable is
4420e5c31af7Sopenharmony_ci    not dynamic, the pname:blendEnable member of each element of
4421e5c31af7Sopenharmony_ci    pname:pColorBlendState->pAttachments must: be ename:VK_FALSE
4422e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
4423e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09315]]
4424e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4425e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4426e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4427e5c31af7Sopenharmony_ci    state>>, pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass
4428e5c31af7Sopenharmony_ci    includes an external format resolve attachment, and
4429e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates does not include
4430e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
4431e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:width must:
4432e5c31af7Sopenharmony_ci    be `1`
4433e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09316]]
4434e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4435e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4436e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, fragment output interface
4437e5c31af7Sopenharmony_ci    state>>, pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass
4438e5c31af7Sopenharmony_ci    includes an external format resolve attachment, and
4439e5c31af7Sopenharmony_ci    pname:pDynamicState->pDynamicStates does not include
4440e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
4441e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:height
4442e5c31af7Sopenharmony_ci    must: be `1`
4443e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09317]]
4444e5c31af7Sopenharmony_ci    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
4445e5c31af7Sopenharmony_ci    feature is enabled, the pipeline requires
4446e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output, pre-rasterization shader
4447e5c31af7Sopenharmony_ci    state>> and <<pipelines-graphics-subsets-fragment-output, fragment
4448e5c31af7Sopenharmony_ci    output interface state>>, pname:renderPass is not dlink:VK_NULL_HANDLE,
4449e5c31af7Sopenharmony_ci    and pname:subpass includes an external format resolve attachment, the
4450e5c31af7Sopenharmony_ci    last <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization
4451e5c31af7Sopenharmony_ci    shader stage>> must: not statically use a variable with the
4452e5c31af7Sopenharmony_ci    code:PrimitiveShadingRateKHR built-in
4453e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
4454e5c31af7Sopenharmony_ciendif::VK_ANDROID_external_format_resolve[]
4455e5c31af7Sopenharmony_ci****
4456e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
4457e5c31af7Sopenharmony_ciifdef::hidden[]
4458e5c31af7Sopenharmony_ci// tag::scdeviation[]
4459e5c31af7Sopenharmony_ci  * slink:VkGraphicsPipelineCreateInfo::pname:basePipelineHandle must: be
4460e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE <<SCID-8>>.
4461e5c31af7Sopenharmony_ci  * slink:VkGraphicsPipelineCreateInfo::pname:basePipelineIndex must: be
4462e5c31af7Sopenharmony_ci    zero <<SCID-8>>.
4463e5c31af7Sopenharmony_ci// end::scdeviation[]
4464e5c31af7Sopenharmony_ciendif::hidden[]
4465e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
4466e5c31af7Sopenharmony_ci
4467e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkGraphicsPipelineCreateInfo.adoc[]
4468e5c31af7Sopenharmony_ci--
4469e5c31af7Sopenharmony_ci
4470e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4471e5c31af7Sopenharmony_ci[open,refpage='VkPipelineRenderingCreateInfo',desc='Structure specifying attachment formats',type='structs',alias='VkPipelineRenderingCreateInfoKHR']
4472e5c31af7Sopenharmony_ci--
4473e5c31af7Sopenharmony_ciThe sname:VkPipelineRenderingCreateInfo structure is defined as:
4474e5c31af7Sopenharmony_ci
4475e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineRenderingCreateInfo.adoc[]
4476e5c31af7Sopenharmony_ci
4477e5c31af7Sopenharmony_ciifdef::VK_KHR_dynamic_rendering[]
4478e5c31af7Sopenharmony_cior the equivalent
4479e5c31af7Sopenharmony_ci
4480e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineRenderingCreateInfoKHR.adoc[]
4481e5c31af7Sopenharmony_ciendif::VK_KHR_dynamic_rendering[]
4482e5c31af7Sopenharmony_ci
4483e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
4484e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
4485e5c31af7Sopenharmony_ci    structure.
4486e5c31af7Sopenharmony_ci  * pname:viewMask is the viewMask used for rendering.
4487e5c31af7Sopenharmony_ci  * pname:colorAttachmentCount is the number of entries in
4488e5c31af7Sopenharmony_ci    pname:pColorAttachmentFormats
4489e5c31af7Sopenharmony_ci  * pname:pColorAttachmentFormats is a pointer to an array of elink:VkFormat
4490e5c31af7Sopenharmony_ci    values defining the format of color attachments used in this pipeline.
4491e5c31af7Sopenharmony_ci  * pname:depthAttachmentFormat is a elink:VkFormat value defining the
4492e5c31af7Sopenharmony_ci    format of the depth attachment used in this pipeline.
4493e5c31af7Sopenharmony_ci  * pname:stencilAttachmentFormat is a elink:VkFormat value defining the
4494e5c31af7Sopenharmony_ci    format of the stencil attachment used in this pipeline.
4495e5c31af7Sopenharmony_ci
4496e5c31af7Sopenharmony_ciWhen a pipeline is created without a slink:VkRenderPass, if the pname:pNext
4497e5c31af7Sopenharmony_cichain of slink:VkGraphicsPipelineCreateInfo includes this structure, it
4498e5c31af7Sopenharmony_cispecifies the view mask and format of attachments used for rendering.
4499e5c31af7Sopenharmony_ciIf this structure is not specified, and the pipeline does not include a
4500e5c31af7Sopenharmony_cislink:VkRenderPass, pname:viewMask and pname:colorAttachmentCount are `0`,
4501e5c31af7Sopenharmony_ciand pname:depthAttachmentFormat and pname:stencilAttachmentFormat are
4502e5c31af7Sopenharmony_ciename:VK_FORMAT_UNDEFINED.
4503e5c31af7Sopenharmony_ciIf a graphics pipeline is created with a valid slink:VkRenderPass,
4504e5c31af7Sopenharmony_ciparameters of this structure are ignored.
4505e5c31af7Sopenharmony_ci
4506e5c31af7Sopenharmony_ciIf pname:depthAttachmentFormat, pname:stencilAttachmentFormat, or any
4507e5c31af7Sopenharmony_cielement of pname:pColorAttachmentFormats is ename:VK_FORMAT_UNDEFINED, it
4508e5c31af7Sopenharmony_ciindicates that the corresponding attachment is unused within the render
4509e5c31af7Sopenharmony_cipass.
4510e5c31af7Sopenharmony_ciValid formats indicate that an attachment can: be used - but it is still
4511e5c31af7Sopenharmony_civalid to set the attachment to `NULL` when beginning rendering.
4512e5c31af7Sopenharmony_ci
4513e5c31af7Sopenharmony_ciifdef::VK_ANDROID_external_format_resolve[]
4514e5c31af7Sopenharmony_ciIf the render pass is going to be used with an external format resolve
4515e5c31af7Sopenharmony_ciattachment, a slink:VkExternalFormatANDROID structure must: also be included
4516e5c31af7Sopenharmony_ciin the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo, defining the
4517e5c31af7Sopenharmony_ciexternal format of the resolve attachment that will be used.
4518e5c31af7Sopenharmony_ciendif::VK_ANDROID_external_format_resolve[]
4519e5c31af7Sopenharmony_ci
4520e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineRenderingCreateInfo.adoc[]
4521e5c31af7Sopenharmony_ci--
4522e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4523e5c31af7Sopenharmony_ci
4524e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
4525e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCreateFlags2CreateInfoKHR',desc='Extended pipeline create flags',type='structs']
4526e5c31af7Sopenharmony_ci--
4527e5c31af7Sopenharmony_ciThe sname:VkPipelineCreateFlags2CreateInfoKHR structure is defined as:
4528e5c31af7Sopenharmony_ci
4529e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineCreateFlags2CreateInfoKHR.adoc[]
4530e5c31af7Sopenharmony_ci
4531e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
4532e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
4533e5c31af7Sopenharmony_ci    structure.
4534e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits2KHR
4535e5c31af7Sopenharmony_ci    specifying how a pipeline will be generated.
4536e5c31af7Sopenharmony_ci
4537e5c31af7Sopenharmony_ciIf this structure is included in the pname:pNext chain of a pipeline
4538e5c31af7Sopenharmony_cicreation structure, pname:flags is used instead of the corresponding
4539e5c31af7Sopenharmony_cipname:flags value passed in that creation structure, allowing additional
4540e5c31af7Sopenharmony_cicreation flags to be specified.
4541e5c31af7Sopenharmony_ci
4542e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineCreateFlags2CreateInfoKHR.adoc[]
4543e5c31af7Sopenharmony_ci--
4544e5c31af7Sopenharmony_ci
4545e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCreateFlagBits2KHR',desc='Bitmask controlling how a pipeline is created',type='enums']
4546e5c31af7Sopenharmony_ci--
4547e5c31af7Sopenharmony_ciBits which can: be set in
4548e5c31af7Sopenharmony_cislink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags, specifying how a
4549e5c31af7Sopenharmony_cipipeline is created, are:
4550e5c31af7Sopenharmony_ci
4551e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineCreateFlagBits2KHR.adoc[]
4552e5c31af7Sopenharmony_ci
4553e5c31af7Sopenharmony_ci// Note - when editing this section, make sure that any relevant changes
4554e5c31af7Sopenharmony_ci// are mirrored in VkPipelineCreateFlagBits2KHR/VkPipelineCreateFlagBits
4555e5c31af7Sopenharmony_ci
4556e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR specifies that
4557e5c31af7Sopenharmony_ci    the created pipeline will not be optimized.
4558e5c31af7Sopenharmony_ci    Using this flag may: reduce the time taken to create the pipeline.
4559e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR specifies that the
4560e5c31af7Sopenharmony_ci    pipeline to be created is allowed to be the parent of a pipeline that
4561e5c31af7Sopenharmony_ci    will be created in a subsequent pipeline creation call.
4562e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR specifies that the
4563e5c31af7Sopenharmony_ci    pipeline to be created will be a child of a previously created parent
4564e5c31af7Sopenharmony_ci    pipeline.
4565e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_device_group[]
4566e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_multiview[]
4567e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR
4568e5c31af7Sopenharmony_ci    specifies that any shader input variables decorated as code:ViewIndex
4569e5c31af7Sopenharmony_ci    will be assigned values as if they were decorated as code:DeviceIndex.
4570e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_multiview[]
4571e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR specifies that a
4572e5c31af7Sopenharmony_ci    compute pipeline can: be used with flink:vkCmdDispatchBase with a
4573e5c31af7Sopenharmony_ci    non-zero base workgroup.
4574e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_device_group[]
4575e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
4576e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV specifies that a
4577e5c31af7Sopenharmony_ci    pipeline is created with all shaders in the deferred state.
4578e5c31af7Sopenharmony_ci    Before using the pipeline the application must: call
4579e5c31af7Sopenharmony_ci    flink:vkCompileDeferredNV exactly once on each shader in the pipeline
4580e5c31af7Sopenharmony_ci    before using the pipeline.
4581e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
4582e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_executable_properties[]
4583e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR specifies that the
4584e5c31af7Sopenharmony_ci    shader compiler should capture statistics for the pipeline executables
4585e5c31af7Sopenharmony_ci    produced by the compile process which can: later be retrieved by calling
4586e5c31af7Sopenharmony_ci    flink:vkGetPipelineExecutableStatisticsKHR.
4587e5c31af7Sopenharmony_ci    Enabling this flag must: not affect the final compiled pipeline but may:
4588e5c31af7Sopenharmony_ci    disable pipeline caching or otherwise affect pipeline creation time.
4589e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
4590e5c31af7Sopenharmony_ci    specifies that the shader compiler should capture the internal
4591e5c31af7Sopenharmony_ci    representations of pipeline executables produced by the compile process
4592e5c31af7Sopenharmony_ci    which can: later be retrieved by calling
4593e5c31af7Sopenharmony_ci    flink:vkGetPipelineExecutableInternalRepresentationsKHR.
4594e5c31af7Sopenharmony_ci    Enabling this flag must: not affect the final compiled pipeline but may:
4595e5c31af7Sopenharmony_ci    disable pipeline caching or otherwise affect pipeline creation time.
4596e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
4597e5c31af7Sopenharmony_ci    When capturing IR from pipelines created with pipeline libraries, there
4598e5c31af7Sopenharmony_ci    is no guarantee that IR from libraries can: be retrieved from the linked
4599e5c31af7Sopenharmony_ci    pipeline.
4600e5c31af7Sopenharmony_ci    Applications should: retrieve IR from each library, and any linked
4601e5c31af7Sopenharmony_ci    pipelines, separately.
4602e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
4603e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_executable_properties[]
4604e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
4605e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR specifies that the pipeline
4606e5c31af7Sopenharmony_ci    cannot: be used directly, and instead defines a _pipeline library_ that
4607e5c31af7Sopenharmony_ci    can: be combined with other pipelines using the
4608e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR structure.
4609e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline,VK_EXT_graphics_pipeline_library[]
4610e5c31af7Sopenharmony_ci    This is available in
4611e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[ray tracing]
4612e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline+VK_EXT_graphics_pipeline_library[and]
4613e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[graphics]
4614e5c31af7Sopenharmony_ci    pipelines.
4615e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline,VK_EXT_graphics_pipeline_library[]
4616e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
4617e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
4618e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
4619e5c31af7Sopenharmony_ci    specifies that an any-hit shader will always be present when an any-hit
4620e5c31af7Sopenharmony_ci    shader would be executed.
4621e5c31af7Sopenharmony_ci    A NULL any-hit shader is an any-hit shader which is effectively
4622e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
4623e5c31af7Sopenharmony_ci    entirely of zeros.
4624e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
4625e5c31af7Sopenharmony_ci    specifies that a closest hit shader will always be present when a
4626e5c31af7Sopenharmony_ci    closest hit shader would be executed.
4627e5c31af7Sopenharmony_ci    A NULL closest hit shader is a closest hit shader which is effectively
4628e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
4629e5c31af7Sopenharmony_ci    entirely of zeros.
4630e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
4631e5c31af7Sopenharmony_ci    specifies that a miss shader will always be present when a miss shader
4632e5c31af7Sopenharmony_ci    would be executed.
4633e5c31af7Sopenharmony_ci    A NULL miss shader is a miss shader which is effectively
4634e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
4635e5c31af7Sopenharmony_ci    entirely of zeros.
4636e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
4637e5c31af7Sopenharmony_ci    specifies that an intersection shader will always be present when an
4638e5c31af7Sopenharmony_ci    intersection shader would be executed.
4639e5c31af7Sopenharmony_ci    A NULL intersection shader is an intersection shader which is
4640e5c31af7Sopenharmony_ci    effectively ename:VK_SHADER_UNUSED_KHR, such as from a shader group
4641e5c31af7Sopenharmony_ci    consisting entirely of zeros.
4642e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR specifies
4643e5c31af7Sopenharmony_ci    that triangle primitives will be skipped during traversal using
4644e5c31af7Sopenharmony_ci    <<glossary-pipeline-trace-ray, pipeline trace ray>> instructions.
4645e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR specifies that
4646e5c31af7Sopenharmony_ci    AABB primitives will be skipped during traversal using
4647e5c31af7Sopenharmony_ci    <<glossary-pipeline-trace-ray, pipeline trace ray>> instructions.
4648e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
4649e5c31af7Sopenharmony_ci    specifies that the shader group handles can: be saved and reused on a
4650e5c31af7Sopenharmony_ci    subsequent run (e.g. for trace capture and replay).
4651e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
4652e5c31af7Sopenharmony_ciifdef::VK_NV_device_generated_commands[]
4653e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV specifies that the
4654e5c31af7Sopenharmony_ci    pipeline can be used in combination with <<device-generated-commands>>.
4655e5c31af7Sopenharmony_ciendif::VK_NV_device_generated_commands[]
4656e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
4657e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR
4658e5c31af7Sopenharmony_ci    specifies that pipeline creation will fail if a compile is required for
4659e5c31af7Sopenharmony_ci    creation of a valid slink:VkPipeline object;
4660e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_COMPILE_REQUIRED will be returned by pipeline
4661e5c31af7Sopenharmony_ci    creation, and the slink:VkPipeline will be set to dlink:VK_NULL_HANDLE.
4662e5c31af7Sopenharmony_ci  * When creating multiple pipelines,
4663e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR specifies
4664e5c31af7Sopenharmony_ci    that control will be returned to the application if any individual
4665e5c31af7Sopenharmony_ci    pipeline returns a result which is not ename:VK_SUCCESS rather than
4666e5c31af7Sopenharmony_ci    continuing to create additional pipelines.
4667e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
4668e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing_motion_blur[]
4669e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV specifies
4670e5c31af7Sopenharmony_ci    that the pipeline is allowed to use code:OpTraceRayMotionNV.
4671e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing_motion_blur[]
4672e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4673e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
4674e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
4675e5c31af7Sopenharmony_ci    specifies that the pipeline will be used with a fragment shading rate
4676e5c31af7Sopenharmony_ci    attachment.
4677e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
4678e5c31af7Sopenharmony_ciifdef::VK_EXT_fragment_density_map[]
4679e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
4680e5c31af7Sopenharmony_ci    specifies that the pipeline will be used with a fragment density map
4681e5c31af7Sopenharmony_ci    attachment.
4682e5c31af7Sopenharmony_ciendif::VK_EXT_fragment_density_map[]
4683e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4684e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
4685e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT specifies that
4686e5c31af7Sopenharmony_ci    pipeline libraries being linked into this library should: have link time
4687e5c31af7Sopenharmony_ci    optimizations applied.
4688e5c31af7Sopenharmony_ci    If this bit is omitted, implementations should: instead perform linking
4689e5c31af7Sopenharmony_ci    as rapidly as possible.
4690e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
4691e5c31af7Sopenharmony_ci    specifies that pipeline libraries should retain any information
4692e5c31af7Sopenharmony_ci    necessary to later perform an optimal link with
4693e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT.
4694e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
4695e5c31af7Sopenharmony_ciifdef::VK_EXT_descriptor_buffer[]
4696e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT specifies that a
4697e5c31af7Sopenharmony_ci    pipeline will be used with <<descriptorbuffers,descriptor buffers>>,
4698e5c31af7Sopenharmony_ci    rather than <<descriptorsets,descriptor sets>>.
4699e5c31af7Sopenharmony_ciendif::VK_EXT_descriptor_buffer[]
4700e5c31af7Sopenharmony_ciifdef::VK_EXT_attachment_feedback_loop_layout[]
4701e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
4702e5c31af7Sopenharmony_ci    specifies that the pipeline may: be used with an attachment feedback
4703e5c31af7Sopenharmony_ci    loop including color attachments.
4704e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
4705e5c31af7Sopenharmony_ci    specifies that the pipeline may: be used with an attachment feedback
4706e5c31af7Sopenharmony_ci    loop including depth-stencil attachments.
4707e5c31af7Sopenharmony_ciendif::VK_EXT_attachment_feedback_loop_layout[]
4708e5c31af7Sopenharmony_ciifdef::VK_EXT_opacity_micromap[]
4709e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
4710e5c31af7Sopenharmony_ci    specifies that the ray tracing pipeline can: be used with acceleration
4711e5c31af7Sopenharmony_ci    structures which reference an opacity micromap array.
4712e5c31af7Sopenharmony_ciendif::VK_EXT_opacity_micromap[]
4713e5c31af7Sopenharmony_ciifdef::VK_NV_displacement_micromap[]
4714e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
4715e5c31af7Sopenharmony_ci    specifies that the ray tracing pipeline can: be used with acceleration
4716e5c31af7Sopenharmony_ci    structures which reference a displacement micromap array.
4717e5c31af7Sopenharmony_ciendif::VK_NV_displacement_micromap[]
4718e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_protected_access[]
4719e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT specifies that
4720e5c31af7Sopenharmony_ci    the pipeline must: not be bound to a protected command buffer.
4721e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT specifies that
4722e5c31af7Sopenharmony_ci    the pipeline must: not be bound to an unprotected command buffer.
4723e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_protected_access[]
4724e5c31af7Sopenharmony_ci
4725e5c31af7Sopenharmony_ciIt is valid to set both ename:VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR
4726e5c31af7Sopenharmony_ciand ename:VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR.
4727e5c31af7Sopenharmony_ciThis allows a pipeline to be both a parent and possibly a child in a
4728e5c31af7Sopenharmony_cipipeline hierarchy.
4729e5c31af7Sopenharmony_ciSee <<pipelines-pipeline-derivatives,Pipeline Derivatives>> for more
4730e5c31af7Sopenharmony_ciinformation.
4731e5c31af7Sopenharmony_ci
4732e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
4733e5c31af7Sopenharmony_ciWhen an implementation is looking up a pipeline in a
4734e5c31af7Sopenharmony_ci<<pipelines-cache,pipeline cache>>, if that pipeline is being created using
4735e5c31af7Sopenharmony_cilinked libraries, implementations should: always return an equivalent
4736e5c31af7Sopenharmony_cipipeline created with
4737e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT if available,
4738e5c31af7Sopenharmony_ciwhether or not that bit was specified.
4739e5c31af7Sopenharmony_ci
4740e5c31af7Sopenharmony_ci[NOTE]
4741e5c31af7Sopenharmony_ci.Note
4742e5c31af7Sopenharmony_ci====
4743e5c31af7Sopenharmony_ciUsing ename:VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT (or not)
4744e5c31af7Sopenharmony_ciwhen linking pipeline libraries is intended as a performance tradeoff
4745e5c31af7Sopenharmony_cibetween host and device.
4746e5c31af7Sopenharmony_ciIf the bit is omitted, linking should be faster and produce a pipeline more
4747e5c31af7Sopenharmony_cirapidly, but performance of the pipeline on the target device may be
4748e5c31af7Sopenharmony_cireduced.
4749e5c31af7Sopenharmony_ciIf the bit is included, linking may be slower but should produce a pipeline
4750e5c31af7Sopenharmony_ciwith device performance comparable to a monolithically created pipeline.
4751e5c31af7Sopenharmony_ciUsing both options can allow latency-sensitive applications to generate a
4752e5c31af7Sopenharmony_cisuboptimal but usable pipeline quickly, and then perform an optimal link in
4753e5c31af7Sopenharmony_cithe background, substituting the result for the suboptimally linked pipeline
4754e5c31af7Sopenharmony_cias soon as it is available.
4755e5c31af7Sopenharmony_ci====
4756e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
4757e5c31af7Sopenharmony_ci--
4758e5c31af7Sopenharmony_ci
4759e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCreateFlags2KHR',desc='Bitmask of VkPipelineCreateFlagBits2KHR',type='flags']
4760e5c31af7Sopenharmony_ci--
4761e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkPipelineCreateFlags2KHR.adoc[]
4762e5c31af7Sopenharmony_ci
4763e5c31af7Sopenharmony_citname:VkPipelineCreateFlags2KHR is a bitmask type for setting a mask of zero
4764e5c31af7Sopenharmony_cior more elink:VkPipelineCreateFlagBits2KHR.
4765e5c31af7Sopenharmony_ci--
4766e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
4767e5c31af7Sopenharmony_ci
4768e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCreateFlagBits',desc='Bitmask controlling how a pipeline is created',type='enums']
4769e5c31af7Sopenharmony_ci--
4770e5c31af7Sopenharmony_ciBits which can: be set in
4771e5c31af7Sopenharmony_ci
4772e5c31af7Sopenharmony_ci  * slink:VkGraphicsPipelineCreateInfo::pname:flags
4773e5c31af7Sopenharmony_ci  * slink:VkComputePipelineCreateInfo::pname:flags
4774e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
4775e5c31af7Sopenharmony_ci  * slink:VkRayTracingPipelineCreateInfoKHR::pname:flags
4776e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
4777e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
4778e5c31af7Sopenharmony_ci  * slink:VkRayTracingPipelineCreateInfoNV::pname:flags
4779e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
4780e5c31af7Sopenharmony_ci
4781e5c31af7Sopenharmony_cispecify how a pipeline is created, and are:
4782e5c31af7Sopenharmony_ci
4783e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineCreateFlagBits.adoc[]
4784e5c31af7Sopenharmony_ci
4785e5c31af7Sopenharmony_ci// Note - when editing this section, make sure that any relevant changes
4786e5c31af7Sopenharmony_ci// are mirrored in VkPipelineCreateFlagBits2KHR/VkPipelineCreateFlagBits
4787e5c31af7Sopenharmony_ci
4788e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT specifies that the
4789e5c31af7Sopenharmony_ci    created pipeline will not be optimized.
4790e5c31af7Sopenharmony_ci    Using this flag may: reduce the time taken to create the pipeline.
4791e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
4792e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT specifies that the
4793e5c31af7Sopenharmony_ci    pipeline to be created is allowed to be the parent of a pipeline that
4794e5c31af7Sopenharmony_ci    will be created in a subsequent pipeline creation call.
4795e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT specifies that the pipeline to
4796e5c31af7Sopenharmony_ci    be created will be a child of a previously created parent pipeline.
4797e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
4798e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
4799e5c31af7Sopenharmony_ciifdef::hidden[]
4800e5c31af7Sopenharmony_ci// tag::scremoved[]
4801e5c31af7Sopenharmony_ci  * elink:VkPipelineCreateFlagBits
4802e5c31af7Sopenharmony_ci  ** ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT <<SCID-8>>
4803e5c31af7Sopenharmony_ci  ** ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT <<SCID-8>>
4804e5c31af7Sopenharmony_ci// end::scremoved[]
4805e5c31af7Sopenharmony_ciendif::hidden[]
4806e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
4807e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_device_group[]
4808e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_multiview[]
4809e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT specifies that
4810e5c31af7Sopenharmony_ci    any shader input variables decorated as code:ViewIndex will be assigned
4811e5c31af7Sopenharmony_ci    values as if they were decorated as code:DeviceIndex.
4812e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_multiview[]
4813e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_DISPATCH_BASE specifies that a compute pipeline
4814e5c31af7Sopenharmony_ci    can: be used with flink:vkCmdDispatchBase with a non-zero base
4815e5c31af7Sopenharmony_ci    workgroup.
4816e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_device_group[]
4817e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
4818e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV specifies that a pipeline
4819e5c31af7Sopenharmony_ci    is created with all shaders in the deferred state.
4820e5c31af7Sopenharmony_ci    Before using the pipeline the application must: call
4821e5c31af7Sopenharmony_ci    flink:vkCompileDeferredNV exactly once on each shader in the pipeline
4822e5c31af7Sopenharmony_ci    before using the pipeline.
4823e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
4824e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_executable_properties[]
4825e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR specifies that the
4826e5c31af7Sopenharmony_ci    shader compiler should capture statistics for the pipeline executables
4827e5c31af7Sopenharmony_ci    produced by the compile process which can: later be retrieved by calling
4828e5c31af7Sopenharmony_ci    flink:vkGetPipelineExecutableStatisticsKHR.
4829e5c31af7Sopenharmony_ci    Enabling this flag must: not affect the final compiled pipeline but may:
4830e5c31af7Sopenharmony_ci    disable pipeline caching or otherwise affect pipeline creation time.
4831e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
4832e5c31af7Sopenharmony_ci    specifies that the shader compiler should capture the internal
4833e5c31af7Sopenharmony_ci    representations of pipeline executables produced by the compile process
4834e5c31af7Sopenharmony_ci    which can: later be retrieved by calling
4835e5c31af7Sopenharmony_ci    flink:vkGetPipelineExecutableInternalRepresentationsKHR.
4836e5c31af7Sopenharmony_ci    Enabling this flag must: not affect the final compiled pipeline but may:
4837e5c31af7Sopenharmony_ci    disable pipeline caching or otherwise affect pipeline creation time.
4838e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
4839e5c31af7Sopenharmony_ci    When capturing IR from pipelines created with pipeline libraries, there
4840e5c31af7Sopenharmony_ci    is no guarantee that IR from libraries can: be retrieved from the linked
4841e5c31af7Sopenharmony_ci    pipeline.
4842e5c31af7Sopenharmony_ci    Applications should: retrieve IR from each library, and any linked
4843e5c31af7Sopenharmony_ci    pipelines, separately.
4844e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
4845e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_executable_properties[]
4846e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
4847e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR specifies that the pipeline
4848e5c31af7Sopenharmony_ci    cannot: be used directly, and instead defines a _pipeline library_ that
4849e5c31af7Sopenharmony_ci    can: be combined with other pipelines using the
4850e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR structure.
4851e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline,VK_EXT_graphics_pipeline_library[]
4852e5c31af7Sopenharmony_ci    This is available in
4853e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[ray tracing]
4854e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline+VK_EXT_graphics_pipeline_library[and]
4855e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[graphics]
4856e5c31af7Sopenharmony_ci    pipelines.
4857e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline,VK_EXT_graphics_pipeline_library[]
4858e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
4859e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
4860e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
4861e5c31af7Sopenharmony_ci    specifies that an any-hit shader will always be present when an any-hit
4862e5c31af7Sopenharmony_ci    shader would be executed.
4863e5c31af7Sopenharmony_ci    A NULL any-hit shader is an any-hit shader which is effectively
4864e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
4865e5c31af7Sopenharmony_ci    entirely of zeros.
4866e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
4867e5c31af7Sopenharmony_ci    specifies that a closest hit shader will always be present when a
4868e5c31af7Sopenharmony_ci    closest hit shader would be executed.
4869e5c31af7Sopenharmony_ci    A NULL closest hit shader is a closest hit shader which is effectively
4870e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
4871e5c31af7Sopenharmony_ci    entirely of zeros.
4872e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
4873e5c31af7Sopenharmony_ci    specifies that a miss shader will always be present when a miss shader
4874e5c31af7Sopenharmony_ci    would be executed.
4875e5c31af7Sopenharmony_ci    A NULL miss shader is a miss shader which is effectively
4876e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
4877e5c31af7Sopenharmony_ci    entirely of zeros.
4878e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
4879e5c31af7Sopenharmony_ci    specifies that an intersection shader will always be present when an
4880e5c31af7Sopenharmony_ci    intersection shader would be executed.
4881e5c31af7Sopenharmony_ci    A NULL intersection shader is an intersection shader which is
4882e5c31af7Sopenharmony_ci    effectively ename:VK_SHADER_UNUSED_KHR, such as from a shader group
4883e5c31af7Sopenharmony_ci    consisting entirely of zeros.
4884e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR specifies
4885e5c31af7Sopenharmony_ci    that triangle primitives will be skipped during traversal using
4886e5c31af7Sopenharmony_ci    <<glossary-pipeline-trace-ray, pipeline trace ray>> instructions.
4887e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR specifies that
4888e5c31af7Sopenharmony_ci    AABB primitives will be skipped during traversal using
4889e5c31af7Sopenharmony_ci    <<glossary-pipeline-trace-ray, pipeline trace ray>> instructions.
4890e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
4891e5c31af7Sopenharmony_ci    specifies that the shader group handles can: be saved and reused on a
4892e5c31af7Sopenharmony_ci    subsequent run (e.g. for trace capture and replay).
4893e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
4894e5c31af7Sopenharmony_ciifdef::VK_NV_device_generated_commands[]
4895e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV specifies that the
4896e5c31af7Sopenharmony_ci    pipeline can be used in combination with <<device-generated-commands>>.
4897e5c31af7Sopenharmony_ciendif::VK_NV_device_generated_commands[]
4898e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
4899e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT specifies
4900e5c31af7Sopenharmony_ci    that pipeline creation will fail if a compile is required for creation
4901e5c31af7Sopenharmony_ci    of a valid slink:VkPipeline object; ename:VK_PIPELINE_COMPILE_REQUIRED
4902e5c31af7Sopenharmony_ci    will be returned by pipeline creation, and the slink:VkPipeline will be
4903e5c31af7Sopenharmony_ci    set to dlink:VK_NULL_HANDLE.
4904e5c31af7Sopenharmony_ci  * When creating multiple pipelines,
4905e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT specifies that
4906e5c31af7Sopenharmony_ci    control will be returned to the application if any individual pipeline
4907e5c31af7Sopenharmony_ci    returns a result which is not ename:VK_SUCCESS rather than continuing to
4908e5c31af7Sopenharmony_ci    create additional pipelines.
4909e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
4910e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing_motion_blur[]
4911e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV specifies that
4912e5c31af7Sopenharmony_ci    the pipeline is allowed to use code:OpTraceRayMotionNV.
4913e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing_motion_blur[]
4914e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4915e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
4916e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
4917e5c31af7Sopenharmony_ci    specifies that the pipeline will be used with a fragment shading rate
4918e5c31af7Sopenharmony_ci    attachment and dynamic rendering.
4919e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
4920e5c31af7Sopenharmony_ciifdef::VK_EXT_fragment_density_map[]
4921e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
4922e5c31af7Sopenharmony_ci    specifies that the pipeline will be used with a fragment density map
4923e5c31af7Sopenharmony_ci    attachment and dynamic rendering.
4924e5c31af7Sopenharmony_ciendif::VK_EXT_fragment_density_map[]
4925e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
4926e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
4927e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT specifies that
4928e5c31af7Sopenharmony_ci    pipeline libraries being linked into this library should: have link time
4929e5c31af7Sopenharmony_ci    optimizations applied.
4930e5c31af7Sopenharmony_ci    If this bit is omitted, implementations should: instead perform linking
4931e5c31af7Sopenharmony_ci    as rapidly as possible.
4932e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
4933e5c31af7Sopenharmony_ci    specifies that pipeline libraries should retain any information
4934e5c31af7Sopenharmony_ci    necessary to later perform an optimal link with
4935e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT.
4936e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
4937e5c31af7Sopenharmony_ciifdef::VK_EXT_descriptor_buffer[]
4938e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT specifies that a
4939e5c31af7Sopenharmony_ci    pipeline will be used with <<descriptorbuffers,descriptor buffers>>,
4940e5c31af7Sopenharmony_ci    rather than <<descriptorsets,descriptor sets>>.
4941e5c31af7Sopenharmony_ciendif::VK_EXT_descriptor_buffer[]
4942e5c31af7Sopenharmony_ciifdef::VK_EXT_attachment_feedback_loop_layout[]
4943e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
4944e5c31af7Sopenharmony_ci    specifies that the pipeline may: be used with an attachment feedback
4945e5c31af7Sopenharmony_ci    loop including color attachments.
4946e5c31af7Sopenharmony_ciifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
4947e5c31af7Sopenharmony_ci    It is ignored if
4948e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT is set in
4949e5c31af7Sopenharmony_ci    pname:pDynamicStates.
4950e5c31af7Sopenharmony_ciendif::VK_EXT_attachment_feedback_loop_dynamic_state[]
4951e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
4952e5c31af7Sopenharmony_ci    specifies that the pipeline may: be used with an attachment feedback
4953e5c31af7Sopenharmony_ci    loop including depth-stencil attachments.
4954e5c31af7Sopenharmony_ciifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
4955e5c31af7Sopenharmony_ci    It is ignored if
4956e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT is set in
4957e5c31af7Sopenharmony_ci    pname:pDynamicStates.
4958e5c31af7Sopenharmony_ciendif::VK_EXT_attachment_feedback_loop_dynamic_state[]
4959e5c31af7Sopenharmony_ciendif::VK_EXT_attachment_feedback_loop_layout[]
4960e5c31af7Sopenharmony_ciifdef::VK_EXT_opacity_micromap[]
4961e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT specifies
4962e5c31af7Sopenharmony_ci    that the ray tracing pipeline can: be used with acceleration structures
4963e5c31af7Sopenharmony_ci    which reference an opacity micromap array.
4964e5c31af7Sopenharmony_ciendif::VK_EXT_opacity_micromap[]
4965e5c31af7Sopenharmony_ciifdef::VK_NV_displacement_micromap[]
4966e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
4967e5c31af7Sopenharmony_ci    specifies that the ray tracing pipeline can: be used with acceleration
4968e5c31af7Sopenharmony_ci    structures which reference a displacement micromap array.
4969e5c31af7Sopenharmony_ciendif::VK_NV_displacement_micromap[]
4970e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_protected_access[]
4971e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT specifies that the
4972e5c31af7Sopenharmony_ci    pipeline must: not be bound to a protected command buffer.
4973e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT specifies that
4974e5c31af7Sopenharmony_ci    the pipeline must: not be bound to an unprotected command buffer.
4975e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_protected_access[]
4976e5c31af7Sopenharmony_ci
4977e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
4978e5c31af7Sopenharmony_ciIt is valid to set both ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT and
4979e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_DERIVATIVE_BIT.
4980e5c31af7Sopenharmony_ciThis allows a pipeline to be both a parent and possibly a child in a
4981e5c31af7Sopenharmony_cipipeline hierarchy.
4982e5c31af7Sopenharmony_ciSee <<pipelines-pipeline-derivatives,Pipeline Derivatives>> for more
4983e5c31af7Sopenharmony_ciinformation.
4984e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
4985e5c31af7Sopenharmony_ci
4986e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
4987e5c31af7Sopenharmony_ciWhen an implementation is looking up a pipeline in a
4988e5c31af7Sopenharmony_ci<<pipelines-cache,pipeline cache>>, if that pipeline is being created using
4989e5c31af7Sopenharmony_cilinked libraries, implementations should: always return an equivalent
4990e5c31af7Sopenharmony_cipipeline created with
4991e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT if available,
4992e5c31af7Sopenharmony_ciwhether or not that bit was specified.
4993e5c31af7Sopenharmony_ci
4994e5c31af7Sopenharmony_ci[NOTE]
4995e5c31af7Sopenharmony_ci.Note
4996e5c31af7Sopenharmony_ci====
4997e5c31af7Sopenharmony_ciUsing ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT (or not) when
4998e5c31af7Sopenharmony_cilinking pipeline libraries is intended as a performance tradeoff between
4999e5c31af7Sopenharmony_cihost and device.
5000e5c31af7Sopenharmony_ciIf the bit is omitted, linking should be faster and produce a pipeline more
5001e5c31af7Sopenharmony_cirapidly, but performance of the pipeline on the target device may be
5002e5c31af7Sopenharmony_cireduced.
5003e5c31af7Sopenharmony_ciIf the bit is included, linking may be slower but should produce a pipeline
5004e5c31af7Sopenharmony_ciwith device performance comparable to a monolithically created pipeline.
5005e5c31af7Sopenharmony_ciUsing both options can allow latency-sensitive applications to generate a
5006e5c31af7Sopenharmony_cisuboptimal but usable pipeline quickly, and then perform an optimal link in
5007e5c31af7Sopenharmony_cithe background, substituting the result for the suboptimally linked pipeline
5008e5c31af7Sopenharmony_cias soon as it is available.
5009e5c31af7Sopenharmony_ci====
5010e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
5011e5c31af7Sopenharmony_ci--
5012e5c31af7Sopenharmony_ci
5013e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCreateFlags',desc='Bitmask of VkPipelineCreateFlagBits',type='flags']
5014e5c31af7Sopenharmony_ci--
5015e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkPipelineCreateFlags.adoc[]
5016e5c31af7Sopenharmony_ci
5017e5c31af7Sopenharmony_citname:VkPipelineCreateFlags is a bitmask type for setting a mask of zero or
5018e5c31af7Sopenharmony_cimore elink:VkPipelineCreateFlagBits.
5019e5c31af7Sopenharmony_ci--
5020e5c31af7Sopenharmony_ci
5021e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
5022e5c31af7Sopenharmony_ci[open,refpage='VkGraphicsPipelineLibraryCreateInfoEXT',desc='Structure specifying the subsets of the graphics pipeline being compiled',type='structs']
5023e5c31af7Sopenharmony_ci--
5024e5c31af7Sopenharmony_ciThe sname:VkGraphicsPipelineLibraryCreateInfoEXT structure is defined as:
5025e5c31af7Sopenharmony_ci
5026e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkGraphicsPipelineLibraryCreateInfoEXT.adoc[]
5027e5c31af7Sopenharmony_ci
5028e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
5029e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
5030e5c31af7Sopenharmony_ci    structure.
5031e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkGraphicsPipelineLibraryFlagBitsEXT
5032e5c31af7Sopenharmony_ci    specifying the subsets of the graphics pipeline that are being compiled.
5033e5c31af7Sopenharmony_ci
5034e5c31af7Sopenharmony_ciIf a sname:VkGraphicsPipelineLibraryCreateInfoEXT structure is included in
5035e5c31af7Sopenharmony_cithe pname:pNext chain of slink:VkGraphicsPipelineCreateInfo, it specifies
5036e5c31af7Sopenharmony_cithe <<pipelines-graphics-subsets,subsets of the graphics pipeline>> being
5037e5c31af7Sopenharmony_cicreated, excluding any subsets from linked pipeline libraries.
5038e5c31af7Sopenharmony_ciIf the pipeline is created with pipeline libraries, state from those
5039e5c31af7Sopenharmony_cilibraries is aggregated with said subset.
5040e5c31af7Sopenharmony_ci
5041e5c31af7Sopenharmony_ciIf this structure is omitted, and either
5042e5c31af7Sopenharmony_cislink:VkGraphicsPipelineCreateInfo::pname:flags includes
5043e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR or the
5044e5c31af7Sopenharmony_cislink:VkGraphicsPipelineCreateInfo::pname:pNext chain includes a
5045e5c31af7Sopenharmony_cislink:VkPipelineLibraryCreateInfoKHR structure with a pname:libraryCount
5046e5c31af7Sopenharmony_cigreater than `0`, it is as if pname:flags is `0`.
5047e5c31af7Sopenharmony_ciOtherwise if this structure is omitted, it is as if pname:flags includes all
5048e5c31af7Sopenharmony_cipossible subsets of the graphics pipeline (i.e. a
5049e5c31af7Sopenharmony_ci<<pipelines-graphics-subsets-complete,complete graphics pipeline>>).
5050e5c31af7Sopenharmony_ci
5051e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkGraphicsPipelineLibraryCreateInfoEXT.adoc[]
5052e5c31af7Sopenharmony_ci--
5053e5c31af7Sopenharmony_ci
5054e5c31af7Sopenharmony_ci[open,refpage='VkGraphicsPipelineLibraryFlagsEXT', desc='Bitmask of VkGraphicsPipelineLibraryFlagBitsEXT', type='flags']
5055e5c31af7Sopenharmony_ci--
5056e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkGraphicsPipelineLibraryFlagsEXT.adoc[]
5057e5c31af7Sopenharmony_ci
5058e5c31af7Sopenharmony_citname:VkGraphicsPipelineLibraryFlagsEXT is a bitmask type for setting a mask
5059e5c31af7Sopenharmony_ciof zero or more elink:VkGraphicsPipelineLibraryFlagBitsEXT.
5060e5c31af7Sopenharmony_ci--
5061e5c31af7Sopenharmony_ci
5062e5c31af7Sopenharmony_ci[open,refpage='VkGraphicsPipelineLibraryFlagBitsEXT',desc='Bitmask specifying the subset of a graphics pipeline to compile',type='enums']
5063e5c31af7Sopenharmony_ci--
5064e5c31af7Sopenharmony_ciPossible values of the pname:flags member of
5065e5c31af7Sopenharmony_cislink:VkGraphicsPipelineLibraryCreateInfoEXT, specifying the subsets of a
5066e5c31af7Sopenharmony_cigraphics pipeline to compile are:
5067e5c31af7Sopenharmony_ci
5068e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkGraphicsPipelineLibraryFlagBitsEXT.adoc[]
5069e5c31af7Sopenharmony_ci
5070e5c31af7Sopenharmony_ci  * ename:VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT
5071e5c31af7Sopenharmony_ci    specifies that a pipeline will include
5072e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-vertex-input,vertex input interface
5073e5c31af7Sopenharmony_ci    state>>.
5074e5c31af7Sopenharmony_ci  * ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT
5075e5c31af7Sopenharmony_ci    specifies that a pipeline will include
5076e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
5077e5c31af7Sopenharmony_ci    state>>.
5078e5c31af7Sopenharmony_ci  * ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT specifies
5079e5c31af7Sopenharmony_ci    that a pipeline will include
5080e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-shader,fragment shader state>>.
5081e5c31af7Sopenharmony_ci  * ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT
5082e5c31af7Sopenharmony_ci    specifies that a pipeline will include
5083e5c31af7Sopenharmony_ci    <<pipelines-graphics-subsets-fragment-output,fragment output interface
5084e5c31af7Sopenharmony_ci    state>>.
5085e5c31af7Sopenharmony_ci--
5086e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
5087e5c31af7Sopenharmony_ci
5088e5c31af7Sopenharmony_ci[open,refpage='VkPipelineDynamicStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline dynamic state',type='structs']
5089e5c31af7Sopenharmony_ci--
5090e5c31af7Sopenharmony_ciThe sname:VkPipelineDynamicStateCreateInfo structure is defined as:
5091e5c31af7Sopenharmony_ci
5092e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineDynamicStateCreateInfo.adoc[]
5093e5c31af7Sopenharmony_ci
5094e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
5095e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
5096e5c31af7Sopenharmony_ci    structure.
5097e5c31af7Sopenharmony_ci  * pname:flags is reserved for future use.
5098e5c31af7Sopenharmony_ci  * pname:dynamicStateCount is the number of elements in the
5099e5c31af7Sopenharmony_ci    pname:pDynamicStates array.
5100e5c31af7Sopenharmony_ci  * pname:pDynamicStates is a pointer to an array of elink:VkDynamicState
5101e5c31af7Sopenharmony_ci    values specifying which pieces of pipeline state will use the values
5102e5c31af7Sopenharmony_ci    from dynamic state commands rather than from pipeline state creation
5103e5c31af7Sopenharmony_ci    information.
5104e5c31af7Sopenharmony_ci
5105e5c31af7Sopenharmony_ci.Valid Usage
5106e5c31af7Sopenharmony_ci****
5107e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442]]
5108e5c31af7Sopenharmony_ci    Each element of pname:pDynamicStates must: be unique
5109e5c31af7Sopenharmony_ci****
5110e5c31af7Sopenharmony_ci
5111e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineDynamicStateCreateInfo.adoc[]
5112e5c31af7Sopenharmony_ci--
5113e5c31af7Sopenharmony_ci
5114e5c31af7Sopenharmony_ci[open,refpage='VkPipelineDynamicStateCreateFlags',desc='Reserved for future use',type='flags']
5115e5c31af7Sopenharmony_ci--
5116e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkPipelineDynamicStateCreateFlags.adoc[]
5117e5c31af7Sopenharmony_ci
5118e5c31af7Sopenharmony_citname:VkPipelineDynamicStateCreateFlags is a bitmask type for setting a
5119e5c31af7Sopenharmony_cimask, but is currently reserved for future use.
5120e5c31af7Sopenharmony_ci--
5121e5c31af7Sopenharmony_ci
5122e5c31af7Sopenharmony_ci[open,refpage='VkDynamicState',desc='Indicate which dynamic state is taken from dynamic state commands',type='enums']
5123e5c31af7Sopenharmony_ci--
5124e5c31af7Sopenharmony_ciThe source of different pieces of dynamic state is specified by the
5125e5c31af7Sopenharmony_cislink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates property of the
5126e5c31af7Sopenharmony_cicurrently active pipeline, each of whose elements must: be one of the
5127e5c31af7Sopenharmony_civalues:
5128e5c31af7Sopenharmony_ci
5129e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkDynamicState.adoc[]
5130e5c31af7Sopenharmony_ci
5131e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VIEWPORT specifies that the pname:pViewports
5132e5c31af7Sopenharmony_ci    state in slink:VkPipelineViewportStateCreateInfo will be ignored and
5133e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetViewport before any drawing
5134e5c31af7Sopenharmony_ci    commands.
5135e5c31af7Sopenharmony_ci    The number of viewports used by a pipeline is still specified by the
5136e5c31af7Sopenharmony_ci    pname:viewportCount member of slink:VkPipelineViewportStateCreateInfo.
5137e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_SCISSOR specifies that the pname:pScissors state
5138e5c31af7Sopenharmony_ci    in slink:VkPipelineViewportStateCreateInfo will be ignored and must: be
5139e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetScissor before any drawing commands.
5140e5c31af7Sopenharmony_ci    The number of scissor rectangles used by a pipeline is still specified
5141e5c31af7Sopenharmony_ci    by the pname:scissorCount member of
5142e5c31af7Sopenharmony_ci    slink:VkPipelineViewportStateCreateInfo.
5143e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_LINE_WIDTH specifies that the pname:lineWidth
5144e5c31af7Sopenharmony_ci    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
5145e5c31af7Sopenharmony_ci    and must: be set dynamically with flink:vkCmdSetLineWidth before any
5146e5c31af7Sopenharmony_ci    drawing commands that generate line primitives for the rasterizer.
5147e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_BIAS specifies that
5148e5c31af7Sopenharmony_ciifdef::VK_EXT_depth_bias_control[]
5149e5c31af7Sopenharmony_ci    any instance of slink:VkDepthBiasRepresentationInfoEXT included in the
5150e5c31af7Sopenharmony_ci    pname:pNext chain of slink:VkPipelineRasterizationStateCreateInfo as
5151e5c31af7Sopenharmony_ci    well as
5152e5c31af7Sopenharmony_ciendif::VK_EXT_depth_bias_control[]
5153e5c31af7Sopenharmony_ci    the pname:depthBiasConstantFactor, pname:depthBiasClamp and
5154e5c31af7Sopenharmony_ci    pname:depthBiasSlopeFactor states in
5155e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
5156e5c31af7Sopenharmony_ci    be set dynamically with flink:vkCmdSetDepthBias
5157e5c31af7Sopenharmony_ciifdef::VK_EXT_depth_bias_control[or flink:vkCmdSetDepthBias2EXT]
5158e5c31af7Sopenharmony_ci    before any draws are performed with <<primsrast-depthbias-enable, depth
5159e5c31af7Sopenharmony_ci    bias enabled>>.
5160e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS specifies that the
5161e5c31af7Sopenharmony_ci    pname:blendConstants state in slink:VkPipelineColorBlendStateCreateInfo
5162e5c31af7Sopenharmony_ci    will be ignored and must: be set dynamically with
5163e5c31af7Sopenharmony_ci    flink:vkCmdSetBlendConstants before any draws are performed with a
5164e5c31af7Sopenharmony_ci    pipeline state with sname:VkPipelineColorBlendAttachmentState member
5165e5c31af7Sopenharmony_ci    pname:blendEnable set to ename:VK_TRUE and any of the blend functions
5166e5c31af7Sopenharmony_ci    using a constant blend color.
5167e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS specifies that the
5168e5c31af7Sopenharmony_ci    pname:minDepthBounds and pname:maxDepthBounds states of
5169e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
5170e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetDepthBounds before any draws are
5171e5c31af7Sopenharmony_ci    performed with a pipeline state with
5172e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo member
5173e5c31af7Sopenharmony_ci    pname:depthBoundsTestEnable set to ename:VK_TRUE.
5174e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK specifies that the
5175e5c31af7Sopenharmony_ci    pname:compareMask state in slink:VkPipelineDepthStencilStateCreateInfo
5176e5c31af7Sopenharmony_ci    for both pname:front and pname:back will be ignored and must: be set
5177e5c31af7Sopenharmony_ci    dynamically with flink:vkCmdSetStencilCompareMask before any draws are
5178e5c31af7Sopenharmony_ci    performed with a pipeline state with
5179e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo member
5180e5c31af7Sopenharmony_ci    pname:stencilTestEnable set to ename:VK_TRUE
5181e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK specifies that the
5182e5c31af7Sopenharmony_ci    pname:writeMask state in slink:VkPipelineDepthStencilStateCreateInfo for
5183e5c31af7Sopenharmony_ci    both pname:front and pname:back will be ignored and must: be set
5184e5c31af7Sopenharmony_ci    dynamically with flink:vkCmdSetStencilWriteMask before any draws are
5185e5c31af7Sopenharmony_ci    performed with a pipeline state with
5186e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo member
5187e5c31af7Sopenharmony_ci    pname:stencilTestEnable set to ename:VK_TRUE
5188e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE specifies that the
5189e5c31af7Sopenharmony_ci    pname:reference state in slink:VkPipelineDepthStencilStateCreateInfo for
5190e5c31af7Sopenharmony_ci    both pname:front and pname:back will be ignored and must: be set
5191e5c31af7Sopenharmony_ci    dynamically with flink:vkCmdSetStencilReference before any draws are
5192e5c31af7Sopenharmony_ci    performed with a pipeline state with
5193e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo member
5194e5c31af7Sopenharmony_ci    pname:stencilTestEnable set to ename:VK_TRUE
5195e5c31af7Sopenharmony_ciifdef::VK_NV_clip_space_w_scaling[]
5196e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV specifies that the
5197e5c31af7Sopenharmony_ci    pname:pViewportWScalings state in
5198e5c31af7Sopenharmony_ci    slink:VkPipelineViewportWScalingStateCreateInfoNV will be ignored and
5199e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetViewportWScalingNV before
5200e5c31af7Sopenharmony_ci    any draws are performed with a pipeline state with
5201e5c31af7Sopenharmony_ci    slink:VkPipelineViewportWScalingStateCreateInfoNV member
5202e5c31af7Sopenharmony_ci    pname:viewportScalingEnable set to ename:VK_TRUE
5203e5c31af7Sopenharmony_ciendif::VK_NV_clip_space_w_scaling[]
5204e5c31af7Sopenharmony_ciifdef::VK_EXT_discard_rectangles[]
5205e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT specifies that the
5206e5c31af7Sopenharmony_ci    pname:pDiscardRectangles state in
5207e5c31af7Sopenharmony_ci    slink:VkPipelineDiscardRectangleStateCreateInfoEXT will be ignored and
5208e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetDiscardRectangleEXT before
5209e5c31af7Sopenharmony_ci    any draw or clear commands.
5210e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT specifies that the
5211e5c31af7Sopenharmony_ci    presence of the slink:VkPipelineDiscardRectangleStateCreateInfoEXT
5212e5c31af7Sopenharmony_ci    structure in the slink:VkGraphicsPipelineCreateInfo chain with a
5213e5c31af7Sopenharmony_ci    pname:discardRectangleCount greater than zero does not implicitly enable
5214e5c31af7Sopenharmony_ci    discard rectangles and they must: be enabled dynamically with
5215e5c31af7Sopenharmony_ci    flink:vkCmdSetDiscardRectangleEnableEXT before any draw commands.
5216e5c31af7Sopenharmony_ci    This is available on implementations that support at least
5217e5c31af7Sopenharmony_ci    pname:specVersion `2` of the `apiext:VK_EXT_discard_rectangles`
5218e5c31af7Sopenharmony_ci    extension.
5219e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT specifies that the
5220e5c31af7Sopenharmony_ci    pname:discardRectangleMode state in
5221e5c31af7Sopenharmony_ci    slink:VkPipelineDiscardRectangleStateCreateInfoEXT will be ignored and
5222e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetDiscardRectangleModeEXT
5223e5c31af7Sopenharmony_ci    before any draw commands.
5224e5c31af7Sopenharmony_ci    This is available on implementations that support at least
5225e5c31af7Sopenharmony_ci    pname:specVersion `2` of the `apiext:VK_EXT_discard_rectangles`
5226e5c31af7Sopenharmony_ci    extension.
5227e5c31af7Sopenharmony_ciendif::VK_EXT_discard_rectangles[]
5228e5c31af7Sopenharmony_ciifdef::VK_EXT_sample_locations[]
5229e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT specifies that the
5230e5c31af7Sopenharmony_ci    pname:sampleLocationsInfo state in
5231e5c31af7Sopenharmony_ci    slink:VkPipelineSampleLocationsStateCreateInfoEXT will be ignored and
5232e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetSampleLocationsEXT before
5233e5c31af7Sopenharmony_ci    any draw or clear commands.
5234e5c31af7Sopenharmony_ci    Enabling custom sample locations is still indicated by the
5235e5c31af7Sopenharmony_ci    pname:sampleLocationsEnable member of
5236e5c31af7Sopenharmony_ci    slink:VkPipelineSampleLocationsStateCreateInfoEXT.
5237e5c31af7Sopenharmony_ciendif::VK_EXT_sample_locations[]
5238e5c31af7Sopenharmony_ciifdef::VK_NV_scissor_exclusive[]
5239e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV specifies that the
5240e5c31af7Sopenharmony_ci    pname:pExclusiveScissors state in
5241e5c31af7Sopenharmony_ci    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV will be
5242e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5243e5c31af7Sopenharmony_ci    flink:vkCmdSetExclusiveScissorNV before any drawing commands.
5244e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV specifies that the
5245e5c31af7Sopenharmony_ci    exclusive scissors must: be explicitly enabled with
5246e5c31af7Sopenharmony_ci    flink:vkCmdSetExclusiveScissorEnableNV and the
5247e5c31af7Sopenharmony_ci    pname:exclusiveScissorCount value in
5248e5c31af7Sopenharmony_ci    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV will not
5249e5c31af7Sopenharmony_ci    implicitly enable them.
5250e5c31af7Sopenharmony_ci    This is available on implementations that support at least
5251e5c31af7Sopenharmony_ci    pname:specVersion `2` of the `apiext:VK_NV_scissor_exclusive` extension.
5252e5c31af7Sopenharmony_ciendif::VK_NV_scissor_exclusive[]
5253e5c31af7Sopenharmony_ciifdef::VK_NV_shading_rate_image[]
5254e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV specifies that
5255e5c31af7Sopenharmony_ci    the pname:pShadingRatePalettes state in
5256e5c31af7Sopenharmony_ci    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV will be
5257e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5258e5c31af7Sopenharmony_ci    flink:vkCmdSetViewportShadingRatePaletteNV before any drawing commands.
5259e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV specifies that
5260e5c31af7Sopenharmony_ci    the coarse sample order state in
5261e5c31af7Sopenharmony_ci    slink:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV will be
5262e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5263e5c31af7Sopenharmony_ci    flink:vkCmdSetCoarseSampleOrderNV before any drawing commands.
5264e5c31af7Sopenharmony_ciendif::VK_NV_shading_rate_image[]
5265e5c31af7Sopenharmony_ciifdef::VK_EXT_line_rasterization[]
5266e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT specifies that the
5267e5c31af7Sopenharmony_ci    pname:lineStippleFactor and pname:lineStipplePattern state in
5268e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationLineStateCreateInfoEXT will be ignored and
5269e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetLineStippleEXT before any
5270e5c31af7Sopenharmony_ci    draws are performed with a pipeline state with
5271e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationLineStateCreateInfoEXT member
5272e5c31af7Sopenharmony_ci    pname:stippledLineEnable set to ename:VK_TRUE.
5273e5c31af7Sopenharmony_ciendif::VK_EXT_line_rasterization[]
5274e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
5275e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_CULL_MODE specifies that the pname:cullMode state
5276e5c31af7Sopenharmony_ci    in slink:VkPipelineRasterizationStateCreateInfo will be ignored and
5277e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetCullMode before any drawing
5278e5c31af7Sopenharmony_ci    commands.
5279e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_FRONT_FACE specifies that the pname:frontFace
5280e5c31af7Sopenharmony_ci    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
5281e5c31af7Sopenharmony_ci    and must: be set dynamically with flink:vkCmdSetFrontFace before any
5282e5c31af7Sopenharmony_ci    drawing commands.
5283e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY specifies that the
5284e5c31af7Sopenharmony_ci    pname:topology state in slink:VkPipelineInputAssemblyStateCreateInfo
5285e5c31af7Sopenharmony_ci    only specifies the <<drawing-primitive-topology-class, topology class>>,
5286e5c31af7Sopenharmony_ci    and the specific topology order and adjacency must: be set dynamically
5287e5c31af7Sopenharmony_ci    with flink:vkCmdSetPrimitiveTopology before any drawing commands.
5288e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT specifies that the
5289e5c31af7Sopenharmony_ci    pname:viewportCount and pname:pViewports state in
5290e5c31af7Sopenharmony_ci    slink:VkPipelineViewportStateCreateInfo will be ignored and must: be set
5291e5c31af7Sopenharmony_ci    dynamically with flink:vkCmdSetViewportWithCount before any draw call.
5292e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT specifies that the
5293e5c31af7Sopenharmony_ci    pname:scissorCount and pname:pScissors state in
5294e5c31af7Sopenharmony_ci    slink:VkPipelineViewportStateCreateInfo will be ignored and must: be set
5295e5c31af7Sopenharmony_ci    dynamically with flink:vkCmdSetScissorWithCount before any draw call.
5296e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE specifies that the
5297e5c31af7Sopenharmony_ci    pname:stride state in slink:VkVertexInputBindingDescription will be
5298e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with flink:vkCmdBindVertexBuffers2
5299e5c31af7Sopenharmony_ci    before any draw call.
5300e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE specifies that the
5301e5c31af7Sopenharmony_ci    pname:depthTestEnable state in
5302e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
5303e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetDepthTestEnable before any draw call.
5304e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE specifies that the
5305e5c31af7Sopenharmony_ci    pname:depthWriteEnable state in
5306e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
5307e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetDepthWriteEnable before any draw
5308e5c31af7Sopenharmony_ci    call.
5309e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP specifies that the
5310e5c31af7Sopenharmony_ci    pname:depthCompareOp state in
5311e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
5312e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetDepthCompareOp before any draw call.
5313e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE specifies that the
5314e5c31af7Sopenharmony_ci    pname:depthBoundsTestEnable state in
5315e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
5316e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetDepthBoundsTestEnable before any draw
5317e5c31af7Sopenharmony_ci    call.
5318e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE specifies that the
5319e5c31af7Sopenharmony_ci    pname:stencilTestEnable state in
5320e5c31af7Sopenharmony_ci    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
5321e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetStencilTestEnable before any draw
5322e5c31af7Sopenharmony_ci    call.
5323e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_STENCIL_OP specifies that the pname:failOp,
5324e5c31af7Sopenharmony_ci    pname:passOp, pname:depthFailOp, and pname:compareOp states in
5325e5c31af7Sopenharmony_ci    sname:VkPipelineDepthStencilStateCreateInfo for both pname:front and
5326e5c31af7Sopenharmony_ci    pname:back will be ignored and must: be set dynamically with
5327e5c31af7Sopenharmony_ci    flink:vkCmdSetStencilOp before any draws are performed with a pipeline
5328e5c31af7Sopenharmony_ci    state with sname:VkPipelineDepthStencilStateCreateInfo member
5329e5c31af7Sopenharmony_ci    pname:stencilTestEnable set to ename:VK_TRUE
5330e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
5331e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
5332e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state2[]
5333e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT specifies that the
5334e5c31af7Sopenharmony_ci    pname:patchControlPoints state in
5335e5c31af7Sopenharmony_ci    slink:VkPipelineTessellationStateCreateInfo will be ignored and must: be
5336e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetPatchControlPointsEXT before any
5337e5c31af7Sopenharmony_ci    drawing commands.
5338e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state2[]
5339e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE specifies that the
5340e5c31af7Sopenharmony_ci    pname:rasterizerDiscardEnable state in
5341e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
5342e5c31af7Sopenharmony_ci    be set dynamically with flink:vkCmdSetRasterizerDiscardEnable before any
5343e5c31af7Sopenharmony_ci    drawing commands.
5344e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE specifies that the
5345e5c31af7Sopenharmony_ci    pname:depthBiasEnable state in
5346e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
5347e5c31af7Sopenharmony_ci    be set dynamically with flink:vkCmdSetDepthBiasEnable before any drawing
5348e5c31af7Sopenharmony_ci    commands.
5349e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state2[]
5350e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT specifies that the pname:logicOp
5351e5c31af7Sopenharmony_ci    state in slink:VkPipelineColorBlendStateCreateInfo will be ignored and
5352e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetLogicOpEXT before any
5353e5c31af7Sopenharmony_ci    drawing commands.
5354e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state2[]
5355e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE specifies that the
5356e5c31af7Sopenharmony_ci    pname:primitiveRestartEnable state in
5357e5c31af7Sopenharmony_ci    slink:VkPipelineInputAssemblyStateCreateInfo will be ignored and must:
5358e5c31af7Sopenharmony_ci    be set dynamically with flink:vkCmdSetPrimitiveRestartEnable before any
5359e5c31af7Sopenharmony_ci    drawing commands.
5360e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
5361e5c31af7Sopenharmony_ciifdef::VK_KHR_fragment_shading_rate[]
5362e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR specifies that state in
5363e5c31af7Sopenharmony_ci    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
5364e5c31af7Sopenharmony_ciifdef::VK_NV_fragment_shading_rate_enums[]
5365e5c31af7Sopenharmony_ci    and slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV
5366e5c31af7Sopenharmony_ciendif::VK_NV_fragment_shading_rate_enums[]
5367e5c31af7Sopenharmony_ci    will be ignored and must: be set dynamically with
5368e5c31af7Sopenharmony_ci    flink:vkCmdSetFragmentShadingRateKHR
5369e5c31af7Sopenharmony_ciifdef::VK_NV_fragment_shading_rate_enums[]
5370e5c31af7Sopenharmony_ci    or flink:vkCmdSetFragmentShadingRateEnumNV
5371e5c31af7Sopenharmony_ciendif::VK_NV_fragment_shading_rate_enums[]
5372e5c31af7Sopenharmony_ci    before any drawing commands.
5373e5c31af7Sopenharmony_ciendif::VK_KHR_fragment_shading_rate[]
5374e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
5375e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR specifies
5376e5c31af7Sopenharmony_ci    that the default stack size computation for the pipeline will be ignored
5377e5c31af7Sopenharmony_ci    and must: be set dynamically with
5378e5c31af7Sopenharmony_ci    flink:vkCmdSetRayTracingPipelineStackSizeKHR before any ray tracing
5379e5c31af7Sopenharmony_ci    calls are performed.
5380e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
5381e5c31af7Sopenharmony_ciifdef::VK_EXT_vertex_input_dynamic_state[]
5382e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT specifies that the
5383e5c31af7Sopenharmony_ci    pname:pVertexInputState state will be ignored and must: be set
5384e5c31af7Sopenharmony_ci    dynamically with flink:vkCmdSetVertexInputEXT before any drawing
5385e5c31af7Sopenharmony_ci    commands
5386e5c31af7Sopenharmony_ciendif::VK_EXT_vertex_input_dynamic_state[]
5387e5c31af7Sopenharmony_ciifdef::VK_EXT_color_write_enable[]
5388e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT specifies that the
5389e5c31af7Sopenharmony_ci    pname:pColorWriteEnables state in
5390e5c31af7Sopenharmony_ci    slink:VkPipelineColorWriteCreateInfoEXT will be ignored and must: be set
5391e5c31af7Sopenharmony_ci    dynamically with flink:vkCmdSetColorWriteEnableEXT before any draw call.
5392e5c31af7Sopenharmony_ciendif::VK_EXT_color_write_enable[]
5393e5c31af7Sopenharmony_ciifdef::VK_EXT_extended_dynamic_state3[]
5394e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT specifies that the
5395e5c31af7Sopenharmony_ci    pname:domainOrigin state in
5396e5c31af7Sopenharmony_ci    slink:VkPipelineTessellationDomainOriginStateCreateInfo will be ignored
5397e5c31af7Sopenharmony_ci    and must: be set dynamically with
5398e5c31af7Sopenharmony_ci    flink:vkCmdSetTessellationDomainOriginEXT before any draw call.
5399e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT specifies that the
5400e5c31af7Sopenharmony_ci    pname:depthClampEnable state in
5401e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
5402e5c31af7Sopenharmony_ci    be set dynamically with flink:vkCmdSetDepthClampEnableEXT before any
5403e5c31af7Sopenharmony_ci    draw call.
5404e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT specifies that the
5405e5c31af7Sopenharmony_ci    pname:polygonMode state in slink:VkPipelineRasterizationStateCreateInfo
5406e5c31af7Sopenharmony_ci    will be ignored and must: be set dynamically with
5407e5c31af7Sopenharmony_ci    flink:vkCmdSetPolygonModeEXT before any draw call.
5408e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT specifies that the
5409e5c31af7Sopenharmony_ci    pname:rasterizationSamples state in
5410e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo will be ignored and must: be
5411e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetRasterizationSamplesEXT before any
5412e5c31af7Sopenharmony_ci    draw call.
5413e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT specifies that the
5414e5c31af7Sopenharmony_ci    pname:pSampleMask state in slink:VkPipelineMultisampleStateCreateInfo
5415e5c31af7Sopenharmony_ci    will be ignored and must: be set dynamically with
5416e5c31af7Sopenharmony_ci    flink:vkCmdSetSampleMaskEXT before any draw call.
5417e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT specifies that the
5418e5c31af7Sopenharmony_ci    pname:alphaToCoverageEnable state in
5419e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo will be ignored and must: be
5420e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetAlphaToCoverageEnableEXT before any
5421e5c31af7Sopenharmony_ci    draw call.
5422e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT specifies that the
5423e5c31af7Sopenharmony_ci    pname:alphaToOneEnable state in
5424e5c31af7Sopenharmony_ci    slink:VkPipelineMultisampleStateCreateInfo will be ignored and must: be
5425e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetAlphaToOneEnableEXT before any draw
5426e5c31af7Sopenharmony_ci    call.
5427e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT specifies that the
5428e5c31af7Sopenharmony_ci    pname:logicOpEnable state in slink:VkPipelineColorBlendStateCreateInfo
5429e5c31af7Sopenharmony_ci    will be ignored and must: be set dynamically with
5430e5c31af7Sopenharmony_ci    flink:vkCmdSetLogicOpEnableEXT before any draw call.
5431e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT specifies that the
5432e5c31af7Sopenharmony_ci    pname:blendEnable state in slink:VkPipelineColorBlendAttachmentState
5433e5c31af7Sopenharmony_ci    will be ignored and must: be set dynamically with
5434e5c31af7Sopenharmony_ci    flink:vkCmdSetColorBlendEnableEXT before any draw call.
5435e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT specifies that the
5436e5c31af7Sopenharmony_ci    pname:srcColorBlendFactor, pname:dstColorBlendFactor,
5437e5c31af7Sopenharmony_ci    pname:colorBlendOp, pname:srcAlphaBlendFactor,
5438e5c31af7Sopenharmony_ci    pname:dstAlphaBlendFactor, and pname:alphaBlendOp states in
5439e5c31af7Sopenharmony_ci    slink:VkPipelineColorBlendAttachmentState will be ignored and must: be
5440e5c31af7Sopenharmony_ci    set dynamically with flink:vkCmdSetColorBlendEquationEXT before any draw
5441e5c31af7Sopenharmony_ci    call.
5442e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT specifies that the
5443e5c31af7Sopenharmony_ci    pname:colorWriteMask state in slink:VkPipelineColorBlendAttachmentState
5444e5c31af7Sopenharmony_ci    will be ignored and must: be set dynamically with
5445e5c31af7Sopenharmony_ci    flink:vkCmdSetColorWriteMaskEXT before any draw call.
5446e5c31af7Sopenharmony_ciifdef::VK_EXT_transform_feedback[]
5447e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT specifies that the
5448e5c31af7Sopenharmony_ci    pname:rasterizationStream state in
5449e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationStateStreamCreateInfoEXT will be ignored
5450e5c31af7Sopenharmony_ci    and must: be set dynamically with flink:vkCmdSetRasterizationStreamEXT
5451e5c31af7Sopenharmony_ci    before any draw call.
5452e5c31af7Sopenharmony_ciendif::VK_EXT_transform_feedback[]
5453e5c31af7Sopenharmony_ciifdef::VK_EXT_conservative_rasterization[]
5454e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT specifies
5455e5c31af7Sopenharmony_ci    that the pname:conservativeRasterizationMode state in
5456e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT will be
5457e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5458e5c31af7Sopenharmony_ci    flink:vkCmdSetConservativeRasterizationModeEXT before any draw call.
5459e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT specifies
5460e5c31af7Sopenharmony_ci    that the pname:extraPrimitiveOverestimationSize state in
5461e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT will be
5462e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5463e5c31af7Sopenharmony_ci    flink:vkCmdSetExtraPrimitiveOverestimationSizeEXT before any draw call.
5464e5c31af7Sopenharmony_ciendif::VK_EXT_conservative_rasterization[]
5465e5c31af7Sopenharmony_ciifdef::VK_EXT_depth_clip_enable[]
5466e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT specifies that the
5467e5c31af7Sopenharmony_ci    pname:depthClipEnable state in
5468e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT will be ignored
5469e5c31af7Sopenharmony_ci    and must: be set dynamically with flink:vkCmdSetDepthClipEnableEXT
5470e5c31af7Sopenharmony_ci    before any draw call.
5471e5c31af7Sopenharmony_ciendif::VK_EXT_depth_clip_enable[]
5472e5c31af7Sopenharmony_ciifdef::VK_EXT_sample_locations[]
5473e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT specifies that the
5474e5c31af7Sopenharmony_ci    pname:sampleLocationsEnable state in
5475e5c31af7Sopenharmony_ci    slink:VkPipelineSampleLocationsStateCreateInfoEXT will be ignored and
5476e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetSampleLocationsEnableEXT
5477e5c31af7Sopenharmony_ci    before any draw call.
5478e5c31af7Sopenharmony_ciendif::VK_EXT_sample_locations[]
5479e5c31af7Sopenharmony_ciifdef::VK_EXT_blend_operation_advanced[]
5480e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT specifies that the
5481e5c31af7Sopenharmony_ci    pname:colorBlendOp state in slink:VkPipelineColorBlendAttachmentState,
5482e5c31af7Sopenharmony_ci    and pname:srcPremultiplied, pname:dstPremultiplied, and
5483e5c31af7Sopenharmony_ci    pname:blendOverlap states in
5484e5c31af7Sopenharmony_ci    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT will be ignored and
5485e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetColorBlendAdvancedEXT before
5486e5c31af7Sopenharmony_ci    any draw call.
5487e5c31af7Sopenharmony_ciendif::VK_EXT_blend_operation_advanced[]
5488e5c31af7Sopenharmony_ciifdef::VK_EXT_provoking_vertex[]
5489e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT specifies that the
5490e5c31af7Sopenharmony_ci    pname:provokingVertexMode state in
5491e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT will be
5492e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5493e5c31af7Sopenharmony_ci    flink:vkCmdSetProvokingVertexModeEXT before any draw call.
5494e5c31af7Sopenharmony_ciendif::VK_EXT_provoking_vertex[]
5495e5c31af7Sopenharmony_ciifdef::VK_EXT_line_rasterization[]
5496e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT specifies that the
5497e5c31af7Sopenharmony_ci    pname:lineRasterizationMode state in
5498e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationLineStateCreateInfoEXT will be ignored and
5499e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetLineRasterizationModeEXT
5500e5c31af7Sopenharmony_ci    before any draw call.
5501e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT specifies that the
5502e5c31af7Sopenharmony_ci    pname:stippledLineEnable state in
5503e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationLineStateCreateInfoEXT will be ignored and
5504e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetLineStippleEnableEXT before
5505e5c31af7Sopenharmony_ci    any draw call.
5506e5c31af7Sopenharmony_ciendif::VK_EXT_line_rasterization[]
5507e5c31af7Sopenharmony_ciifdef::VK_EXT_depth_clip_control[]
5508e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT specifies that
5509e5c31af7Sopenharmony_ci    the pname:negativeOneToOne state in
5510e5c31af7Sopenharmony_ci    slink:VkPipelineViewportDepthClipControlCreateInfoEXT will be ignored
5511e5c31af7Sopenharmony_ci    and must: be set dynamically with
5512e5c31af7Sopenharmony_ci    flink:vkCmdSetDepthClipNegativeOneToOneEXT before any draw call.
5513e5c31af7Sopenharmony_ciendif::VK_EXT_depth_clip_control[]
5514e5c31af7Sopenharmony_ciifdef::VK_NV_clip_space_w_scaling[]
5515e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV specifies that the
5516e5c31af7Sopenharmony_ci    pname:viewportWScalingEnable state in
5517e5c31af7Sopenharmony_ci    slink:VkPipelineViewportWScalingStateCreateInfoNV will be ignored and
5518e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetViewportWScalingEnableNV
5519e5c31af7Sopenharmony_ci    before any draw call.
5520e5c31af7Sopenharmony_ciendif::VK_NV_clip_space_w_scaling[]
5521e5c31af7Sopenharmony_ciifdef::VK_NV_viewport_swizzle[]
5522e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV specifies that the
5523e5c31af7Sopenharmony_ci    pname:viewportCount, and pname:pViewportSwizzles states in
5524e5c31af7Sopenharmony_ci    slink:VkPipelineViewportSwizzleStateCreateInfoNV will be ignored and
5525e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetViewportSwizzleNV before any
5526e5c31af7Sopenharmony_ci    draw call.
5527e5c31af7Sopenharmony_ciendif::VK_NV_viewport_swizzle[]
5528e5c31af7Sopenharmony_ciifdef::VK_NV_fragment_coverage_to_color[]
5529e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV specifies that the
5530e5c31af7Sopenharmony_ci    pname:coverageToColorEnable state in
5531e5c31af7Sopenharmony_ci    slink:VkPipelineCoverageToColorStateCreateInfoNV will be ignored and
5532e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetCoverageToColorEnableNV
5533e5c31af7Sopenharmony_ci    before any draw call.
5534e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV specifies that the
5535e5c31af7Sopenharmony_ci    pname:coverageToColorLocation state in
5536e5c31af7Sopenharmony_ci    slink:VkPipelineCoverageToColorStateCreateInfoNV will be ignored and
5537e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetCoverageToColorLocationNV
5538e5c31af7Sopenharmony_ci    before any draw call.
5539e5c31af7Sopenharmony_ciendif::VK_NV_fragment_coverage_to_color[]
5540e5c31af7Sopenharmony_ciifdef::VK_NV_framebuffer_mixed_samples[]
5541e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV specifies that the
5542e5c31af7Sopenharmony_ci    pname:coverageModulationMode state in
5543e5c31af7Sopenharmony_ci    slink:VkPipelineCoverageModulationStateCreateInfoNV will be ignored and
5544e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetCoverageModulationModeNV
5545e5c31af7Sopenharmony_ci    before any draw call.
5546e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV specifies
5547e5c31af7Sopenharmony_ci    that the pname:coverageModulationTableEnable state in
5548e5c31af7Sopenharmony_ci    slink:VkPipelineCoverageModulationStateCreateInfoNV will be ignored and
5549e5c31af7Sopenharmony_ci    must: be set dynamically with
5550e5c31af7Sopenharmony_ci    flink:vkCmdSetCoverageModulationTableEnableNV before any draw call.
5551e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV specifies that the
5552e5c31af7Sopenharmony_ci    pname:coverageModulationTableCount, and pname:pCoverageModulationTable
5553e5c31af7Sopenharmony_ci    states in slink:VkPipelineCoverageModulationStateCreateInfoNV will be
5554e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5555e5c31af7Sopenharmony_ci    flink:vkCmdSetCoverageModulationTableNV before any draw call.
5556e5c31af7Sopenharmony_ciendif::VK_NV_framebuffer_mixed_samples[]
5557e5c31af7Sopenharmony_ciifdef::VK_NV_shading_rate_image[]
5558e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV specifies that the
5559e5c31af7Sopenharmony_ci    pname:shadingRateImageEnable state in
5560e5c31af7Sopenharmony_ci    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV will be
5561e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5562e5c31af7Sopenharmony_ci    flink:vkCmdSetShadingRateImageEnableNV before any draw call.
5563e5c31af7Sopenharmony_ciendif::VK_NV_shading_rate_image[]
5564e5c31af7Sopenharmony_ciifdef::VK_NV_representative_fragment_test[]
5565e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV specifies
5566e5c31af7Sopenharmony_ci    that the pname:representativeFragmentTestEnable state in
5567e5c31af7Sopenharmony_ci    slink:VkPipelineRepresentativeFragmentTestStateCreateInfoNV will be
5568e5c31af7Sopenharmony_ci    ignored and must: be set dynamically with
5569e5c31af7Sopenharmony_ci    flink:vkCmdSetRepresentativeFragmentTestEnableNV before any draw call.
5570e5c31af7Sopenharmony_ciendif::VK_NV_representative_fragment_test[]
5571e5c31af7Sopenharmony_ciifdef::VK_NV_coverage_reduction_mode[]
5572e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV specifies that the
5573e5c31af7Sopenharmony_ci    pname:coverageReductionMode state in
5574e5c31af7Sopenharmony_ci    slink:VkPipelineCoverageReductionStateCreateInfoNV will be ignored and
5575e5c31af7Sopenharmony_ci    must: be set dynamically with flink:vkCmdSetCoverageReductionModeNV
5576e5c31af7Sopenharmony_ci    before any draw call.
5577e5c31af7Sopenharmony_ciendif::VK_NV_coverage_reduction_mode[]
5578e5c31af7Sopenharmony_ciifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
5579e5c31af7Sopenharmony_ci  * ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT specifies
5580e5c31af7Sopenharmony_ci    that the ename:VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
5581e5c31af7Sopenharmony_ci    and
5582e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
5583e5c31af7Sopenharmony_ci    flags will be ignored and must: be set dynamically with
5584e5c31af7Sopenharmony_ci    flink:vkCmdSetAttachmentFeedbackLoopEnableEXT before any draw call.
5585e5c31af7Sopenharmony_ciendif::VK_EXT_attachment_feedback_loop_dynamic_state[]
5586e5c31af7Sopenharmony_ciendif::VK_EXT_extended_dynamic_state3[]
5587e5c31af7Sopenharmony_ci--
5588e5c31af7Sopenharmony_ci
5589e5c31af7Sopenharmony_ci
5590e5c31af7Sopenharmony_ci=== Valid Combinations of Stages for Graphics Pipelines
5591e5c31af7Sopenharmony_ci
5592e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
5593e5c31af7Sopenharmony_ciPrimitive processing can be handled either on a per primitive basis by the
5594e5c31af7Sopenharmony_civertex, tessellation, and geometry shader stages, or on a per mesh basis
5595e5c31af7Sopenharmony_ciusing task and mesh shader stages.
5596e5c31af7Sopenharmony_ciIf the pipeline includes a mesh shader stage, it uses the mesh pipeline,
5597e5c31af7Sopenharmony_ciotherwise it uses the primitive pipeline.
5598e5c31af7Sopenharmony_ci
5599e5c31af7Sopenharmony_ciIf a task shader is omitted, the task shading stage is skipped.
5600e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
5601e5c31af7Sopenharmony_ci
5602e5c31af7Sopenharmony_ciIf tessellation shader stages are omitted, the tessellation shading and
5603e5c31af7Sopenharmony_cifixed-function stages of the pipeline are skipped.
5604e5c31af7Sopenharmony_ci
5605e5c31af7Sopenharmony_ciIf a geometry shader is omitted, the geometry shading stage is skipped.
5606e5c31af7Sopenharmony_ci
5607e5c31af7Sopenharmony_ciIf a fragment shader is omitted, fragment color outputs have undefined:
5608e5c31af7Sopenharmony_civalues, and the fragment depth value is determined by <<fragops, Fragment
5609e5c31af7Sopenharmony_ciOperations>> state.
5610e5c31af7Sopenharmony_ciThis can: be useful for depth-only rendering.
5611e5c31af7Sopenharmony_ci
5612e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
5613e5c31af7Sopenharmony_ciPresence of a shader stage in a pipeline is derived from the
5614e5c31af7Sopenharmony_ci<<pipelines-cache,pipeline cache>> entry identified by
5615e5c31af7Sopenharmony_cislink:VkPipelineOfflineCreateInfo::pname:pipelineIdentifier.
5616e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5617e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
5618e5c31af7Sopenharmony_ciPresence of a shader stage in a pipeline is indicated by including a valid
5619e5c31af7Sopenharmony_cislink:VkPipelineShaderStageCreateInfo with pname:module and pname:pName
5620e5c31af7Sopenharmony_ciselecting an entry point from a shader module, where that entry point is
5621e5c31af7Sopenharmony_civalid for the stage specified by pname:stage.
5622e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5623e5c31af7Sopenharmony_ci
5624e5c31af7Sopenharmony_ciPresence of some of the fixed-function stages in the pipeline is implicitly
5625e5c31af7Sopenharmony_ciderived from enabled shaders and provided state.
5626e5c31af7Sopenharmony_ciFor example, the fixed-function tessellator is always present when the
5627e5c31af7Sopenharmony_cipipeline has valid Tessellation Control and Tessellation Evaluation shaders.
5628e5c31af7Sopenharmony_ci
5629e5c31af7Sopenharmony_ci.For example:
5630e5c31af7Sopenharmony_ci  * Depth/stencil-only rendering in a subpass with no color attachments
5631e5c31af7Sopenharmony_ci  ** Active Pipeline Shader Stages
5632e5c31af7Sopenharmony_ci  *** Vertex Shader
5633e5c31af7Sopenharmony_ci  ** Required: Fixed-Function Pipeline Stages
5634e5c31af7Sopenharmony_ci  *** slink:VkPipelineVertexInputStateCreateInfo
5635e5c31af7Sopenharmony_ci  *** slink:VkPipelineInputAssemblyStateCreateInfo
5636e5c31af7Sopenharmony_ci  *** slink:VkPipelineViewportStateCreateInfo
5637e5c31af7Sopenharmony_ci  *** slink:VkPipelineRasterizationStateCreateInfo
5638e5c31af7Sopenharmony_ci  *** slink:VkPipelineMultisampleStateCreateInfo
5639e5c31af7Sopenharmony_ci  *** slink:VkPipelineDepthStencilStateCreateInfo
5640e5c31af7Sopenharmony_ci  * Color-only rendering in a subpass with no depth/stencil attachment
5641e5c31af7Sopenharmony_ci  ** Active Pipeline Shader Stages
5642e5c31af7Sopenharmony_ci  *** Vertex Shader
5643e5c31af7Sopenharmony_ci  *** Fragment Shader
5644e5c31af7Sopenharmony_ci  ** Required: Fixed-Function Pipeline Stages
5645e5c31af7Sopenharmony_ci  *** slink:VkPipelineVertexInputStateCreateInfo
5646e5c31af7Sopenharmony_ci  *** slink:VkPipelineInputAssemblyStateCreateInfo
5647e5c31af7Sopenharmony_ci  *** slink:VkPipelineViewportStateCreateInfo
5648e5c31af7Sopenharmony_ci  *** slink:VkPipelineRasterizationStateCreateInfo
5649e5c31af7Sopenharmony_ci  *** slink:VkPipelineMultisampleStateCreateInfo
5650e5c31af7Sopenharmony_ci  *** slink:VkPipelineColorBlendStateCreateInfo
5651e5c31af7Sopenharmony_ci  * Rendering pipeline with tessellation and geometry shaders
5652e5c31af7Sopenharmony_ci  ** Active Pipeline Shader Stages
5653e5c31af7Sopenharmony_ci  *** Vertex Shader
5654e5c31af7Sopenharmony_ci  *** Tessellation Control Shader
5655e5c31af7Sopenharmony_ci  *** Tessellation Evaluation Shader
5656e5c31af7Sopenharmony_ci  *** Geometry Shader
5657e5c31af7Sopenharmony_ci  *** Fragment Shader
5658e5c31af7Sopenharmony_ci  ** Required: Fixed-Function Pipeline Stages
5659e5c31af7Sopenharmony_ci  *** slink:VkPipelineVertexInputStateCreateInfo
5660e5c31af7Sopenharmony_ci  *** slink:VkPipelineInputAssemblyStateCreateInfo
5661e5c31af7Sopenharmony_ci  *** slink:VkPipelineTessellationStateCreateInfo
5662e5c31af7Sopenharmony_ci  *** slink:VkPipelineViewportStateCreateInfo
5663e5c31af7Sopenharmony_ci  *** slink:VkPipelineRasterizationStateCreateInfo
5664e5c31af7Sopenharmony_ci  *** slink:VkPipelineMultisampleStateCreateInfo
5665e5c31af7Sopenharmony_ci  *** slink:VkPipelineDepthStencilStateCreateInfo
5666e5c31af7Sopenharmony_ci  *** slink:VkPipelineColorBlendStateCreateInfo
5667e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
5668e5c31af7Sopenharmony_ci  * Rendering pipeline with task and mesh shaders
5669e5c31af7Sopenharmony_ci  ** Active Pipeline Shader Stages
5670e5c31af7Sopenharmony_ci  *** Task Shader
5671e5c31af7Sopenharmony_ci  *** Mesh Shader
5672e5c31af7Sopenharmony_ci  *** Fragment Shader
5673e5c31af7Sopenharmony_ci  ** Required: Fixed-Function Pipeline Stages
5674e5c31af7Sopenharmony_ci  *** slink:VkPipelineViewportStateCreateInfo
5675e5c31af7Sopenharmony_ci  *** slink:VkPipelineRasterizationStateCreateInfo
5676e5c31af7Sopenharmony_ci  *** slink:VkPipelineMultisampleStateCreateInfo
5677e5c31af7Sopenharmony_ci  *** slink:VkPipelineDepthStencilStateCreateInfo
5678e5c31af7Sopenharmony_ci  *** slink:VkPipelineColorBlendStateCreateInfo
5679e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
5680e5c31af7Sopenharmony_ci
5681e5c31af7Sopenharmony_ci
5682e5c31af7Sopenharmony_ciifdef::VK_NV_device_generated_commands[]
5683e5c31af7Sopenharmony_ci[[graphics-shadergroups]]
5684e5c31af7Sopenharmony_ci=== Graphics Pipeline Shader Groups
5685e5c31af7Sopenharmony_ci
5686e5c31af7Sopenharmony_ciGraphics pipelines can contain multiple shader groups that can be bound
5687e5c31af7Sopenharmony_ciindividually.
5688e5c31af7Sopenharmony_ciEach shader group behaves as if it was a pipeline using the shader group's
5689e5c31af7Sopenharmony_cistate.
5690e5c31af7Sopenharmony_ciWhen the pipeline is bound by regular means, it behaves as if the state of
5691e5c31af7Sopenharmony_cigroup `0` is active, use flink:vkCmdBindPipelineShaderGroupNV to bind an
5692e5c31af7Sopenharmony_ciindividual shader group.
5693e5c31af7Sopenharmony_ci
5694e5c31af7Sopenharmony_ciThe primary purpose of shader groups is allowing the device to bind
5695e5c31af7Sopenharmony_cidifferent pipeline state using <<device-generated-commands>>.
5696e5c31af7Sopenharmony_ci
5697e5c31af7Sopenharmony_ci[open,refpage='VkGraphicsPipelineShaderGroupsCreateInfoNV',desc='Structure specifying parameters of a newly created multi shader group pipeline',type='structs']
5698e5c31af7Sopenharmony_ci--
5699e5c31af7Sopenharmony_ciThe sname:VkGraphicsPipelineShaderGroupsCreateInfoNV structure is defined
5700e5c31af7Sopenharmony_cias:
5701e5c31af7Sopenharmony_ci
5702e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkGraphicsPipelineShaderGroupsCreateInfoNV.adoc[]
5703e5c31af7Sopenharmony_ci
5704e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
5705e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
5706e5c31af7Sopenharmony_ci    structure.
5707e5c31af7Sopenharmony_ci  * pname:groupCount is the number of elements in the pname:pGroups array.
5708e5c31af7Sopenharmony_ci  * pname:pGroups is a pointer to an array of
5709e5c31af7Sopenharmony_ci    slink:VkGraphicsShaderGroupCreateInfoNV structures specifying which
5710e5c31af7Sopenharmony_ci    state of the original slink:VkGraphicsPipelineCreateInfo each shader
5711e5c31af7Sopenharmony_ci    group overrides.
5712e5c31af7Sopenharmony_ci  * pname:pipelineCount is the number of elements in the pname:pPipelines
5713e5c31af7Sopenharmony_ci    array.
5714e5c31af7Sopenharmony_ci  * pname:pPipelines is a pointer to an array of graphics sname:VkPipeline
5715e5c31af7Sopenharmony_ci    structures which are referenced within the created pipeline, including
5716e5c31af7Sopenharmony_ci    all their shader groups.
5717e5c31af7Sopenharmony_ci
5718e5c31af7Sopenharmony_ciWhen referencing shader groups by index, groups defined in the referenced
5719e5c31af7Sopenharmony_cipipelines are treated as if they were defined as additional entries in
5720e5c31af7Sopenharmony_cipname:pGroups.
5721e5c31af7Sopenharmony_ciThey are appended in the order they appear in the pname:pPipelines array and
5722e5c31af7Sopenharmony_ciin the pname:pGroups array when those pipelines were defined.
5723e5c31af7Sopenharmony_ci
5724e5c31af7Sopenharmony_ciThe application must: maintain the lifetime of all such referenced pipelines
5725e5c31af7Sopenharmony_cibased on the pipelines that make use of them.
5726e5c31af7Sopenharmony_ci
5727e5c31af7Sopenharmony_ci.Valid Usage
5728e5c31af7Sopenharmony_ci****
5729e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02879]]
5730e5c31af7Sopenharmony_ci    pname:groupCount must: be at least `1` and as maximum
5731e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxGraphicsShaderGroupCount
5732e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02880]]
5733e5c31af7Sopenharmony_ci    The sum of pname:groupCount including those groups added from referenced
5734e5c31af7Sopenharmony_ci    pname:pPipelines must: also be as maximum
5735e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxGraphicsShaderGroupCount
5736e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02881]]
5737e5c31af7Sopenharmony_ci    The state of the first element of pname:pGroups must: match its
5738e5c31af7Sopenharmony_ci    equivalent within the parent's slink:VkGraphicsPipelineCreateInfo
5739e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02882]]
5740e5c31af7Sopenharmony_ci    Each element of pname:pGroups must: in combination with the rest of the
5741e5c31af7Sopenharmony_ci    pipeline state yield a valid state configuration
5742e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02884]]
5743e5c31af7Sopenharmony_ci    All elements of pname:pGroups must: use the same shader stage
5744e5c31af7Sopenharmony_ci    combinations
5745e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
5746e5c31af7Sopenharmony_ci    unless any mesh shader stage is used, then either combination of task
5747e5c31af7Sopenharmony_ci    and mesh or just mesh shader is valid
5748e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
5749e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
5750e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02885]]
5751e5c31af7Sopenharmony_ci    Mesh and regular primitive shading stages cannot be mixed across
5752e5c31af7Sopenharmony_ci    pname:pGroups
5753e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
5754e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-02886]]
5755e5c31af7Sopenharmony_ci    Each element of pname:pPipelines must: have been created with identical
5756e5c31af7Sopenharmony_ci    state to the pipeline currently created except the state that can be
5757e5c31af7Sopenharmony_ci    overridden by slink:VkGraphicsShaderGroupCreateInfoNV
5758e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-deviceGeneratedCommands-02887]]
5759e5c31af7Sopenharmony_ci    The <<features-deviceGeneratedCommands, pname:deviceGeneratedCommands>>
5760e5c31af7Sopenharmony_ci    feature must: be enabled
5761e5c31af7Sopenharmony_ci****
5762e5c31af7Sopenharmony_ci
5763e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkGraphicsPipelineShaderGroupsCreateInfoNV.adoc[]
5764e5c31af7Sopenharmony_ci--
5765e5c31af7Sopenharmony_ci
5766e5c31af7Sopenharmony_ci[open,refpage='VkGraphicsShaderGroupCreateInfoNV',desc='Structure specifying override parameters for each shader group',type='structs']
5767e5c31af7Sopenharmony_ci--
5768e5c31af7Sopenharmony_ciThe sname:VkGraphicsShaderGroupCreateInfoNV structure provides the state
5769e5c31af7Sopenharmony_cioverrides for each shader group.
5770e5c31af7Sopenharmony_ciEach shader group behaves like a pipeline that was created from its state as
5771e5c31af7Sopenharmony_ciwell as the remaining parent's state.
5772e5c31af7Sopenharmony_ciIt is defined as:
5773e5c31af7Sopenharmony_ci
5774e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkGraphicsShaderGroupCreateInfoNV.adoc[]
5775e5c31af7Sopenharmony_ci
5776e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
5777e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
5778e5c31af7Sopenharmony_ci    structure.
5779e5c31af7Sopenharmony_ci  * pname:stageCount is the number of entries in the pname:pStages array.
5780e5c31af7Sopenharmony_ci  * pname:pStages is a pointer to an array
5781e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageCreateInfo structures specifying the set of
5782e5c31af7Sopenharmony_ci    the shader stages to be included in this shader group.
5783e5c31af7Sopenharmony_ci  * pname:pVertexInputState is a pointer to a
5784e5c31af7Sopenharmony_ci    slink:VkPipelineVertexInputStateCreateInfo structure.
5785e5c31af7Sopenharmony_ci  * pname:pTessellationState is a pointer to a
5786e5c31af7Sopenharmony_ci    slink:VkPipelineTessellationStateCreateInfo structure, and is ignored if
5787e5c31af7Sopenharmony_ci    the shader group does not include a tessellation control shader stage
5788e5c31af7Sopenharmony_ci    and tessellation evaluation shader stage.
5789e5c31af7Sopenharmony_ci
5790e5c31af7Sopenharmony_ci.Valid Usage
5791e5c31af7Sopenharmony_ci****
5792e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-02888]]
5793e5c31af7Sopenharmony_ci    For pname:stageCount, the same restrictions as in
5794e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineCreateInfo::pname:stageCount apply
5795e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-02889]]
5796e5c31af7Sopenharmony_ci    For pname:pStages, the same restrictions as in
5797e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineCreateInfo::pname:pStages apply
5798e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pVertexInputState-02890]]
5799e5c31af7Sopenharmony_ci    For pname:pVertexInputState, the same restrictions as in
5800e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState apply
5801e5c31af7Sopenharmony_ci  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pTessellationState-02891]]
5802e5c31af7Sopenharmony_ci    For pname:pTessellationState, the same restrictions as in
5803e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineCreateInfo::pname:pTessellationState apply
5804e5c31af7Sopenharmony_ci****
5805e5c31af7Sopenharmony_ci
5806e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkGraphicsShaderGroupCreateInfoNV.adoc[]
5807e5c31af7Sopenharmony_ci--
5808e5c31af7Sopenharmony_ciendif::VK_NV_device_generated_commands[]
5809e5c31af7Sopenharmony_ci
5810e5c31af7Sopenharmony_ci
5811e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
5812e5c31af7Sopenharmony_ci[[pipelines-ray-tracing]]
5813e5c31af7Sopenharmony_ci== Ray Tracing Pipelines
5814e5c31af7Sopenharmony_ci
5815e5c31af7Sopenharmony_ciRay tracing pipelines consist of multiple shader stages, fixed-function
5816e5c31af7Sopenharmony_citraversal stages, and a pipeline layout.
5817e5c31af7Sopenharmony_ci
5818e5c31af7Sopenharmony_ci[open,refpage='VK_SHADER_UNUSED_KHR',desc='Sentinel for an unused shader index',type='consts',alias='VK_SHADER_UNUSED_NV']
5819e5c31af7Sopenharmony_ci--
5820e5c31af7Sopenharmony_ciename:VK_SHADER_UNUSED_KHR is a special shader index used to indicate that a
5821e5c31af7Sopenharmony_ciray generation, miss, or callable shader member is not used.
5822e5c31af7Sopenharmony_ci
5823e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_SHADER_UNUSED_KHR.adoc[]
5824e5c31af7Sopenharmony_ci
5825e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
5826e5c31af7Sopenharmony_cior the equivalent
5827e5c31af7Sopenharmony_ci
5828e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VK_SHADER_UNUSED_NV.adoc[]
5829e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
5830e5c31af7Sopenharmony_ci--
5831e5c31af7Sopenharmony_ci
5832e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
5833e5c31af7Sopenharmony_ci[open,refpage='vkCreateRayTracingPipelinesNV',desc='Creates a new ray tracing pipeline object',type='protos']
5834e5c31af7Sopenharmony_ci--
5835e5c31af7Sopenharmony_ci:refpage: vkCreateRayTracingPipelinesNV
5836e5c31af7Sopenharmony_ci
5837e5c31af7Sopenharmony_ciTo create ray tracing pipelines, call:
5838e5c31af7Sopenharmony_ci
5839e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCreateRayTracingPipelinesNV.adoc[]
5840e5c31af7Sopenharmony_ci
5841e5c31af7Sopenharmony_ci  * pname:device is the logical device that creates the ray tracing
5842e5c31af7Sopenharmony_ci    pipelines.
5843e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
5844e5c31af7Sopenharmony_ci  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
5845e5c31af7Sopenharmony_ci    pipeline caching is disabled, or the handle of a valid
5846e5c31af7Sopenharmony_ci    <<pipelines-cache,pipeline cache>> object, in which case use of that
5847e5c31af7Sopenharmony_ci    cache is enabled for the duration of the command.
5848e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5849e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
5850e5c31af7Sopenharmony_ci  * pname:pipelineCache is the handle of a valid <<pipelines-cache,pipeline
5851e5c31af7Sopenharmony_ci    cache>> object.
5852e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5853e5c31af7Sopenharmony_ci  * pname:createInfoCount is the length of the pname:pCreateInfos and
5854e5c31af7Sopenharmony_ci    pname:pPipelines arrays.
5855e5c31af7Sopenharmony_ci  * pname:pCreateInfos is a pointer to an array of
5856e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoNV structures.
5857e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
5858e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
5859e5c31af7Sopenharmony_ci  * pname:pPipelines is a pointer to an array in which the resulting ray
5860e5c31af7Sopenharmony_ci    tracing pipeline objects are returned.
5861e5c31af7Sopenharmony_ci
5862e5c31af7Sopenharmony_ciPipelines are created and returned as described for <<pipelines-multiple,
5863e5c31af7Sopenharmony_ciMultiple Pipeline Creation>>.
5864e5c31af7Sopenharmony_ci
5865e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
5866e5c31af7Sopenharmony_ciIf a pipeline creation fails due to:
5867e5c31af7Sopenharmony_ci
5868e5c31af7Sopenharmony_ci  * The identified pipeline not being present in pname:pipelineCache
5869e5c31af7Sopenharmony_ci  * The pname:pNext chain not including a slink:VkPipelineOfflineCreateInfo
5870e5c31af7Sopenharmony_ci    structure
5871e5c31af7Sopenharmony_ci
5872e5c31af7Sopenharmony_cithe operation will continue as specified in <<pipelines-multiple, Multiple
5873e5c31af7Sopenharmony_ciPipeline Creation>> and the command will return
5874e5c31af7Sopenharmony_ciename:VK_ERROR_NO_PIPELINE_MATCH.
5875e5c31af7Sopenharmony_ciifdef::hidden[]
5876e5c31af7Sopenharmony_ci// tag::scdeviation[]
5877e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
5878e5c31af7Sopenharmony_ci  * flink:vkCreateRayTracingPipelinesNV returns
5879e5c31af7Sopenharmony_ci    ename:VK_ERROR_NO_PIPELINE_MATCH if the
5880e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoNV::pname:pNext chain does not
5881e5c31af7Sopenharmony_ci    include a valid slink:VkPipelineOfflineCreateInfo structure <<SCID-1>>.
5882e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
5883e5c31af7Sopenharmony_ci// end::scdeviation[]
5884e5c31af7Sopenharmony_ciendif::hidden[]
5885e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5886e5c31af7Sopenharmony_ci
5887e5c31af7Sopenharmony_ci.Valid Usage
5888e5c31af7Sopenharmony_ci****
5889e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/create_ray_tracing_pipelines_common.adoc[]
5890e5c31af7Sopenharmony_ci****
5891e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
5892e5c31af7Sopenharmony_ciifdef::hidden[]
5893e5c31af7Sopenharmony_ci// tag::scdeviation[]
5894e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
5895e5c31af7Sopenharmony_ci  * flink:vkCreateRayTracingPipelinesNV::pname:pipelineCache must: not be
5896e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE <<SCID-1>>, <<SCID-8>>.
5897e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
5898e5c31af7Sopenharmony_ci// end::scdeviation[]
5899e5c31af7Sopenharmony_ciendif::hidden[]
5900e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5901e5c31af7Sopenharmony_ci
5902e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCreateRayTracingPipelinesNV.adoc[]
5903e5c31af7Sopenharmony_ci--
5904e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
5905e5c31af7Sopenharmony_ci
5906e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
5907e5c31af7Sopenharmony_ci[open,refpage='vkCreateRayTracingPipelinesKHR',desc='Creates a new ray tracing pipeline object',type='protos']
5908e5c31af7Sopenharmony_ci--
5909e5c31af7Sopenharmony_ci:refpage: vkCreateRayTracingPipelinesKHR
5910e5c31af7Sopenharmony_ci
5911e5c31af7Sopenharmony_ciTo create ray tracing pipelines, call:
5912e5c31af7Sopenharmony_ci
5913e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCreateRayTracingPipelinesKHR.adoc[]
5914e5c31af7Sopenharmony_ci
5915e5c31af7Sopenharmony_ci  * pname:device is the logical device that creates the ray tracing
5916e5c31af7Sopenharmony_ci    pipelines.
5917e5c31af7Sopenharmony_ci  * pname:deferredOperation is dlink:VK_NULL_HANDLE or the handle of a valid
5918e5c31af7Sopenharmony_ci    slink:VkDeferredOperationKHR <<deferred-host-operations-requesting,
5919e5c31af7Sopenharmony_ci    request deferral>> object for this command.
5920e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
5921e5c31af7Sopenharmony_ci  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
5922e5c31af7Sopenharmony_ci    pipeline caching is disabled, or the handle of a valid
5923e5c31af7Sopenharmony_ci    <<pipelines-cache,pipeline cache>> object, in which case use of that
5924e5c31af7Sopenharmony_ci    cache is enabled for the duration of the command.
5925e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5926e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
5927e5c31af7Sopenharmony_ci  * pname:pipelineCache is the handle of a valid <<pipelines-cache,pipeline
5928e5c31af7Sopenharmony_ci    cache>> object.
5929e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5930e5c31af7Sopenharmony_ci  * pname:createInfoCount is the length of the pname:pCreateInfos and
5931e5c31af7Sopenharmony_ci    pname:pPipelines arrays.
5932e5c31af7Sopenharmony_ci  * pname:pCreateInfos is a pointer to an array of
5933e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoKHR structures.
5934e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
5935e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
5936e5c31af7Sopenharmony_ci  * pname:pPipelines is a pointer to an array in which the resulting ray
5937e5c31af7Sopenharmony_ci    tracing pipeline objects are returned.
5938e5c31af7Sopenharmony_ci
5939e5c31af7Sopenharmony_ciThe ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS error is returned if the
5940e5c31af7Sopenharmony_ciimplementation is unable to reuse the shader group handles provided in
5941e5c31af7Sopenharmony_cislink:VkRayTracingShaderGroupCreateInfoKHR::pname:pShaderGroupCaptureReplayHandle
5942e5c31af7Sopenharmony_ciwhen
5943e5c31af7Sopenharmony_cislink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
5944e5c31af7Sopenharmony_ciis enabled.
5945e5c31af7Sopenharmony_ci
5946e5c31af7Sopenharmony_ciPipelines are created and returned as described for <<pipelines-multiple,
5947e5c31af7Sopenharmony_ciMultiple Pipeline Creation>>.
5948e5c31af7Sopenharmony_ci
5949e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
5950e5c31af7Sopenharmony_ciIf a pipeline creation fails due to:
5951e5c31af7Sopenharmony_ci
5952e5c31af7Sopenharmony_ci  * The identified pipeline not being present in pname:pipelineCache
5953e5c31af7Sopenharmony_ci  * The pname:pNext chain not including a slink:VkPipelineOfflineCreateInfo
5954e5c31af7Sopenharmony_ci    structure
5955e5c31af7Sopenharmony_ci
5956e5c31af7Sopenharmony_cithe operation will continue as specified in <<pipelines-multiple, Multiple
5957e5c31af7Sopenharmony_ciPipeline Creation>> and the command will return
5958e5c31af7Sopenharmony_ciename:VK_ERROR_NO_PIPELINE_MATCH.
5959e5c31af7Sopenharmony_ciifdef::hidden[]
5960e5c31af7Sopenharmony_ci// tag::scdeviation[]
5961e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
5962e5c31af7Sopenharmony_ci  * flink:vkCreateRayTracingPipelinesKHR returns
5963e5c31af7Sopenharmony_ci    ename:VK_ERROR_NO_PIPELINE_MATCH if the
5964e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoKHR::pname:pNext chain does not
5965e5c31af7Sopenharmony_ci    include a valid slink:VkPipelineOfflineCreateInfo structure <<SCID-1>>.
5966e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
5967e5c31af7Sopenharmony_ci// end::scdeviation[]
5968e5c31af7Sopenharmony_ciendif::hidden[]
5969e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5970e5c31af7Sopenharmony_ci
5971e5c31af7Sopenharmony_ci.Valid Usage
5972e5c31af7Sopenharmony_ci****
5973e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/create_ray_tracing_pipelines_common.adoc[]
5974e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/deferred_operations_common.adoc[]
5975e5c31af7Sopenharmony_ci  * [[VUID-vkCreateRayTracingPipelinesKHR-rayTracingPipeline-03586]]
5976e5c31af7Sopenharmony_ci    The <<features-rayTracingPipeline, pname:rayTracingPipeline>> feature
5977e5c31af7Sopenharmony_ci    must: be enabled
5978e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
5979e5c31af7Sopenharmony_ciifdef::VK_KHR_deferred_host_operations[]
5980e5c31af7Sopenharmony_ci  * [[VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-03587]]
5981e5c31af7Sopenharmony_ci    If pname:deferredOperation is not dlink:VK_NULL_HANDLE, the pname:flags
5982e5c31af7Sopenharmony_ci    member of elements of pname:pCreateInfos must: not include
5983e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
5984e5c31af7Sopenharmony_ciendif::VK_KHR_deferred_host_operations[]
5985e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
5986e5c31af7Sopenharmony_ci****
5987e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
5988e5c31af7Sopenharmony_ciifdef::hidden[]
5989e5c31af7Sopenharmony_ci// tag::scdeviation[]
5990e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
5991e5c31af7Sopenharmony_ci  * flink:vkCreateRayTracingPipelinesKHR::pname:pipelineCache must: not be
5992e5c31af7Sopenharmony_ci    dlink:VK_NULL_HANDLE <<SCID-1>>, <<SCID-8>>.
5993e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
5994e5c31af7Sopenharmony_ci// end::scdeviation[]
5995e5c31af7Sopenharmony_ciendif::hidden[]
5996e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
5997e5c31af7Sopenharmony_ci
5998e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCreateRayTracingPipelinesKHR.adoc[]
5999e5c31af7Sopenharmony_ci--
6000e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6001e5c31af7Sopenharmony_ci
6002e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
6003e5c31af7Sopenharmony_ci[open,refpage='VkRayTracingPipelineCreateInfoNV',desc='Structure specifying parameters of a newly created ray tracing pipeline',type='structs']
6004e5c31af7Sopenharmony_ci--
6005e5c31af7Sopenharmony_ci:refpage: VkRayTracingPipelineCreateInfoNV
6006e5c31af7Sopenharmony_ci
6007e5c31af7Sopenharmony_ciThe sname:VkRayTracingPipelineCreateInfoNV structure is defined as:
6008e5c31af7Sopenharmony_ci
6009e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkRayTracingPipelineCreateInfoNV.adoc[]
6010e5c31af7Sopenharmony_ci
6011e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
6012e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
6013e5c31af7Sopenharmony_ci    structure.
6014e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
6015e5c31af7Sopenharmony_ci    how the pipeline will be generated.
6016e5c31af7Sopenharmony_ci  * pname:stageCount is the number of entries in the pname:pStages array.
6017e5c31af7Sopenharmony_ci  * pname:pStages is a pointer to an array of
6018e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageCreateInfo structures specifying the set of
6019e5c31af7Sopenharmony_ci    the shader stages to be included in the ray tracing pipeline.
6020e5c31af7Sopenharmony_ci  * pname:groupCount is the number of entries in the pname:pGroups array.
6021e5c31af7Sopenharmony_ci  * pname:pGroups is a pointer to an array of
6022e5c31af7Sopenharmony_ci    slink:VkRayTracingShaderGroupCreateInfoNV structures describing the set
6023e5c31af7Sopenharmony_ci    of the shader stages to be included in each shader group in the ray
6024e5c31af7Sopenharmony_ci    tracing pipeline.
6025e5c31af7Sopenharmony_ci  * pname:maxRecursionDepth is the <<ray-tracing-recursion-depth, maximum
6026e5c31af7Sopenharmony_ci    recursion depth>> of shaders executed by this pipeline.
6027e5c31af7Sopenharmony_ci  * pname:layout is the description of binding locations used by both the
6028e5c31af7Sopenharmony_ci    pipeline and descriptor sets used with the pipeline.
6029e5c31af7Sopenharmony_ci  * pname:basePipelineHandle is a pipeline to derive from.
6030e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
6031e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
6032e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
6033e5c31af7Sopenharmony_ci  * pname:basePipelineIndex is an index into the pname:pCreateInfos
6034e5c31af7Sopenharmony_ci    parameter to use as a pipeline to derive from.
6035e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
6036e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
6037e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
6038e5c31af7Sopenharmony_ci
6039e5c31af7Sopenharmony_ciThe parameters pname:basePipelineHandle and pname:basePipelineIndex are
6040e5c31af7Sopenharmony_cidescribed in more detail in <<pipelines-pipeline-derivatives,Pipeline
6041e5c31af7Sopenharmony_ciDerivatives>>.
6042e5c31af7Sopenharmony_ci
6043e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
6044e5c31af7Sopenharmony_ciIf a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
6045e5c31af7Sopenharmony_cipname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
6046e5c31af7Sopenharmony_cifrom that structure is used instead of pname:flags from this structure.
6047e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
6048e5c31af7Sopenharmony_ci
6049e5c31af7Sopenharmony_ci.Valid Usage
6050e5c31af7Sopenharmony_ci****
6051e5c31af7Sopenharmony_ci:pipelineType: ray tracing
6052e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
6053e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/ray_tracing_pipeline_create_info_common.adoc[]
6054e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-stage-06232]]
6055e5c31af7Sopenharmony_ci    The pname:stage member of at least one element of pname:pStages must: be
6056e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR
6057e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
6058e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03456]]
6059e5c31af7Sopenharmony_ci    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
6060e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
6061e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-maxRecursionDepth-03457]]
6062e5c31af7Sopenharmony_ci    pname:maxRecursionDepth must: be less than or equal to
6063e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth
6064e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6065e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03458]]
6066e5c31af7Sopenharmony_ci    pname:flags must: not include
6067e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
6068e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03459]]
6069e5c31af7Sopenharmony_ci    pname:flags must: not include
6070e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
6071e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03460]]
6072e5c31af7Sopenharmony_ci    pname:flags must: not include
6073e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
6074e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03461]]
6075e5c31af7Sopenharmony_ci    pname:flags must: not include
6076e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
6077e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03462]]
6078e5c31af7Sopenharmony_ci    pname:flags must: not include
6079e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
6080e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03463]]
6081e5c31af7Sopenharmony_ci    pname:flags must: not include
6082e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
6083e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03588]]
6084e5c31af7Sopenharmony_ci    pname:flags must: not include
6085e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
6086e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6087e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing_motion_blur[]
6088e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-04948]]
6089e5c31af7Sopenharmony_ci    pname:flags must: not include
6090e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
6091e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing_motion_blur[]
6092e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
6093e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-02957]]
6094e5c31af7Sopenharmony_ci    pname:flags must: not include both
6095e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV and
6096e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT at the
6097e5c31af7Sopenharmony_ci    same time
6098e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
6099e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
6100e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-pipelineStageCreationFeedbackCount-06651]]
6101e5c31af7Sopenharmony_ci    If
6102e5c31af7Sopenharmony_ci    slink:VkPipelineCreationFeedbackCreateInfo::pname:pipelineStageCreationFeedbackCount
6103e5c31af7Sopenharmony_ci    is not `0`, it must: be equal to pname:stageCount
6104e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
6105e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-stage-06898]]
6106e5c31af7Sopenharmony_ci    The pname:stage value in all pname:pStages elements must: be one of
6107e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
6108e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR,
6109e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,
6110e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_MISS_BIT_KHR,
6111e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or
6112e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
6113e5c31af7Sopenharmony_ciifdef::VK_EXT_opacity_micromap[]
6114e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-07402]]
6115e5c31af7Sopenharmony_ci    pname:flags must: not include
6116e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
6117e5c31af7Sopenharmony_ciendif::VK_EXT_opacity_micromap[]
6118e5c31af7Sopenharmony_ciifdef::VK_NV_displacement_micromap[]
6119e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-07998]]
6120e5c31af7Sopenharmony_ci    pname:flags must: not include
6121e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
6122e5c31af7Sopenharmony_ciendif::VK_NV_displacement_micromap[]
6123e5c31af7Sopenharmony_ci****
6124e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
6125e5c31af7Sopenharmony_ciifdef::hidden[]
6126e5c31af7Sopenharmony_ci// tag::scdeviation[]
6127e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
6128e5c31af7Sopenharmony_ci  * slink:VkRayTracingPipelineCreateInfoNV::pname:basePipelineHandle must:
6129e5c31af7Sopenharmony_ci    be dlink:VK_NULL_HANDLE <<SCID-8>>.
6130e5c31af7Sopenharmony_ci  * slink:VkRayTracingPipelineCreateInfoNV::pname:basePipelineIndex must: be
6131e5c31af7Sopenharmony_ci    zero <<SCID-8>>.
6132e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
6133e5c31af7Sopenharmony_ci// end::scdeviation[]
6134e5c31af7Sopenharmony_ciendif::hidden[]
6135e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
6136e5c31af7Sopenharmony_ci
6137e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkRayTracingPipelineCreateInfoNV.adoc[]
6138e5c31af7Sopenharmony_ci--
6139e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
6140e5c31af7Sopenharmony_ci
6141e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6142e5c31af7Sopenharmony_ci[open,refpage='VkRayTracingPipelineCreateInfoKHR',desc='Structure specifying parameters of a newly created ray tracing pipeline',type='structs']
6143e5c31af7Sopenharmony_ci--
6144e5c31af7Sopenharmony_ci:refpage: VkRayTracingPipelineCreateInfoKHR
6145e5c31af7Sopenharmony_ci
6146e5c31af7Sopenharmony_ciThe sname:VkRayTracingPipelineCreateInfoKHR structure is defined as:
6147e5c31af7Sopenharmony_ci
6148e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkRayTracingPipelineCreateInfoKHR.adoc[]
6149e5c31af7Sopenharmony_ci
6150e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
6151e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
6152e5c31af7Sopenharmony_ci    structure.
6153e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
6154e5c31af7Sopenharmony_ci    how the pipeline will be generated.
6155e5c31af7Sopenharmony_ci  * pname:stageCount is the number of entries in the pname:pStages array.
6156e5c31af7Sopenharmony_ci  * pname:pStages is a pointer to an array of pname:stageCount
6157e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageCreateInfo structures describing the set of
6158e5c31af7Sopenharmony_ci    the shader stages to be included in the ray tracing pipeline.
6159e5c31af7Sopenharmony_ci  * pname:groupCount is the number of entries in the pname:pGroups array.
6160e5c31af7Sopenharmony_ci  * pname:pGroups is a pointer to an array of pname:groupCount
6161e5c31af7Sopenharmony_ci    slink:VkRayTracingShaderGroupCreateInfoKHR structures describing the set
6162e5c31af7Sopenharmony_ci    of the shader stages to be included in each shader group in the ray
6163e5c31af7Sopenharmony_ci    tracing pipeline.
6164e5c31af7Sopenharmony_ci  * pname:maxPipelineRayRecursionDepth is the <<ray-tracing-recursion-depth,
6165e5c31af7Sopenharmony_ci    maximum recursion depth>> of shaders executed by this pipeline.
6166e5c31af7Sopenharmony_ci  * pname:pLibraryInfo is a pointer to a
6167e5c31af7Sopenharmony_ci    slink:VkPipelineLibraryCreateInfoKHR structure defining pipeline
6168e5c31af7Sopenharmony_ci    libraries to include.
6169e5c31af7Sopenharmony_ci  * pname:pLibraryInterface is a pointer to a
6170e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineInterfaceCreateInfoKHR structure defining
6171e5c31af7Sopenharmony_ci    additional information when using pipeline libraries.
6172e5c31af7Sopenharmony_ci  * pname:pDynamicState is a pointer to a
6173e5c31af7Sopenharmony_ci    slink:VkPipelineDynamicStateCreateInfo structure, and is used to
6174e5c31af7Sopenharmony_ci    indicate which properties of the pipeline state object are dynamic and
6175e5c31af7Sopenharmony_ci    can: be changed independently of the pipeline state.
6176e5c31af7Sopenharmony_ci    This can: be `NULL`, which means no state in the pipeline is considered
6177e5c31af7Sopenharmony_ci    dynamic.
6178e5c31af7Sopenharmony_ci  * pname:layout is the description of binding locations used by both the
6179e5c31af7Sopenharmony_ci    pipeline and descriptor sets used with the pipeline.
6180e5c31af7Sopenharmony_ci  * pname:basePipelineHandle is a pipeline to derive from.
6181e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
6182e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
6183e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
6184e5c31af7Sopenharmony_ci  * pname:basePipelineIndex is an index into the pname:pCreateInfos
6185e5c31af7Sopenharmony_ci    parameter to use as a pipeline to derive from.
6186e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
6187e5c31af7Sopenharmony_ci    This is not used in Vulkan SC <<SCID-8>>.
6188e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
6189e5c31af7Sopenharmony_ci
6190e5c31af7Sopenharmony_ciThe parameters pname:basePipelineHandle and pname:basePipelineIndex are
6191e5c31af7Sopenharmony_cidescribed in more detail in <<pipelines-pipeline-derivatives,Pipeline
6192e5c31af7Sopenharmony_ciDerivatives>>.
6193e5c31af7Sopenharmony_ci
6194e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
6195e5c31af7Sopenharmony_ciWhen ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR is specified, this pipeline
6196e5c31af7Sopenharmony_cidefines a _pipeline library_ which cannot: be bound as a ray tracing
6197e5c31af7Sopenharmony_cipipeline directly.
6198e5c31af7Sopenharmony_ciInstead, pipeline libraries define common shaders and shader groups which
6199e5c31af7Sopenharmony_cican: be included in future pipeline creation.
6200e5c31af7Sopenharmony_ci
6201e5c31af7Sopenharmony_ciIf pipeline libraries are included in pname:pLibraryInfo, shaders defined in
6202e5c31af7Sopenharmony_cithose libraries are treated as if they were defined as additional entries in
6203e5c31af7Sopenharmony_cipname:pStages, appended in the order they appear in the pname:pLibraries
6204e5c31af7Sopenharmony_ciarray and in the pname:pStages array when those libraries were defined.
6205e5c31af7Sopenharmony_ci
6206e5c31af7Sopenharmony_ciWhen referencing shader groups in order to obtain a shader group handle,
6207e5c31af7Sopenharmony_cigroups defined in those libraries are treated as if they were defined as
6208e5c31af7Sopenharmony_ciadditional entries in pname:pGroups, appended in the order they appear in
6209e5c31af7Sopenharmony_cithe pname:pLibraries array and in the pname:pGroups array when those
6210e5c31af7Sopenharmony_cilibraries were defined.
6211e5c31af7Sopenharmony_ciThe shaders these groups reference are set when the pipeline library is
6212e5c31af7Sopenharmony_cicreated, referencing those specified in the pipeline library, not in the
6213e5c31af7Sopenharmony_cipipeline that includes it.
6214e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
6215e5c31af7Sopenharmony_ci
6216e5c31af7Sopenharmony_ciThe default stack size for a pipeline if
6217e5c31af7Sopenharmony_ciename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR is not provided
6218e5c31af7Sopenharmony_ciis computed as described in <<ray-tracing-pipeline-stack, Ray Tracing
6219e5c31af7Sopenharmony_ciPipeline Stack>>.
6220e5c31af7Sopenharmony_ci
6221e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance5[]
6222e5c31af7Sopenharmony_ciIf a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
6223e5c31af7Sopenharmony_cipname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
6224e5c31af7Sopenharmony_cifrom that structure is used instead of pname:flags from this structure.
6225e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance5[]
6226e5c31af7Sopenharmony_ci
6227e5c31af7Sopenharmony_ci.Valid Usage
6228e5c31af7Sopenharmony_ci****
6229e5c31af7Sopenharmony_ci:pipelineType: ray tracing
6230e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
6231e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/ray_tracing_pipeline_create_info_common.adoc[]
6232e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-stage-03425]]
6233e5c31af7Sopenharmony_ci    If pname:flags does not include
6234e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the pname:stage member of at
6235e5c31af7Sopenharmony_ci    least one element of pname:pStages, including those implicitly added by
6236e5c31af7Sopenharmony_ci    pname:pLibraryInfo, must: be ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR
6237e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-maxPipelineRayRecursionDepth-03589]]
6238e5c31af7Sopenharmony_ci    pname:maxPipelineRayRecursionDepth must: be less than or equal to
6239e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth
6240e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
6241e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03465]]
6242e5c31af7Sopenharmony_ci    If pname:flags includes ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
6243e5c31af7Sopenharmony_ci    pname:pLibraryInterface must: not be `NULL`
6244e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03590]]
6245e5c31af7Sopenharmony_ci    If pname:pLibraryInfo is not `NULL` and its pname:libraryCount member is
6246e5c31af7Sopenharmony_ci    greater than `0`, pname:pLibraryInterface must: not be `NULL`
6247e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03591]]
6248e5c31af7Sopenharmony_ci    Each element of pname:pLibraryInfo->pLibraries must: have been created
6249e5c31af7Sopenharmony_ci    with the value of pname:maxPipelineRayRecursionDepth equal to that in
6250e5c31af7Sopenharmony_ci    this pipeline
6251e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03592]]
6252e5c31af7Sopenharmony_ci    If pname:pLibraryInfo is not `NULL`, each element of its
6253e5c31af7Sopenharmony_ci    pname:pLibraries member must: have been created with a pname:layout that
6254e5c31af7Sopenharmony_ci    is compatible with the pname:layout in this pipeline
6255e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03593]]
6256e5c31af7Sopenharmony_ci    If pname:pLibraryInfo is not `NULL`, each element of its
6257e5c31af7Sopenharmony_ci    pname:pLibraries member must: have been created with values of the
6258e5c31af7Sopenharmony_ci    pname:maxPipelineRayPayloadSize and pname:maxPipelineRayHitAttributeSize
6259e5c31af7Sopenharmony_ci    members of pname:pLibraryInterface equal to those in this pipeline
6260e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03594]]
6261e5c31af7Sopenharmony_ci    If pname:flags includes
6262e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR,
6263e5c31af7Sopenharmony_ci    each element of pname:pLibraryInfo->pLibraries must: have been created
6264e5c31af7Sopenharmony_ci    with the
6265e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
6266e5c31af7Sopenharmony_ci    bit set
6267e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04718]]
6268e5c31af7Sopenharmony_ci    If pname:flags includes
6269e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR, each element of
6270e5c31af7Sopenharmony_ci    pname:pLibraryInfo->pLibraries must: have been created with the
6271e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR bit set
6272e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04719]]
6273e5c31af7Sopenharmony_ci    If pname:flags includes
6274e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, each
6275e5c31af7Sopenharmony_ci    element of pname:pLibraryInfo->pLibraries must: have been created with
6276e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR bit set
6277e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04720]]
6278e5c31af7Sopenharmony_ci    If pname:flags includes
6279e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
6280e5c31af7Sopenharmony_ci    each element of pname:pLibraryInfo->pLibraries must: have been created
6281e5c31af7Sopenharmony_ci    with the
6282e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR bit
6283e5c31af7Sopenharmony_ci    set
6284e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04721]]
6285e5c31af7Sopenharmony_ci    If pname:flags includes
6286e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
6287e5c31af7Sopenharmony_ci    each element of pname:pLibraryInfo->pLibraries must: have been created
6288e5c31af7Sopenharmony_ci    with the
6289e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
6290e5c31af7Sopenharmony_ci    bit set
6291e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04722]]
6292e5c31af7Sopenharmony_ci    If pname:flags includes
6293e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
6294e5c31af7Sopenharmony_ci    each element of pname:pLibraryInfo->pLibraries must: have been created
6295e5c31af7Sopenharmony_ci    with the
6296e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
6297e5c31af7Sopenharmony_ci    bit set
6298e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04723]]
6299e5c31af7Sopenharmony_ci    If pname:flags includes
6300e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, each
6301e5c31af7Sopenharmony_ci    element of pname:pLibraryInfo->pLibraries must: have been created with
6302e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
6303e5c31af7Sopenharmony_ci    bit set
6304e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
6305e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03595]]
6306e5c31af7Sopenharmony_ci    If the `apiext:VK_KHR_pipeline_library` extension is not enabled,
6307e5c31af7Sopenharmony_ci    pname:pLibraryInfo and pname:pLibraryInterface must: be `NULL`
6308e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03470]]
6309e5c31af7Sopenharmony_ci    If pname:flags includes
6310e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
6311e5c31af7Sopenharmony_ci    for any element of pname:pGroups with a pname:type of
6312e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
6313e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, the
6314e5c31af7Sopenharmony_ci    pname:anyHitShader of that element must: not be
6315e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR
6316e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03471]]
6317e5c31af7Sopenharmony_ci    If pname:flags includes
6318e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
6319e5c31af7Sopenharmony_ci    for any element of pname:pGroups with a pname:type of
6320e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
6321e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, the
6322e5c31af7Sopenharmony_ci    pname:closestHitShader of that element must: not be
6323e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR
6324e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03596]]
6325e5c31af7Sopenharmony_ci    If the <<features-rayTraversalPrimitiveCulling,
6326e5c31af7Sopenharmony_ci    pname:rayTraversalPrimitiveCulling>> feature is not enabled, pname:flags
6327e5c31af7Sopenharmony_ci    must: not include
6328e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
6329e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03597]]
6330e5c31af7Sopenharmony_ci    If the <<features-rayTraversalPrimitiveCulling,
6331e5c31af7Sopenharmony_ci    pname:rayTraversalPrimitiveCulling>> feature is not enabled, pname:flags
6332e5c31af7Sopenharmony_ci    must: not include
6333e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
6334e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-06546]]
6335e5c31af7Sopenharmony_ci    pname:flags must: not include both
6336e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR and
6337e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
6338e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03598]]
6339e5c31af7Sopenharmony_ci    If pname:flags includes
6340e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR,
6341e5c31af7Sopenharmony_ci    <<features-rayTracingPipelineShaderGroupHandleCaptureReplay,
6342e5c31af7Sopenharmony_ci    pname:rayTracingPipelineShaderGroupHandleCaptureReplay>> must: be
6343e5c31af7Sopenharmony_ci    enabled
6344e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03599]]
6345e5c31af7Sopenharmony_ci    If
6346e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
6347e5c31af7Sopenharmony_ci    is ename:VK_TRUE and the pname:pShaderGroupCaptureReplayHandle member of
6348e5c31af7Sopenharmony_ci    any element of pname:pGroups is not `NULL`, pname:flags must: include
6349e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
6350e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-07999]]
6351e5c31af7Sopenharmony_ci    If pname:pLibraryInfo is `NULL` or its pname:libraryCount is `0`,
6352e5c31af7Sopenharmony_ci    pname:stageCount must: not be `0`
6353e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-08700]]
6354e5c31af7Sopenharmony_ci    If pname:flags does not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
6355e5c31af7Sopenharmony_ci    and either pname:pLibraryInfo is `NULL` or its pname:libraryCount is
6356e5c31af7Sopenharmony_ci    `0`, pname:groupCount must: not be `0`
6357e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pDynamicStates-03602]]
6358e5c31af7Sopenharmony_ci    Any element of the pname:pDynamicStates member of pname:pDynamicState
6359e5c31af7Sopenharmony_ci    must: be ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR
6360e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
6361e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pipelineStageCreationFeedbackCount-06652]]
6362e5c31af7Sopenharmony_ci    If
6363e5c31af7Sopenharmony_ci    slink:VkPipelineCreationFeedbackCreateInfo::pname:pipelineStageCreationFeedbackCount
6364e5c31af7Sopenharmony_ci    is not `0`, it must: be equal to pname:stageCount
6365e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
6366e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-stage-06899]]
6367e5c31af7Sopenharmony_ci    The pname:stage value in all pname:pStages elements must: be one of
6368e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
6369e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR,
6370e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,
6371e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_MISS_BIT_KHR,
6372e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or
6373e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
6374e5c31af7Sopenharmony_ciifdef::VK_EXT_opacity_micromap[]
6375e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-07403]]
6376e5c31af7Sopenharmony_ci    If pname:flags includes
6377e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT, each
6378e5c31af7Sopenharmony_ci    element of pname:pLibraryInfo->pLibraries must: have been created with
6379e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT bit
6380e5c31af7Sopenharmony_ci    set
6381e5c31af7Sopenharmony_ciendif::VK_EXT_opacity_micromap[]
6382e5c31af7Sopenharmony_ciifdef::VK_NV_displacement_micromap[]
6383e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-08701]]
6384e5c31af7Sopenharmony_ci    If pname:flags includes
6385e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV, each
6386e5c31af7Sopenharmony_ci    element of pname:pLibraryInfo->pLibraries must: have been created with
6387e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
6388e5c31af7Sopenharmony_ci    bit set
6389e5c31af7Sopenharmony_ciendif::VK_NV_displacement_micromap[]
6390e5c31af7Sopenharmony_ci****
6391e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
6392e5c31af7Sopenharmony_ciifdef::hidden[]
6393e5c31af7Sopenharmony_ci// tag::scdeviation[]
6394e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6395e5c31af7Sopenharmony_ci  * slink:VkRayTracingPipelineCreateInfoKHR::pname:flags must: not contain
6396e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag <<SCID-8>>.
6397e5c31af7Sopenharmony_ci  * slink:VkRayTracingPipelineCreateInfoKHR::pname:basePipelineHandle must:
6398e5c31af7Sopenharmony_ci    be dlink:VK_NULL_HANDLE <<SCID-8>>.
6399e5c31af7Sopenharmony_ci  * slink:VkRayTracingPipelineCreateInfoKHR::pname:basePipelineIndex must:
6400e5c31af7Sopenharmony_ci    be zero <<SCID-8>>.
6401e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6402e5c31af7Sopenharmony_ci// end::scdeviation[]
6403e5c31af7Sopenharmony_ciendif::hidden[]
6404e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
6405e5c31af7Sopenharmony_ci
6406e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkRayTracingPipelineCreateInfoKHR.adoc[]
6407e5c31af7Sopenharmony_ci--
6408e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6409e5c31af7Sopenharmony_ci
6410e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
6411e5c31af7Sopenharmony_ci[open,refpage='VkRayTracingShaderGroupCreateInfoNV',desc='Structure specifying shaders in a shader group',type='structs']
6412e5c31af7Sopenharmony_ci--
6413e5c31af7Sopenharmony_ci:refpage: VkRayTracingShaderGroupCreateInfoNV
6414e5c31af7Sopenharmony_ci
6415e5c31af7Sopenharmony_ciThe sname:VkRayTracingShaderGroupCreateInfoNV structure is defined as:
6416e5c31af7Sopenharmony_ci
6417e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkRayTracingShaderGroupCreateInfoNV.adoc[]
6418e5c31af7Sopenharmony_ci
6419e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
6420e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
6421e5c31af7Sopenharmony_ci    structure.
6422e5c31af7Sopenharmony_ci  * pname:type is the type of hit group specified in this structure.
6423e5c31af7Sopenharmony_ci  * pname:generalShader is the index of the ray generation, miss, or
6424e5c31af7Sopenharmony_ci    callable shader from
6425e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
6426e5c31af7Sopenharmony_ci    the shader group has pname:type of
6427e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV, and
6428e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_NV otherwise.
6429e5c31af7Sopenharmony_ci  * pname:closestHitShader is the optional index of the closest hit shader
6430e5c31af7Sopenharmony_ci    from slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group
6431e5c31af7Sopenharmony_ci    if the shader group has pname:type of
6432e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV or
6433e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
6434e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_NV otherwise.
6435e5c31af7Sopenharmony_ci  * pname:anyHitShader is the optional index of the any-hit shader from
6436e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
6437e5c31af7Sopenharmony_ci    the shader group has pname:type of
6438e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV or
6439e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
6440e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_NV otherwise.
6441e5c31af7Sopenharmony_ci  * pname:intersectionShader is the index of the intersection shader from
6442e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
6443e5c31af7Sopenharmony_ci    the shader group has pname:type of
6444e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
6445e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_NV otherwise.
6446e5c31af7Sopenharmony_ci
6447e5c31af7Sopenharmony_ci.Valid Usage
6448e5c31af7Sopenharmony_ci****
6449e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02413]]
6450e5c31af7Sopenharmony_ci    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV then
6451e5c31af7Sopenharmony_ci    pname:generalShader must: be a valid index into
6452e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages referring to a
6453e5c31af7Sopenharmony_ci    shader of ename:VK_SHADER_STAGE_RAYGEN_BIT_NV,
6454e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_MISS_BIT_NV, or
6455e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_CALLABLE_BIT_NV
6456e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02414]]
6457e5c31af7Sopenharmony_ci    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV then
6458e5c31af7Sopenharmony_ci    pname:closestHitShader, pname:anyHitShader, and pname:intersectionShader
6459e5c31af7Sopenharmony_ci    must: be ename:VK_SHADER_UNUSED_NV
6460e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02415]]
6461e5c31af7Sopenharmony_ci    If pname:type is
6462e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV then
6463e5c31af7Sopenharmony_ci    pname:intersectionShader must: be a valid index into
6464e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages referring to a
6465e5c31af7Sopenharmony_ci    shader of ename:VK_SHADER_STAGE_INTERSECTION_BIT_NV
6466e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02416]]
6467e5c31af7Sopenharmony_ci    If pname:type is
6468e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV then
6469e5c31af7Sopenharmony_ci    pname:intersectionShader must: be ename:VK_SHADER_UNUSED_NV
6470e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-closestHitShader-02417]]
6471e5c31af7Sopenharmony_ci    pname:closestHitShader must: be either ename:VK_SHADER_UNUSED_NV or a
6472e5c31af7Sopenharmony_ci    valid index into slink:VkRayTracingPipelineCreateInfoNV::pname:pStages
6473e5c31af7Sopenharmony_ci    referring to a shader of ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV
6474e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-anyHitShader-02418]]
6475e5c31af7Sopenharmony_ci    pname:anyHitShader must: be either ename:VK_SHADER_UNUSED_NV or a valid
6476e5c31af7Sopenharmony_ci    index into slink:VkRayTracingPipelineCreateInfoNV::pname:pStages
6477e5c31af7Sopenharmony_ci    referring to a shader of ename:VK_SHADER_STAGE_ANY_HIT_BIT_NV
6478e5c31af7Sopenharmony_ci****
6479e5c31af7Sopenharmony_ci
6480e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkRayTracingShaderGroupCreateInfoNV.adoc[]
6481e5c31af7Sopenharmony_ci--
6482e5c31af7Sopenharmony_ci
6483e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
6484e5c31af7Sopenharmony_ci
6485e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6486e5c31af7Sopenharmony_ci[open,refpage='VkRayTracingShaderGroupCreateInfoKHR',desc='Structure specifying shaders in a shader group',type='structs']
6487e5c31af7Sopenharmony_ci--
6488e5c31af7Sopenharmony_ci:refpage: VkRayTracingShaderGroupCreateInfoKHR
6489e5c31af7Sopenharmony_ci
6490e5c31af7Sopenharmony_ciThe sname:VkRayTracingShaderGroupCreateInfoKHR structure is defined as:
6491e5c31af7Sopenharmony_ci
6492e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkRayTracingShaderGroupCreateInfoKHR.adoc[]
6493e5c31af7Sopenharmony_ci
6494e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
6495e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
6496e5c31af7Sopenharmony_ci    structure.
6497e5c31af7Sopenharmony_ci  * pname:type is the type of hit group specified in this structure.
6498e5c31af7Sopenharmony_ci  * pname:generalShader is the index of the ray generation, miss, or
6499e5c31af7Sopenharmony_ci    callable shader from
6500e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
6501e5c31af7Sopenharmony_ci    the shader group has pname:type of
6502e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, and
6503e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR otherwise.
6504e5c31af7Sopenharmony_ci  * pname:closestHitShader is the optional index of the closest hit shader
6505e5c31af7Sopenharmony_ci    from slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group
6506e5c31af7Sopenharmony_ci    if the shader group has pname:type of
6507e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
6508e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
6509e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR otherwise.
6510e5c31af7Sopenharmony_ci  * pname:anyHitShader is the optional index of the any-hit shader from
6511e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
6512e5c31af7Sopenharmony_ci    the shader group has pname:type of
6513e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
6514e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
6515e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR otherwise.
6516e5c31af7Sopenharmony_ci  * pname:intersectionShader is the index of the intersection shader from
6517e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
6518e5c31af7Sopenharmony_ci    the shader group has pname:type of
6519e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
6520e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR otherwise.
6521e5c31af7Sopenharmony_ci  * pname:pShaderGroupCaptureReplayHandle is `NULL` or a pointer to replay
6522e5c31af7Sopenharmony_ci    information for this shader group queried from
6523e5c31af7Sopenharmony_ci    flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, as described in
6524e5c31af7Sopenharmony_ci    <<ray-tracing-capture-replay, Ray Tracing Capture Replay>>.
6525e5c31af7Sopenharmony_ci    Ignored if
6526e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
6527e5c31af7Sopenharmony_ci    is ename:VK_FALSE.
6528e5c31af7Sopenharmony_ci
6529e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_library_group_handles[]
6530e5c31af7Sopenharmony_ciIf the pipeline is created with ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR and
6531e5c31af7Sopenharmony_cithe <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
6532e5c31af7Sopenharmony_cifeature is enabled, pname:pShaderGroupCaptureReplayHandle is inherited by
6533e5c31af7Sopenharmony_ciall pipelines which link against this pipeline and remains bitwise identical
6534e5c31af7Sopenharmony_cifor any pipeline which references this pipeline library.
6535e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_library_group_handles[]
6536e5c31af7Sopenharmony_ci
6537e5c31af7Sopenharmony_ci.Valid Usage
6538e5c31af7Sopenharmony_ci****
6539e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03474]]
6540e5c31af7Sopenharmony_ci    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR then
6541e5c31af7Sopenharmony_ci    pname:generalShader must: be a valid index into
6542e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages referring to a
6543e5c31af7Sopenharmony_ci    shader of ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
6544e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_MISS_BIT_KHR, or
6545e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
6546e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03475]]
6547e5c31af7Sopenharmony_ci    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR then
6548e5c31af7Sopenharmony_ci    pname:closestHitShader, pname:anyHitShader, and pname:intersectionShader
6549e5c31af7Sopenharmony_ci    must: be ename:VK_SHADER_UNUSED_KHR
6550e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03476]]
6551e5c31af7Sopenharmony_ci    If pname:type is
6552e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR then
6553e5c31af7Sopenharmony_ci    pname:intersectionShader must: be a valid index into
6554e5c31af7Sopenharmony_ci    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages referring to a
6555e5c31af7Sopenharmony_ci    shader of ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR
6556e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03477]]
6557e5c31af7Sopenharmony_ci    If pname:type is
6558e5c31af7Sopenharmony_ci    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR then
6559e5c31af7Sopenharmony_ci    pname:intersectionShader must: be ename:VK_SHADER_UNUSED_KHR
6560e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-closestHitShader-03478]]
6561e5c31af7Sopenharmony_ci    pname:closestHitShader must: be either ename:VK_SHADER_UNUSED_KHR or a
6562e5c31af7Sopenharmony_ci    valid index into slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages
6563e5c31af7Sopenharmony_ci    referring to a shader of ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
6564e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-anyHitShader-03479]]
6565e5c31af7Sopenharmony_ci    pname:anyHitShader must: be either ename:VK_SHADER_UNUSED_KHR or a valid
6566e5c31af7Sopenharmony_ci    index into slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages
6567e5c31af7Sopenharmony_ci    referring to a shader of ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR
6568e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03603]]
6569e5c31af7Sopenharmony_ci    If
6570e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed
6571e5c31af7Sopenharmony_ci    is ename:VK_FALSE then pname:pShaderGroupCaptureReplayHandle must: not
6572e5c31af7Sopenharmony_ci    be provided if it has not been provided on a previous call to ray
6573e5c31af7Sopenharmony_ci    tracing pipeline creation
6574e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03604]]
6575e5c31af7Sopenharmony_ci    If
6576e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed
6577e5c31af7Sopenharmony_ci    is ename:VK_FALSE then the caller must: guarantee that no ray tracing
6578e5c31af7Sopenharmony_ci    pipeline creation commands with pname:pShaderGroupCaptureReplayHandle
6579e5c31af7Sopenharmony_ci    provided execute simultaneously with ray tracing pipeline creation
6580e5c31af7Sopenharmony_ci    commands without pname:pShaderGroupCaptureReplayHandle provided
6581e5c31af7Sopenharmony_ci****
6582e5c31af7Sopenharmony_ci
6583e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkRayTracingShaderGroupCreateInfoKHR.adoc[]
6584e5c31af7Sopenharmony_ci--
6585e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6586e5c31af7Sopenharmony_ci
6587e5c31af7Sopenharmony_ci[open,refpage='VkRayTracingShaderGroupTypeKHR',desc='Shader group types',type='enums',alias='VkRayTracingShaderGroupTypeNV']
6588e5c31af7Sopenharmony_ci--
6589e5c31af7Sopenharmony_ci:refpage: VkRayTracingShaderGroupTypeKHR
6590e5c31af7Sopenharmony_ci
6591e5c31af7Sopenharmony_ciPossible values of pname:type in sname:VkRayTracingShaderGroupCreateInfoKHR
6592e5c31af7Sopenharmony_ciare:
6593e5c31af7Sopenharmony_ci
6594e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkRayTracingShaderGroupTypeKHR.adoc[]
6595e5c31af7Sopenharmony_ci
6596e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
6597e5c31af7Sopenharmony_cior the equivalent
6598e5c31af7Sopenharmony_ci
6599e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkRayTracingShaderGroupTypeNV.adoc[]
6600e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
6601e5c31af7Sopenharmony_ci
6602e5c31af7Sopenharmony_ci  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR indicates a shader
6603e5c31af7Sopenharmony_ci    group with a single ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
6604e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_MISS_BIT_KHR, or
6605e5c31af7Sopenharmony_ci    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR shader in it.
6606e5c31af7Sopenharmony_ci  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR specifies
6607e5c31af7Sopenharmony_ci    a shader group that only hits triangles and must: not contain an
6608e5c31af7Sopenharmony_ci    intersection shader, only closest hit and any-hit shaders.
6609e5c31af7Sopenharmony_ci  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
6610e5c31af7Sopenharmony_ci    specifies a shader group that only intersects with custom geometry and
6611e5c31af7Sopenharmony_ci    must: contain an intersection shader and may: contain closest hit and
6612e5c31af7Sopenharmony_ci    any-hit shaders.
6613e5c31af7Sopenharmony_ci
6614e5c31af7Sopenharmony_ci[NOTE]
6615e5c31af7Sopenharmony_ci.Note
6616e5c31af7Sopenharmony_ci====
6617e5c31af7Sopenharmony_ciFor current group types, the hit group type could be inferred from the
6618e5c31af7Sopenharmony_cipresence or absence of the intersection shader, but we provide the type
6619e5c31af7Sopenharmony_ciexplicitly for future hit groups that do not have that property.
6620e5c31af7Sopenharmony_ci====
6621e5c31af7Sopenharmony_ci--
6622e5c31af7Sopenharmony_ci
6623e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6624e5c31af7Sopenharmony_ci[open,refpage='VkRayTracingPipelineInterfaceCreateInfoKHR',desc='Structure specifying additional interface information when using libraries',type='structs']
6625e5c31af7Sopenharmony_ci--
6626e5c31af7Sopenharmony_ci:refpage: VkRayTracingPipelineInterfaceCreateInfoKHR
6627e5c31af7Sopenharmony_ci
6628e5c31af7Sopenharmony_ciThe sname:VkRayTracingPipelineInterfaceCreateInfoKHR structure is defined
6629e5c31af7Sopenharmony_cias:
6630e5c31af7Sopenharmony_ci
6631e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkRayTracingPipelineInterfaceCreateInfoKHR.adoc[]
6632e5c31af7Sopenharmony_ci
6633e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
6634e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
6635e5c31af7Sopenharmony_ci    structure.
6636e5c31af7Sopenharmony_ci  * pname:maxPipelineRayPayloadSize is the maximum payload size in bytes
6637e5c31af7Sopenharmony_ci    used by any shader in the pipeline.
6638e5c31af7Sopenharmony_ci  * pname:maxPipelineRayHitAttributeSize is the maximum attribute structure
6639e5c31af7Sopenharmony_ci    size in bytes used by any shader in the pipeline.
6640e5c31af7Sopenharmony_ci
6641e5c31af7Sopenharmony_cipname:maxPipelineRayPayloadSize is calculated as the maximum number of bytes
6642e5c31af7Sopenharmony_ciused by any block declared in the code:RayPayloadKHR or
6643e5c31af7Sopenharmony_cicode:IncomingRayPayloadKHR storage classes.
6644e5c31af7Sopenharmony_cipname:maxPipelineRayHitAttributeSize is calculated as the maximum number of
6645e5c31af7Sopenharmony_cibytes used by any block declared in the code:HitAttributeKHR storage class.
6646e5c31af7Sopenharmony_ciAs variables in these storage classes do not have explicit offsets, the size
6647e5c31af7Sopenharmony_cishould be calculated as if each variable has a
6648e5c31af7Sopenharmony_ci<<interfaces-alignment-requirements, scalar alignment>> equal to the largest
6649e5c31af7Sopenharmony_ciscalar alignment of any of the block's members.
6650e5c31af7Sopenharmony_ci
6651e5c31af7Sopenharmony_ci[NOTE]
6652e5c31af7Sopenharmony_ci.Note
6653e5c31af7Sopenharmony_ci====
6654e5c31af7Sopenharmony_ciThere is no explicit upper limit for pname:maxPipelineRayPayloadSize, but in
6655e5c31af7Sopenharmony_cipractice it should be kept as small as possible.
6656e5c31af7Sopenharmony_ciSimilar to invocation local memory, it must be allocated for each shader
6657e5c31af7Sopenharmony_ciinvocation and for devices which support many simultaneous invocations, this
6658e5c31af7Sopenharmony_cistorage can rapidly be exhausted, resulting in failure.
6659e5c31af7Sopenharmony_ci====
6660e5c31af7Sopenharmony_ci
6661e5c31af7Sopenharmony_ci.Valid Usage
6662e5c31af7Sopenharmony_ci****
6663e5c31af7Sopenharmony_ci  * [[VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-maxPipelineRayHitAttributeSize-03605]]
6664e5c31af7Sopenharmony_ci    pname:maxPipelineRayHitAttributeSize must: be less than or equal to
6665e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayHitAttributeSize
6666e5c31af7Sopenharmony_ci****
6667e5c31af7Sopenharmony_ci
6668e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkRayTracingPipelineInterfaceCreateInfoKHR.adoc[]
6669e5c31af7Sopenharmony_ci--
6670e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6671e5c31af7Sopenharmony_ci
6672e5c31af7Sopenharmony_ci[open,refpage='vkGetRayTracingShaderGroupHandlesKHR',desc='Query ray tracing pipeline shader group handles',type='protos',alias='vkGetRayTracingShaderGroupHandlesNV']
6673e5c31af7Sopenharmony_ci--
6674e5c31af7Sopenharmony_ci:refpage: vkGetRayTracingShaderGroupHandlesKHR
6675e5c31af7Sopenharmony_ci
6676e5c31af7Sopenharmony_ciTo query the opaque handles of shaders in the ray tracing pipeline, call:
6677e5c31af7Sopenharmony_ci
6678e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6679e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetRayTracingShaderGroupHandlesKHR.adoc[]
6680e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6681e5c31af7Sopenharmony_ci
6682e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline+VK_NV_ray_tracing[or the equivalent command]
6683e5c31af7Sopenharmony_ci
6684e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
6685e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetRayTracingShaderGroupHandlesNV.adoc[]
6686e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
6687e5c31af7Sopenharmony_ci
6688e5c31af7Sopenharmony_ci  * pname:device is the logical device containing the ray tracing pipeline.
6689e5c31af7Sopenharmony_ci  * pname:pipeline is the ray tracing pipeline object containing the
6690e5c31af7Sopenharmony_ci    shaders.
6691e5c31af7Sopenharmony_ci  * pname:firstGroup is the index of the first group to retrieve a handle
6692e5c31af7Sopenharmony_ci    for from the
6693e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6694e5c31af7Sopenharmony_cislink:VkRayTracingPipelineCreateInfoKHR::pname:pGroups
6695e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6696e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline+VK_NV_ray_tracing[or]
6697e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
6698e5c31af7Sopenharmony_cislink:VkRayTracingPipelineCreateInfoNV::pname:pGroups
6699e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
6700e5c31af7Sopenharmony_ci    array.
6701e5c31af7Sopenharmony_ci  * pname:groupCount is the number of shader handles to retrieve.
6702e5c31af7Sopenharmony_ci  * pname:dataSize is the size in bytes of the buffer pointed to by
6703e5c31af7Sopenharmony_ci    pname:pData.
6704e5c31af7Sopenharmony_ci  * pname:pData is a pointer to a user-allocated buffer where the results
6705e5c31af7Sopenharmony_ci    will be written.
6706e5c31af7Sopenharmony_ci
6707e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_library_group_handles[]
6708e5c31af7Sopenharmony_ciIf pname:pipeline was created with ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
6709e5c31af7Sopenharmony_ciand the <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
6710e5c31af7Sopenharmony_cifeature is enabled applications can: query group handles from that pipeline,
6711e5c31af7Sopenharmony_cieven if the pipeline is a library and is never bound to a command buffer.
6712e5c31af7Sopenharmony_ciThese group handles remain bitwise identical for any pname:pipeline which
6713e5c31af7Sopenharmony_cireferences the pipeline library.
6714e5c31af7Sopenharmony_ciGroup indices are assigned as-if the pipeline was created without
6715e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR.
6716e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_library_group_handles[]
6717e5c31af7Sopenharmony_ci
6718e5c31af7Sopenharmony_ci.Valid Usage
6719e5c31af7Sopenharmony_ci****
6720e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-04619]]
6721e5c31af7Sopenharmony_ci    pname:pipeline must: be a ray tracing pipeline
6722e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-04050]]
6723e5c31af7Sopenharmony_ci    pname:firstGroup must: be less than the number of shader groups in
6724e5c31af7Sopenharmony_ci    pname:pipeline
6725e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-02419]]
6726e5c31af7Sopenharmony_ci    The sum of pname:firstGroup and pname:groupCount must: be less than or
6727e5c31af7Sopenharmony_ci    equal to the number of shader groups in pname:pipeline
6728e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-02420]]
6729e5c31af7Sopenharmony_ci    pname:dataSize must: be at least
6730e5c31af7Sopenharmony_ci    [eq]#slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize
6731e5c31af7Sopenharmony_ci    {times} pname:groupCount#
6732e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
6733e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-07828]]
6734e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_library_group_handles[]
6735e5c31af7Sopenharmony_ci    If the
6736e5c31af7Sopenharmony_ci    <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
6737e5c31af7Sopenharmony_ci    feature is not enabled,
6738e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_library_group_handles[]
6739e5c31af7Sopenharmony_ci    pname:pipeline must: not have been created with
6740e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
6741e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
6742e5c31af7Sopenharmony_ci****
6743e5c31af7Sopenharmony_ci
6744e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetRayTracingShaderGroupHandlesKHR.adoc[]
6745e5c31af7Sopenharmony_ci--
6746e5c31af7Sopenharmony_ci
6747e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6748e5c31af7Sopenharmony_ci[open,refpage='vkGetRayTracingCaptureReplayShaderGroupHandlesKHR',desc='Query opaque capture replay data for pipeline shader group handles',type='protos']
6749e5c31af7Sopenharmony_ci--
6750e5c31af7Sopenharmony_ci:refpage: vkGetRayTracingCaptureReplayShaderGroupHandlesKHR
6751e5c31af7Sopenharmony_ci
6752e5c31af7Sopenharmony_ciTo query the opaque capture data of shader groups in a ray tracing pipeline,
6753e5c31af7Sopenharmony_cicall:
6754e5c31af7Sopenharmony_ci
6755e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.adoc[]
6756e5c31af7Sopenharmony_ci
6757e5c31af7Sopenharmony_ci  * pname:device is the logical device containing the ray tracing pipeline.
6758e5c31af7Sopenharmony_ci  * pname:pipeline is the ray tracing pipeline object containing the
6759e5c31af7Sopenharmony_ci    shaders.
6760e5c31af7Sopenharmony_ci  * pname:firstGroup is the index of the first group to retrieve a handle
6761e5c31af7Sopenharmony_ci    for from the slink:VkRayTracingPipelineCreateInfoKHR::pname:pGroups
6762e5c31af7Sopenharmony_ci    array.
6763e5c31af7Sopenharmony_ci  * pname:groupCount is the number of shader handles to retrieve.
6764e5c31af7Sopenharmony_ci  * pname:dataSize is the size in bytes of the buffer pointed to by
6765e5c31af7Sopenharmony_ci    pname:pData.
6766e5c31af7Sopenharmony_ci  * pname:pData is a pointer to a user-allocated buffer where the results
6767e5c31af7Sopenharmony_ci    will be written.
6768e5c31af7Sopenharmony_ci
6769e5c31af7Sopenharmony_ciOnce queried, this opaque data can: be provided at pipeline creation time
6770e5c31af7Sopenharmony_ci(in a subsequent execution), using
6771e5c31af7Sopenharmony_cislink:VkRayTracingShaderGroupCreateInfoKHR::pname:pShaderGroupCaptureReplayHandle,
6772e5c31af7Sopenharmony_cias described in <<ray-tracing-capture-replay, Ray Tracing Capture Replay>>.
6773e5c31af7Sopenharmony_ci
6774e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_library_group_handles[]
6775e5c31af7Sopenharmony_ciIf pname:pipeline was created with ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
6776e5c31af7Sopenharmony_ciand the <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
6777e5c31af7Sopenharmony_cifeature is enabled applications can: query capture replay group handles from
6778e5c31af7Sopenharmony_cithat pipeline.
6779e5c31af7Sopenharmony_ciThe capture replay handle remains bitwise identical for any pname:pipeline
6780e5c31af7Sopenharmony_ciwhich references the pipeline library.
6781e5c31af7Sopenharmony_ciGroup indices are assigned as-if the pipeline was created without
6782e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR.
6783e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_library_group_handles[]
6784e5c31af7Sopenharmony_ci
6785e5c31af7Sopenharmony_ci.Valid Usage
6786e5c31af7Sopenharmony_ci****
6787e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-04620]]
6788e5c31af7Sopenharmony_ci    pname:pipeline must: be a ray tracing pipeline
6789e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-04051]]
6790e5c31af7Sopenharmony_ci    pname:firstGroup must: be less than the number of shader groups in
6791e5c31af7Sopenharmony_ci    pname:pipeline
6792e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-03483]]
6793e5c31af7Sopenharmony_ci    The sum of pname:firstGroup and pname:groupCount must: be less than or
6794e5c31af7Sopenharmony_ci    equal to the number of shader groups in pname:pipeline
6795e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-03484]]
6796e5c31af7Sopenharmony_ci    pname:dataSize must: be at least
6797e5c31af7Sopenharmony_ci    [eq]#slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleCaptureReplaySize
6798e5c31af7Sopenharmony_ci    {times} pname:groupCount#
6799e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03606]]
6800e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
6801e5c31af7Sopenharmony_ci    must: be enabled to call this function
6802e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-03607]]
6803e5c31af7Sopenharmony_ci    pname:pipeline must: have been created with a pname:flags that included
6804e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
6805e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
6806e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-07829]]
6807e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_library_group_handles[]
6808e5c31af7Sopenharmony_ci    If the
6809e5c31af7Sopenharmony_ci    <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
6810e5c31af7Sopenharmony_ci    feature is not enabled,
6811e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_library_group_handles[]
6812e5c31af7Sopenharmony_ci    pname:pipeline must: not have been created with
6813e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
6814e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
6815e5c31af7Sopenharmony_ci****
6816e5c31af7Sopenharmony_ci
6817e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.adoc[]
6818e5c31af7Sopenharmony_ci--
6819e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6820e5c31af7Sopenharmony_ci
6821e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[]
6822e5c31af7Sopenharmony_ciRay tracing pipelines can: contain more shaders than a graphics or compute
6823e5c31af7Sopenharmony_cipipeline, so to allow parallel compilation of shaders within a pipeline, an
6824e5c31af7Sopenharmony_ciapplication can: choose to defer compilation until a later point in time.
6825e5c31af7Sopenharmony_ci
6826e5c31af7Sopenharmony_ci[open,refpage='vkCompileDeferredNV',desc='Deferred compilation of shaders',type='protos']
6827e5c31af7Sopenharmony_ci--
6828e5c31af7Sopenharmony_ci:refpage: vkCompileDeferredNV
6829e5c31af7Sopenharmony_ci
6830e5c31af7Sopenharmony_ciTo compile a deferred shader in a pipeline call:
6831e5c31af7Sopenharmony_ci
6832e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCompileDeferredNV.adoc[]
6833e5c31af7Sopenharmony_ci
6834e5c31af7Sopenharmony_ci  * pname:device is the logical device containing the ray tracing pipeline.
6835e5c31af7Sopenharmony_ci  * pname:pipeline is the ray tracing pipeline object containing the
6836e5c31af7Sopenharmony_ci    shaders.
6837e5c31af7Sopenharmony_ci  * pname:shader is the index of the shader to compile.
6838e5c31af7Sopenharmony_ci
6839e5c31af7Sopenharmony_ci.Valid Usage
6840e5c31af7Sopenharmony_ci****
6841e5c31af7Sopenharmony_ci  * [[VUID-vkCompileDeferredNV-pipeline-04621]]
6842e5c31af7Sopenharmony_ci    pname:pipeline must: be a ray tracing pipeline
6843e5c31af7Sopenharmony_ci  * [[VUID-vkCompileDeferredNV-pipeline-02237]]
6844e5c31af7Sopenharmony_ci    pname:pipeline must: have been created with
6845e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV
6846e5c31af7Sopenharmony_ci  * [[VUID-vkCompileDeferredNV-shader-02238]]
6847e5c31af7Sopenharmony_ci    pname:shader must: not have been called as a deferred compile before
6848e5c31af7Sopenharmony_ci****
6849e5c31af7Sopenharmony_ci
6850e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCompileDeferredNV.adoc[]
6851e5c31af7Sopenharmony_ci--
6852e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing[]
6853e5c31af7Sopenharmony_ci
6854e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
6855e5c31af7Sopenharmony_ci[open,refpage='vkGetRayTracingShaderGroupStackSizeKHR',desc='Query ray tracing pipeline shader group shader stack size',type='protos']
6856e5c31af7Sopenharmony_ci--
6857e5c31af7Sopenharmony_ciTo query the pipeline stack size of shaders in a shader group in the ray
6858e5c31af7Sopenharmony_citracing pipeline, call:
6859e5c31af7Sopenharmony_ci
6860e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetRayTracingShaderGroupStackSizeKHR.adoc[]
6861e5c31af7Sopenharmony_ci
6862e5c31af7Sopenharmony_ci  * pname:device is the logical device containing the ray tracing pipeline.
6863e5c31af7Sopenharmony_ci  * pname:pipeline is the ray tracing pipeline object containing the shaders
6864e5c31af7Sopenharmony_ci    groups.
6865e5c31af7Sopenharmony_ci  * pname:group is the index of the shader group to query.
6866e5c31af7Sopenharmony_ci  * pname:groupShader is the type of shader from the group to query.
6867e5c31af7Sopenharmony_ci
6868e5c31af7Sopenharmony_ciThe return value is the ray tracing pipeline stack size in bytes for the
6869e5c31af7Sopenharmony_cispecified shader as called from the specified shader group.
6870e5c31af7Sopenharmony_ci
6871e5c31af7Sopenharmony_ci.Valid Usage
6872e5c31af7Sopenharmony_ci****
6873e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-04622]]
6874e5c31af7Sopenharmony_ci    pname:pipeline must: be a ray tracing pipeline
6875e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-group-03608]]
6876e5c31af7Sopenharmony_ci    The value of pname:group must be less than the number of shader groups
6877e5c31af7Sopenharmony_ci    in pname:pipeline
6878e5c31af7Sopenharmony_ci  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-groupShader-03609]]
6879e5c31af7Sopenharmony_ci    The shader identified by pname:groupShader in pname:group must: not be
6880e5c31af7Sopenharmony_ci    ename:VK_SHADER_UNUSED_KHR
6881e5c31af7Sopenharmony_ci****
6882e5c31af7Sopenharmony_ci
6883e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetRayTracingShaderGroupStackSizeKHR.adoc[]
6884e5c31af7Sopenharmony_ci--
6885e5c31af7Sopenharmony_ci
6886e5c31af7Sopenharmony_ci[open,refpage='VkShaderGroupShaderKHR',desc='Shader group shaders',type='enums']
6887e5c31af7Sopenharmony_ci--
6888e5c31af7Sopenharmony_ciPossible values of pname:groupShader in
6889e5c31af7Sopenharmony_ciflink:vkGetRayTracingShaderGroupStackSizeKHR are:
6890e5c31af7Sopenharmony_ci
6891e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkShaderGroupShaderKHR.adoc[]
6892e5c31af7Sopenharmony_ci
6893e5c31af7Sopenharmony_ci  * ename:VK_SHADER_GROUP_SHADER_GENERAL_KHR uses the shader specified in
6894e5c31af7Sopenharmony_ci    the group with
6895e5c31af7Sopenharmony_ci    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:generalShader
6896e5c31af7Sopenharmony_ci  * ename:VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR uses the shader specified
6897e5c31af7Sopenharmony_ci    in the group with
6898e5c31af7Sopenharmony_ci    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:closestHitShader
6899e5c31af7Sopenharmony_ci  * ename:VK_SHADER_GROUP_SHADER_ANY_HIT_KHR uses the shader specified in
6900e5c31af7Sopenharmony_ci    the group with
6901e5c31af7Sopenharmony_ci    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:anyHitShader
6902e5c31af7Sopenharmony_ci  * ename:VK_SHADER_GROUP_SHADER_INTERSECTION_KHR uses the shader specified
6903e5c31af7Sopenharmony_ci    in the group with
6904e5c31af7Sopenharmony_ci    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:intersectionShader
6905e5c31af7Sopenharmony_ci--
6906e5c31af7Sopenharmony_ci
6907e5c31af7Sopenharmony_ci[open,refpage='vkCmdSetRayTracingPipelineStackSizeKHR',desc='Set the stack size dynamically for a ray tracing pipeline',type='protos']
6908e5c31af7Sopenharmony_ci--
6909e5c31af7Sopenharmony_ci:refpage: vkCmdSetRayTracingPipelineStackSizeKHR
6910e5c31af7Sopenharmony_ci
6911e5c31af7Sopenharmony_ciTo <<pipelines-dynamic-state, dynamically set>> the stack size for a ray
6912e5c31af7Sopenharmony_citracing pipeline, call:
6913e5c31af7Sopenharmony_ci
6914e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdSetRayTracingPipelineStackSizeKHR.adoc[]
6915e5c31af7Sopenharmony_ci
6916e5c31af7Sopenharmony_ci  * pname:commandBuffer is the command buffer into which the command will be
6917e5c31af7Sopenharmony_ci    recorded.
6918e5c31af7Sopenharmony_ci  * pname:pipelineStackSize is the stack size to use for subsequent ray
6919e5c31af7Sopenharmony_ci    tracing trace commands.
6920e5c31af7Sopenharmony_ci
6921e5c31af7Sopenharmony_ciThis command sets the stack size for subsequent ray tracing commands when
6922e5c31af7Sopenharmony_cithe ray tracing pipeline is created with
6923e5c31af7Sopenharmony_ciename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR set in
6924e5c31af7Sopenharmony_cislink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
6925e5c31af7Sopenharmony_ciOtherwise, the stack size is computed as described in
6926e5c31af7Sopenharmony_ci<<ray-tracing-pipeline-stack, Ray Tracing Pipeline Stack>>.
6927e5c31af7Sopenharmony_ci
6928e5c31af7Sopenharmony_ci.Valid Usage
6929e5c31af7Sopenharmony_ci****
6930e5c31af7Sopenharmony_ci  * [[VUID-vkCmdSetRayTracingPipelineStackSizeKHR-pipelineStackSize-03610]]
6931e5c31af7Sopenharmony_ci    pname:pipelineStackSize must: be large enough for any dynamic execution
6932e5c31af7Sopenharmony_ci    through the shaders in the ray tracing pipeline used by a subsequent
6933e5c31af7Sopenharmony_ci    trace call
6934e5c31af7Sopenharmony_ci****
6935e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCmdSetRayTracingPipelineStackSizeKHR.adoc[]
6936e5c31af7Sopenharmony_ci--
6937e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
6938e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
6939e5c31af7Sopenharmony_ci
6940e5c31af7Sopenharmony_ci
6941e5c31af7Sopenharmony_ci[[pipelines-destruction]]
6942e5c31af7Sopenharmony_ci== Pipeline Destruction
6943e5c31af7Sopenharmony_ci
6944e5c31af7Sopenharmony_ci[open,refpage='vkDestroyPipeline',desc='Destroy a pipeline object',type='protos']
6945e5c31af7Sopenharmony_ci--
6946e5c31af7Sopenharmony_ciTo destroy a pipeline, call:
6947e5c31af7Sopenharmony_ci
6948e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkDestroyPipeline.adoc[]
6949e5c31af7Sopenharmony_ci
6950e5c31af7Sopenharmony_ci  * pname:device is the logical device that destroys the pipeline.
6951e5c31af7Sopenharmony_ci  * pname:pipeline is the handle of the pipeline to destroy.
6952e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
6953e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
6954e5c31af7Sopenharmony_ci
6955e5c31af7Sopenharmony_ci.Valid Usage
6956e5c31af7Sopenharmony_ci****
6957e5c31af7Sopenharmony_ci  * [[VUID-vkDestroyPipeline-pipeline-00765]]
6958e5c31af7Sopenharmony_ci    All submitted commands that refer to pname:pipeline must: have completed
6959e5c31af7Sopenharmony_ci    execution
6960e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
6961e5c31af7Sopenharmony_ci  * [[VUID-vkDestroyPipeline-pipeline-00766]]
6962e5c31af7Sopenharmony_ci    If sname:VkAllocationCallbacks were provided when pname:pipeline was
6963e5c31af7Sopenharmony_ci    created, a compatible set of callbacks must: be provided here
6964e5c31af7Sopenharmony_ci  * [[VUID-vkDestroyPipeline-pipeline-00767]]
6965e5c31af7Sopenharmony_ci    If no sname:VkAllocationCallbacks were provided when pname:pipeline was
6966e5c31af7Sopenharmony_ci    created, pname:pAllocator must: be `NULL`
6967e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
6968e5c31af7Sopenharmony_ci****
6969e5c31af7Sopenharmony_ci
6970e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkDestroyPipeline.adoc[]
6971e5c31af7Sopenharmony_ci--
6972e5c31af7Sopenharmony_ci
6973e5c31af7Sopenharmony_ci
6974e5c31af7Sopenharmony_ci[[pipelines-pipeline-derivatives]]
6975e5c31af7Sopenharmony_ci== Pipeline Derivatives
6976e5c31af7Sopenharmony_ci
6977e5c31af7Sopenharmony_ci
6978e5c31af7Sopenharmony_ciA pipeline derivative is a child pipeline created from a parent pipeline,
6979e5c31af7Sopenharmony_ciwhere the child and parent are expected to have much commonality.
6980e5c31af7Sopenharmony_ci
6981e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
6982e5c31af7Sopenharmony_ciThe goal of derivative pipelines is that they be cheaper to create using the
6983e5c31af7Sopenharmony_ciparent as a starting point, and that it be more efficient (on either host or
6984e5c31af7Sopenharmony_cidevice) to switch/bind between children of the same parent.
6985e5c31af7Sopenharmony_ci
6986e5c31af7Sopenharmony_ciA derivative pipeline is created by setting the
6987e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag in the
6988e5c31af7Sopenharmony_cistext:Vk*PipelineCreateInfo structure.
6989e5c31af7Sopenharmony_ciIf this is set, then exactly one of pname:basePipelineHandle or
6990e5c31af7Sopenharmony_cipname:basePipelineIndex members of the structure must: have a valid
6991e5c31af7Sopenharmony_cihandle/index, and specifies the parent pipeline.
6992e5c31af7Sopenharmony_ciIf pname:basePipelineHandle is used, the parent pipeline must: have already
6993e5c31af7Sopenharmony_cibeen created.
6994e5c31af7Sopenharmony_ciIf pname:basePipelineIndex is used, then the parent is being created in the
6995e5c31af7Sopenharmony_cisame command.
6996e5c31af7Sopenharmony_cidlink:VK_NULL_HANDLE acts as the invalid handle for
6997e5c31af7Sopenharmony_cipname:basePipelineHandle, and -1 is the invalid index for
6998e5c31af7Sopenharmony_cipname:basePipelineIndex.
6999e5c31af7Sopenharmony_ciIf pname:basePipelineIndex is used, the base pipeline must: appear earlier
7000e5c31af7Sopenharmony_ciin the array.
7001e5c31af7Sopenharmony_ciThe base pipeline must: have been created with the
7002e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set.
7003e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7004e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7005e5c31af7Sopenharmony_ciPipeline derivatives are not supported in Vulkan SC due to the use of
7006e5c31af7Sopenharmony_ciread-only offline generated pipeline caches <<SCID-8>>.
7007e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7008e5c31af7Sopenharmony_ci
7009e5c31af7Sopenharmony_ci[[pipelines-cache]]
7010e5c31af7Sopenharmony_ci== Pipeline Cache
7011e5c31af7Sopenharmony_ci
7012e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCache',desc='Opaque handle to a pipeline cache object',type='handles']
7013e5c31af7Sopenharmony_ci--
7014e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7015e5c31af7Sopenharmony_ciPipeline cache objects allow the result of pipeline construction to be
7016e5c31af7Sopenharmony_cireused between pipelines and between runs of an application.
7017e5c31af7Sopenharmony_ciReuse between pipelines is achieved by passing the same pipeline cache
7018e5c31af7Sopenharmony_ciobject when creating multiple related pipelines.
7019e5c31af7Sopenharmony_ciReuse across runs of an application is achieved by retrieving pipeline cache
7020e5c31af7Sopenharmony_cicontents in one run of an application, saving the contents, and using them
7021e5c31af7Sopenharmony_cito preinitialize a pipeline cache on a subsequent run.
7022e5c31af7Sopenharmony_ciThe contents of the pipeline cache objects are managed by the
7023e5c31af7Sopenharmony_ciimplementation.
7024e5c31af7Sopenharmony_ciApplications can: manage the host memory consumed by a pipeline cache object
7025e5c31af7Sopenharmony_ciand control the amount of data retrieved from a pipeline cache object.
7026e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7027e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7028e5c31af7Sopenharmony_ciPipeline cache objects allow the application to load multiple binary
7029e5c31af7Sopenharmony_cipipeline objects generated by an offline cache creation tool into pipeline
7030e5c31af7Sopenharmony_cicache objects.
7031e5c31af7Sopenharmony_ciThe cache can then be used during pipeline creation to load offline pipeline
7032e5c31af7Sopenharmony_cidata.
7033e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7034e5c31af7Sopenharmony_ci
7035e5c31af7Sopenharmony_ciPipeline cache objects are represented by sname:VkPipelineCache handles:
7036e5c31af7Sopenharmony_ci
7037e5c31af7Sopenharmony_ciinclude::{generated}/api/handles/VkPipelineCache.adoc[]
7038e5c31af7Sopenharmony_ci--
7039e5c31af7Sopenharmony_ci
7040e5c31af7Sopenharmony_ci
7041e5c31af7Sopenharmony_ci[[pipelines-cache-create]]
7042e5c31af7Sopenharmony_ci=== Creating a Pipeline Cache
7043e5c31af7Sopenharmony_ci
7044e5c31af7Sopenharmony_ci[open,refpage='vkCreatePipelineCache',desc='Creates a new pipeline cache',type='protos']
7045e5c31af7Sopenharmony_ci--
7046e5c31af7Sopenharmony_ci:refpage: vkCreatePipelineCache
7047e5c31af7Sopenharmony_ci:objectnameplural: pipeline caches
7048e5c31af7Sopenharmony_ci:objectnamecamelcase: pipelineCache
7049e5c31af7Sopenharmony_ci:objectcount: 1
7050e5c31af7Sopenharmony_ci
7051e5c31af7Sopenharmony_ciTo create pipeline cache objects, call:
7052e5c31af7Sopenharmony_ci
7053e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCreatePipelineCache.adoc[]
7054e5c31af7Sopenharmony_ci
7055e5c31af7Sopenharmony_ci  * pname:device is the logical device that creates the pipeline cache
7056e5c31af7Sopenharmony_ci    object.
7057e5c31af7Sopenharmony_ci  * pname:pCreateInfo is a pointer to a slink:VkPipelineCacheCreateInfo
7058e5c31af7Sopenharmony_ci    structure containing initial parameters for the pipeline cache object.
7059e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
7060e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
7061e5c31af7Sopenharmony_ci  * pname:pPipelineCache is a pointer to a slink:VkPipelineCache handle in
7062e5c31af7Sopenharmony_ci    which the resulting pipeline cache object is returned.
7063e5c31af7Sopenharmony_ci
7064e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7065e5c31af7Sopenharmony_ci[NOTE]
7066e5c31af7Sopenharmony_ci.Note
7067e5c31af7Sopenharmony_ci====
7068e5c31af7Sopenharmony_ciApplications can: track and manage the total host memory size of a pipeline
7069e5c31af7Sopenharmony_cicache object using the pname:pAllocator.
7070e5c31af7Sopenharmony_ciApplications can: limit the amount of data retrieved from a pipeline cache
7071e5c31af7Sopenharmony_ciobject in fname:vkGetPipelineCacheData.
7072e5c31af7Sopenharmony_ciImplementations should: not internally limit the total number of entries
7073e5c31af7Sopenharmony_ciadded to a pipeline cache object or the total host memory consumed.
7074e5c31af7Sopenharmony_ci====
7075e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7076e5c31af7Sopenharmony_ci
7077e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7078e5c31af7Sopenharmony_ciIf the pipeline cache data pointed to by
7079e5c31af7Sopenharmony_cislink:VkPipelineCacheCreateInfo::pname:pInitialData is not compatible with
7080e5c31af7Sopenharmony_cithe device, pipeline cache creation will fail and
7081e5c31af7Sopenharmony_ciename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA will be returned.
7082e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7083e5c31af7Sopenharmony_ci
7084e5c31af7Sopenharmony_ciOnce created, a pipeline cache can: be passed to the
7085e5c31af7Sopenharmony_ciflink:vkCreateGraphicsPipelines
7086e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[flink:vkCreateRayTracingPipelinesKHR,]
7087e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[flink:vkCreateRayTracingPipelinesNV,]
7088e5c31af7Sopenharmony_ciand flink:vkCreateComputePipelines commands.
7089e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7090e5c31af7Sopenharmony_ciIf the pipeline cache passed into these commands is not
7091e5c31af7Sopenharmony_cidlink:VK_NULL_HANDLE, the implementation will query it for possible reuse
7092e5c31af7Sopenharmony_ciopportunities and update it with new content.
7093e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7094e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7095e5c31af7Sopenharmony_ciThe pipeline cache passed into these commands will be queried by the
7096e5c31af7Sopenharmony_ciimplementation for matching pipelines on pipeline creation.
7097e5c31af7Sopenharmony_ciAfter the cache is created, its contents cannot be updated.
7098e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7099e5c31af7Sopenharmony_ciThe use of the pipeline cache object in these commands is internally
7100e5c31af7Sopenharmony_cisynchronized, and the same pipeline cache object can: be used in multiple
7101e5c31af7Sopenharmony_cithreads simultaneously.
7102e5c31af7Sopenharmony_ci
7103e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
7104e5c31af7Sopenharmony_ciIf pname:flags of pname:pCreateInfo includes
7105e5c31af7Sopenharmony_ciename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, all commands
7106e5c31af7Sopenharmony_cithat modify the returned pipeline cache object must: be
7107e5c31af7Sopenharmony_ci<<fundamentals-threadingbehavior,externally synchronized>>.
7108e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
7109e5c31af7Sopenharmony_ci
7110e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7111e5c31af7Sopenharmony_ci[NOTE]
7112e5c31af7Sopenharmony_ci.Note
7113e5c31af7Sopenharmony_ci====
7114e5c31af7Sopenharmony_ciImplementations should: make every effort to limit any critical sections to
7115e5c31af7Sopenharmony_cithe actual accesses to the cache, which is expected to be significantly
7116e5c31af7Sopenharmony_cishorter than the duration of the ftext:vkCreate*Pipelines commands.
7117e5c31af7Sopenharmony_ci====
7118e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7119e5c31af7Sopenharmony_ci
7120e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
7121e5c31af7Sopenharmony_ci
7122e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7123e5c31af7Sopenharmony_ci.Valid Usage
7124e5c31af7Sopenharmony_ci****
7125e5c31af7Sopenharmony_ci  * [[VUID-vkCreatePipelineCache-pCreateInfo-05045]]
7126e5c31af7Sopenharmony_ci    The contents of the structure pointed to by pname:pCreateInfo and the
7127e5c31af7Sopenharmony_ci    data pointed to by pname:pCreateInfo->pInitialData must: be the same as
7128e5c31af7Sopenharmony_ci    specified in one of the
7129e5c31af7Sopenharmony_ci    slink:VkDeviceObjectReservationCreateInfo::pname:pPipelineCacheCreateInfos
7130e5c31af7Sopenharmony_ci    structures when the device was created
7131e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
7132e5c31af7Sopenharmony_ci****
7133e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7134e5c31af7Sopenharmony_ci
7135e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCreatePipelineCache.adoc[]
7136e5c31af7Sopenharmony_ci--
7137e5c31af7Sopenharmony_ci
7138e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheCreateInfo',desc='Structure specifying parameters of a newly created pipeline cache',type='structs']
7139e5c31af7Sopenharmony_ci--
7140e5c31af7Sopenharmony_ciThe sname:VkPipelineCacheCreateInfo structure is defined as:
7141e5c31af7Sopenharmony_ci
7142e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineCacheCreateInfo.adoc[]
7143e5c31af7Sopenharmony_ci
7144e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
7145e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
7146e5c31af7Sopenharmony_ci    structure.
7147e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7148e5c31af7Sopenharmony_ci  * pname:flags is a bitmask of elink:VkPipelineCacheCreateFlagBits
7149e5c31af7Sopenharmony_ci    specifying the behavior of the pipeline cache.
7150e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7151e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7152e5c31af7Sopenharmony_ci  * pname:flags is reserved for future use.
7153e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7154e5c31af7Sopenharmony_ci  * pname:initialDataSize is the number of bytes in pname:pInitialData.
7155e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7156e5c31af7Sopenharmony_ci    If pname:initialDataSize is zero, the pipeline cache will initially be
7157e5c31af7Sopenharmony_ci    empty.
7158e5c31af7Sopenharmony_ci  * pname:pInitialData is a pointer to previously retrieved pipeline cache
7159e5c31af7Sopenharmony_ci    data.
7160e5c31af7Sopenharmony_ci    If the pipeline cache data is incompatible (as defined below) with the
7161e5c31af7Sopenharmony_ci    device, the pipeline cache will be initially empty.
7162e5c31af7Sopenharmony_ci    If pname:initialDataSize is zero, pname:pInitialData is ignored.
7163e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7164e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7165e5c31af7Sopenharmony_ci  * pname:pInitialData is a pointer to pipeline cache data that has been
7166e5c31af7Sopenharmony_ci    generated offline.
7167e5c31af7Sopenharmony_ci    If the pipeline cache data is incompatible (as defined below) with the
7168e5c31af7Sopenharmony_ci    device, ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA is returned.
7169e5c31af7Sopenharmony_ciifdef::hidden[]
7170e5c31af7Sopenharmony_ci// tag::scdeviation[]
7171e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheCreateInfo::pname:pInitialData must: point to a
7172e5c31af7Sopenharmony_ci    valid pipeline cache that has been generated offline <<SCID-1>>,
7173e5c31af7Sopenharmony_ci    <<SCID-8>>.
7174e5c31af7Sopenharmony_ci// end::scdeviation[]
7175e5c31af7Sopenharmony_ciendif::hidden[]
7176e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7177e5c31af7Sopenharmony_ci
7178e5c31af7Sopenharmony_ci.Valid Usage
7179e5c31af7Sopenharmony_ci****
7180e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7181e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheCreateInfo-initialDataSize-00768]]
7182e5c31af7Sopenharmony_ci    If pname:initialDataSize is not `0`, it must: be equal to the size of
7183e5c31af7Sopenharmony_ci    pname:pInitialData, as returned by fname:vkGetPipelineCacheData when
7184e5c31af7Sopenharmony_ci    pname:pInitialData was originally retrieved
7185e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheCreateInfo-initialDataSize-00769]]
7186e5c31af7Sopenharmony_ci    If pname:initialDataSize is not `0`, pname:pInitialData must: have been
7187e5c31af7Sopenharmony_ci    retrieved from a previous call to fname:vkGetPipelineCacheData
7188e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7189e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
7190e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheCreateInfo-pipelineCreationCacheControl-02892]]
7191e5c31af7Sopenharmony_ci    If the <<features-pipelineCreationCacheControl,
7192e5c31af7Sopenharmony_ci    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
7193e5c31af7Sopenharmony_ci    must: not include
7194e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT
7195e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
7196e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7197e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheCreateInfo-flags-05043]]
7198e5c31af7Sopenharmony_ci    pname:flags must: include ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT
7199e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheCreateInfo-flags-05044]]
7200e5c31af7Sopenharmony_ci    pname:flags must: include
7201e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT
7202e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheCreateInfo-pInitialData-05139]]
7203e5c31af7Sopenharmony_ci    The pipeline cache data pointed to by pname:pInitialData must: not
7204e5c31af7Sopenharmony_ci    contain any pipelines with duplicate pipeline identifiers.
7205e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7206e5c31af7Sopenharmony_ci****
7207e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7208e5c31af7Sopenharmony_ciifdef::hidden[]
7209e5c31af7Sopenharmony_ci// tag::scdeviation[]
7210e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheCreateInfo::pname:initialDataSize must: not be `0`
7211e5c31af7Sopenharmony_ci    <<SCID-1>>, <<SCID-8>>.
7212e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheCreateInfo::pname:pInitialData must: not be `NULL`
7213e5c31af7Sopenharmony_ci    <<SCID-1>>, <<SCID-8>>.
7214e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheCreateInfo::pname:flags must: include
7215e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT <<SCID-1>>, <<SCID-8>>.
7216e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheCreateInfo::pname:flags must: include
7217e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT <<SCID-2>>.
7218e5c31af7Sopenharmony_ci  * The contents of slink:VkPipelineCacheCreateInfo, including the data
7219e5c31af7Sopenharmony_ci    pointed to by slink:VkPipelineCacheCreateInfo::pname:pInitialData,
7220e5c31af7Sopenharmony_ci    passed to flink:vkCreatePipelineCache must: be the same as specified in
7221e5c31af7Sopenharmony_ci    one of the
7222e5c31af7Sopenharmony_ci    slink:VkDeviceObjectReservationCreateInfo::pname:pPipelineCacheCreateInfos
7223e5c31af7Sopenharmony_ci    structures when the device was created <<SCID-1>>.
7224e5c31af7Sopenharmony_ci// end::scdeviation[]
7225e5c31af7Sopenharmony_ciendif::hidden[]
7226e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7227e5c31af7Sopenharmony_ci
7228e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineCacheCreateInfo.adoc[]
7229e5c31af7Sopenharmony_ci--
7230e5c31af7Sopenharmony_ci
7231e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheCreateFlags', desc='Bitmask of VkPipelineCreateFlagBits', type='flags']
7232e5c31af7Sopenharmony_ci--
7233e5c31af7Sopenharmony_ciinclude::{generated}/api/flags/VkPipelineCacheCreateFlags.adoc[]
7234e5c31af7Sopenharmony_ci
7235e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7236e5c31af7Sopenharmony_citname:VkPipelineCacheCreateFlags is a bitmask type for setting a mask of
7237e5c31af7Sopenharmony_cizero or more elink:VkPipelineCacheCreateFlagBits.
7238e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7239e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7240e5c31af7Sopenharmony_citname:VkPipelineCacheCreateFlags is a bitmask type for setting a mask, but
7241e5c31af7Sopenharmony_ciis currently reserved for future use.
7242e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7243e5c31af7Sopenharmony_ci--
7244e5c31af7Sopenharmony_ci
7245e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7246e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheCreateFlagBits',desc='Bitmask specifying the behavior of the pipeline cache',type='enums']
7247e5c31af7Sopenharmony_ci--
7248e5c31af7Sopenharmony_ciBits which can: be set in slink:VkPipelineCacheCreateInfo::pname:flags,
7249e5c31af7Sopenharmony_cispecifying behavior of the pipeline cache, are:
7250e5c31af7Sopenharmony_ci
7251e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineCacheCreateFlagBits.adoc[]
7252e5c31af7Sopenharmony_ci
7253e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
7254e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT specifies
7255e5c31af7Sopenharmony_ci    that all commands that modify the created slink:VkPipelineCache will be
7256e5c31af7Sopenharmony_ci    <<fundamentals-threadingbehavior,externally synchronized>>.
7257e5c31af7Sopenharmony_ci    When set, the implementation may: skip any unnecessary processing needed
7258e5c31af7Sopenharmony_ci    to support simultaneous modification from multiple threads where
7259e5c31af7Sopenharmony_ci    allowed.
7260e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
7261e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7262e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT specifies that the new
7263e5c31af7Sopenharmony_ci    pipeline cache will be read-only.
7264e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT specifies
7265e5c31af7Sopenharmony_ci    that the application will maintain the contents of the memory pointed to
7266e5c31af7Sopenharmony_ci    by pname:pInitialData for the lifetime of the pipeline cache object
7267e5c31af7Sopenharmony_ci    created, avoiding the need for the implementation to make a copy of the
7268e5c31af7Sopenharmony_ci    data.
7269e5c31af7Sopenharmony_ci    The memory pointed to by pname:pInitialData can: be modified or released
7270e5c31af7Sopenharmony_ci    by the application only after any pipeline cache objects created using
7271e5c31af7Sopenharmony_ci    it have been destroyed.
7272e5c31af7Sopenharmony_ciifdef::hidden[]
7273e5c31af7Sopenharmony_ci// tag::scaddition[]
7274e5c31af7Sopenharmony_ci  * extending elink:VkPipelineCacheCreateFlagBits
7275e5c31af7Sopenharmony_ci  ** ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT <<SCID-1>>, <<SCID-8>>
7276e5c31af7Sopenharmony_ci  ** ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT <<SCID-2>>
7277e5c31af7Sopenharmony_ci// end::scaddition[]
7278e5c31af7Sopenharmony_ciendif::hidden[]
7279e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7280e5c31af7Sopenharmony_ci--
7281e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
7282e5c31af7Sopenharmony_ci
7283e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7284e5c31af7Sopenharmony_ciifdef::hidden[]
7285e5c31af7Sopenharmony_ci// tag::scremoved[]
7286e5c31af7Sopenharmony_ci  * fname:vkMergePipelineCaches, fname:vkGetPipelineCacheData <<SCID-1>>,
7287e5c31af7Sopenharmony_ci    <<SCID-8>>
7288e5c31af7Sopenharmony_ci// end::scremoved[]
7289e5c31af7Sopenharmony_ciendif::hidden[]
7290e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7291e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7292e5c31af7Sopenharmony_ci
7293e5c31af7Sopenharmony_ci
7294e5c31af7Sopenharmony_ci[[pipelines-cache-merge]]
7295e5c31af7Sopenharmony_ci=== Merging Pipeline Caches
7296e5c31af7Sopenharmony_ci
7297e5c31af7Sopenharmony_ci[open,refpage='vkMergePipelineCaches',desc='Combine the data stores of pipeline caches',type='protos']
7298e5c31af7Sopenharmony_ci--
7299e5c31af7Sopenharmony_ciPipeline cache objects can: be merged using the command:
7300e5c31af7Sopenharmony_ci
7301e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkMergePipelineCaches.adoc[]
7302e5c31af7Sopenharmony_ci
7303e5c31af7Sopenharmony_ci  * pname:device is the logical device that owns the pipeline cache objects.
7304e5c31af7Sopenharmony_ci  * pname:dstCache is the handle of the pipeline cache to merge results
7305e5c31af7Sopenharmony_ci    into.
7306e5c31af7Sopenharmony_ci  * pname:srcCacheCount is the length of the pname:pSrcCaches array.
7307e5c31af7Sopenharmony_ci  * pname:pSrcCaches is a pointer to an array of pipeline cache handles,
7308e5c31af7Sopenharmony_ci    which will be merged into pname:dstCache.
7309e5c31af7Sopenharmony_ci    The previous contents of pname:dstCache are included after the merge.
7310e5c31af7Sopenharmony_ci
7311e5c31af7Sopenharmony_ci[NOTE]
7312e5c31af7Sopenharmony_ci.Note
7313e5c31af7Sopenharmony_ci====
7314e5c31af7Sopenharmony_ciThe details of the merge operation are implementation-dependent, but
7315e5c31af7Sopenharmony_ciimplementations should: merge the contents of the specified pipelines and
7316e5c31af7Sopenharmony_ciprune duplicate entries.
7317e5c31af7Sopenharmony_ci====
7318e5c31af7Sopenharmony_ci
7319e5c31af7Sopenharmony_ci.Valid Usage
7320e5c31af7Sopenharmony_ci****
7321e5c31af7Sopenharmony_ci  * [[VUID-vkMergePipelineCaches-dstCache-00770]]
7322e5c31af7Sopenharmony_ci    pname:dstCache must: not appear in the list of source caches
7323e5c31af7Sopenharmony_ci****
7324e5c31af7Sopenharmony_ci
7325e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkMergePipelineCaches.adoc[]
7326e5c31af7Sopenharmony_ci--
7327e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7328e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7329e5c31af7Sopenharmony_ci
7330e5c31af7Sopenharmony_ci
7331e5c31af7Sopenharmony_ci[[pipelines-cache-retrieval]]
7332e5c31af7Sopenharmony_ci=== Retrieving Pipeline Cache Data
7333e5c31af7Sopenharmony_ci
7334e5c31af7Sopenharmony_ci[open,refpage='vkGetPipelineCacheData',desc='Get the data store from a pipeline cache',type='protos']
7335e5c31af7Sopenharmony_ci--
7336e5c31af7Sopenharmony_ciData can: be retrieved from a pipeline cache object using the command:
7337e5c31af7Sopenharmony_ci
7338e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPipelineCacheData.adoc[]
7339e5c31af7Sopenharmony_ci
7340e5c31af7Sopenharmony_ci  * pname:device is the logical device that owns the pipeline cache.
7341e5c31af7Sopenharmony_ci  * pname:pipelineCache is the pipeline cache to retrieve data from.
7342e5c31af7Sopenharmony_ci  * pname:pDataSize is a pointer to a code:size_t value related to the
7343e5c31af7Sopenharmony_ci    amount of data in the pipeline cache, as described below.
7344e5c31af7Sopenharmony_ci  * pname:pData is either `NULL` or a pointer to a buffer.
7345e5c31af7Sopenharmony_ci
7346e5c31af7Sopenharmony_ciIf pname:pData is `NULL`, then the maximum size of the data that can: be
7347e5c31af7Sopenharmony_ciretrieved from the pipeline cache, in bytes, is returned in pname:pDataSize.
7348e5c31af7Sopenharmony_ciOtherwise, pname:pDataSize must: point to a variable set by the user to the
7349e5c31af7Sopenharmony_cisize of the buffer, in bytes, pointed to by pname:pData, and on return the
7350e5c31af7Sopenharmony_civariable is overwritten with the amount of data actually written to
7351e5c31af7Sopenharmony_cipname:pData.
7352e5c31af7Sopenharmony_ciIf pname:pDataSize is less than the maximum size that can: be retrieved by
7353e5c31af7Sopenharmony_cithe pipeline cache, at most pname:pDataSize bytes will be written to
7354e5c31af7Sopenharmony_cipname:pData, and ename:VK_INCOMPLETE will be returned instead of
7355e5c31af7Sopenharmony_ciename:VK_SUCCESS, to indicate that not all of the pipeline cache was
7356e5c31af7Sopenharmony_cireturned.
7357e5c31af7Sopenharmony_ci
7358e5c31af7Sopenharmony_ciAny data written to pname:pData is valid and can: be provided as the
7359e5c31af7Sopenharmony_cipname:pInitialData member of the slink:VkPipelineCacheCreateInfo structure
7360e5c31af7Sopenharmony_cipassed to fname:vkCreatePipelineCache.
7361e5c31af7Sopenharmony_ci
7362e5c31af7Sopenharmony_ciTwo calls to fname:vkGetPipelineCacheData with the same parameters must:
7363e5c31af7Sopenharmony_ciretrieve the same data unless a command that modifies the contents of the
7364e5c31af7Sopenharmony_cicache is called between them.
7365e5c31af7Sopenharmony_ci
7366e5c31af7Sopenharmony_ciThe initial bytes written to pname:pData must: be a header as described in
7367e5c31af7Sopenharmony_cithe <<pipelines-cache-header, Pipeline Cache Header>> section.
7368e5c31af7Sopenharmony_ci
7369e5c31af7Sopenharmony_ciIf pname:pDataSize is less than what is necessary to store this header,
7370e5c31af7Sopenharmony_cinothing will be written to pname:pData and zero will be written to
7371e5c31af7Sopenharmony_cipname:pDataSize.
7372e5c31af7Sopenharmony_ci
7373e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPipelineCacheData.adoc[]
7374e5c31af7Sopenharmony_ci--
7375e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7376e5c31af7Sopenharmony_ci
7377e5c31af7Sopenharmony_ci
7378e5c31af7Sopenharmony_ci[[pipelines-cache-header]]
7379e5c31af7Sopenharmony_ci=== Pipeline Cache Header
7380e5c31af7Sopenharmony_ci
7381e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7382e5c31af7Sopenharmony_ciApplications must: load data from <<pipelines-offline-compilation,offline
7383e5c31af7Sopenharmony_cicompiled>> pipeline caches into pipeline cache objects.
7384e5c31af7Sopenharmony_ciThe results of pipeline compilations may: depend on the vendor ID, device
7385e5c31af7Sopenharmony_ciID, driver version, and other details of the target device.
7386e5c31af7Sopenharmony_ciTo allow detection of pipeline cache data that is incompatible with the
7387e5c31af7Sopenharmony_cidevice, the pipeline cache data must: begin with a valid pipeline cache
7388e5c31af7Sopenharmony_ciheader.
7389e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7390e5c31af7Sopenharmony_ci
7391e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7392e5c31af7Sopenharmony_ciApplications can: store the data retrieved from the pipeline cache, and use
7393e5c31af7Sopenharmony_cithese data, possibly in a future run of the application, to populate new
7394e5c31af7Sopenharmony_cipipeline cache objects.
7395e5c31af7Sopenharmony_ciThe results of pipeline compiles, however, may: depend on the vendor ID,
7396e5c31af7Sopenharmony_cidevice ID, driver version, and other details of the device.
7397e5c31af7Sopenharmony_ciTo enable applications to detect when previously retrieved data is
7398e5c31af7Sopenharmony_ciincompatible with the device, the pipeline cache data must: begin with a
7399e5c31af7Sopenharmony_civalid pipeline cache header.
7400e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7401e5c31af7Sopenharmony_ci
7402e5c31af7Sopenharmony_ci[NOTE]
7403e5c31af7Sopenharmony_ci.Note
7404e5c31af7Sopenharmony_ci====
7405e5c31af7Sopenharmony_ciStructures described in this section are not part of the Vulkan API and are
7406e5c31af7Sopenharmony_cionly used to describe the representation of data elements in pipeline cache
7407e5c31af7Sopenharmony_cidata.
7408e5c31af7Sopenharmony_ciAccordingly, the valid usage clauses defined for structures defined in this
7409e5c31af7Sopenharmony_cisection do not define valid usage conditions for APIs accepting pipeline
7410e5c31af7Sopenharmony_cicache data as input, as providing invalid pipeline cache data as input to
7411e5c31af7Sopenharmony_ciany Vulkan API commands will result
7412e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7413e5c31af7Sopenharmony_ciin the provided pipeline cache data being ignored.
7414e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7415e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7416e5c31af7Sopenharmony_ciin the runtime error ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA.
7417e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7418e5c31af7Sopenharmony_ci====
7419e5c31af7Sopenharmony_ci
7420e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheHeaderVersionOne',desc='Structure describing the layout of the pipeline cache header',type='structs']
7421e5c31af7Sopenharmony_ci--
7422e5c31af7Sopenharmony_ciVersion one of the pipeline cache header is defined as:
7423e5c31af7Sopenharmony_ci
7424e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineCacheHeaderVersionOne.adoc[]
7425e5c31af7Sopenharmony_ci
7426e5c31af7Sopenharmony_ci  * pname:headerSize is the length in bytes of the pipeline cache header.
7427e5c31af7Sopenharmony_ci  * pname:headerVersion is a elink:VkPipelineCacheHeaderVersion value
7428e5c31af7Sopenharmony_ci    specifying the version of the header.
7429e5c31af7Sopenharmony_ci    A consumer of the pipeline cache should: use the cache version to
7430e5c31af7Sopenharmony_ci    interpret the remainder of the cache header.
7431e5c31af7Sopenharmony_ci  * pname:vendorID is the sname:VkPhysicalDeviceProperties::pname:vendorID
7432e5c31af7Sopenharmony_ci    of the implementation.
7433e5c31af7Sopenharmony_ci  * pname:deviceID is the sname:VkPhysicalDeviceProperties::pname:deviceID
7434e5c31af7Sopenharmony_ci    of the implementation.
7435e5c31af7Sopenharmony_ci  * pname:pipelineCacheUUID is the
7436e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceProperties::pname:pipelineCacheUUID of the
7437e5c31af7Sopenharmony_ci    implementation.
7438e5c31af7Sopenharmony_ci
7439e5c31af7Sopenharmony_ciUnlike most structures declared by the Vulkan API, all fields of this
7440e5c31af7Sopenharmony_cistructure are written with the least significant byte first, regardless of
7441e5c31af7Sopenharmony_cihost byte-order.
7442e5c31af7Sopenharmony_ci
7443e5c31af7Sopenharmony_ciThe C language specification does not define the packing of structure
7444e5c31af7Sopenharmony_cimembers.
7445e5c31af7Sopenharmony_ciThis layout assumes tight structure member packing, with members laid out in
7446e5c31af7Sopenharmony_cithe order listed in the structure, and the intended size of the structure is
7447e5c31af7Sopenharmony_ci32 bytes.
7448e5c31af7Sopenharmony_ciIf a compiler produces code that diverges from that pattern, applications
7449e5c31af7Sopenharmony_cimust: employ another method to set values at the correct offsets.
7450e5c31af7Sopenharmony_ci
7451e5c31af7Sopenharmony_ci.Valid Usage
7452e5c31af7Sopenharmony_ci****
7453e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7454e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheHeaderVersionOne-headerSize-04967]]
7455e5c31af7Sopenharmony_ci    pname:headerSize must: be 32
7456e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheHeaderVersionOne-headerVersion-04968]]
7457e5c31af7Sopenharmony_ci    pname:headerVersion must: be ename:VK_PIPELINE_CACHE_HEADER_VERSION_ONE
7458e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7459e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7460e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheHeaderVersionOne-headerSize-05075]]
7461e5c31af7Sopenharmony_ci    pname:headerSize must: be 56
7462e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheHeaderVersionOne-headerVersion-05076]]
7463e5c31af7Sopenharmony_ci    pname:headerVersion must: be
7464e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE
7465e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7466e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheHeaderVersionOne-headerSize-08990]]
7467e5c31af7Sopenharmony_ci    pname:headerSize must: not exceed the size of the pipeline cache
7468e5c31af7Sopenharmony_ci****
7469e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7470e5c31af7Sopenharmony_ciifdef::hidden[]
7471e5c31af7Sopenharmony_ci// tag::scdeviation[]
7472e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheHeaderVersionOne::pname:headerSize must: be 56
7473e5c31af7Sopenharmony_ci    <<SCID-1>>.
7474e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheHeaderVersionOne::pname:headerVersion must: be
7475e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE <<SCID-1>>.
7476e5c31af7Sopenharmony_ci// end::scdeviation[]
7477e5c31af7Sopenharmony_ciendif::hidden[]
7478e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7479e5c31af7Sopenharmony_ci
7480e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineCacheHeaderVersionOne.adoc[]
7481e5c31af7Sopenharmony_ci--
7482e5c31af7Sopenharmony_ci
7483e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheHeaderVersion',desc='Encode pipeline cache version',type='enums',xrefs='vkCreatePipelineCache vkGetPipelineCacheData']
7484e5c31af7Sopenharmony_ci--
7485e5c31af7Sopenharmony_ciPossible values of the pname:headerVersion value of the pipeline cache
7486e5c31af7Sopenharmony_ciheader are:
7487e5c31af7Sopenharmony_ci
7488e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineCacheHeaderVersion.adoc[]
7489e5c31af7Sopenharmony_ci
7490e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CACHE_HEADER_VERSION_ONE specifies version one of the
7491e5c31af7Sopenharmony_ci    pipeline cache, described by slink:VkPipelineCacheHeaderVersionOne.
7492e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7493e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE specifies
7494e5c31af7Sopenharmony_ci    version one of the pipeline cache for Vulkan SC, described by
7495e5c31af7Sopenharmony_ci    slink:VkPipelineCacheHeaderVersionSafetyCriticalOne.
7496e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7497e5c31af7Sopenharmony_ci--
7498e5c31af7Sopenharmony_ci
7499e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7500e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheHeaderVersionSafetyCriticalOne',desc='Structure describing the layout of the pipeline cache header for safety critical',type='structs']
7501e5c31af7Sopenharmony_ci--
7502e5c31af7Sopenharmony_ciVersion one of the pipeline cache header for Vulkan SC is defined as:
7503e5c31af7Sopenharmony_ci
7504e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineCacheHeaderVersionSafetyCriticalOne.adoc[]
7505e5c31af7Sopenharmony_ci
7506e5c31af7Sopenharmony_ci  * pname:headerVersionOne is a slink:VkPipelineCacheHeaderVersionOne
7507e5c31af7Sopenharmony_ci    structure.
7508e5c31af7Sopenharmony_ci  * pname:validationVersion is a elink:VkPipelineCacheValidationVersion enum
7509e5c31af7Sopenharmony_ci    value specifying the version of any validation information that is
7510e5c31af7Sopenharmony_ci    included in this pipeline cache.
7511e5c31af7Sopenharmony_ci  * pname:implementationData is 4 bytes of padding to ensure structure
7512e5c31af7Sopenharmony_ci    members are consistently aligned on all platforms.
7513e5c31af7Sopenharmony_ci    The contents of this field may: be used for implementation-specific
7514e5c31af7Sopenharmony_ci    information.
7515e5c31af7Sopenharmony_ci  * pname:pipelineIndexCount is the number of entries contained in the
7516e5c31af7Sopenharmony_ci    pipeline cache index.
7517e5c31af7Sopenharmony_ci  * pname:pipelineIndexStride is the number of bytes between consecutive
7518e5c31af7Sopenharmony_ci    pipeline cache index entries.
7519e5c31af7Sopenharmony_ci  * pname:pipelineIndexOffset is the offset in bytes from the beginning of
7520e5c31af7Sopenharmony_ci    the pipeline cache header to the pipeline cache index.
7521e5c31af7Sopenharmony_ci
7522e5c31af7Sopenharmony_ciThe <<pipelines-cache-index, pipeline cache index>> consists of
7523e5c31af7Sopenharmony_cipname:pipelineIndexCount slink:VkPipelineCacheSafetyCriticalIndexEntry
7524e5c31af7Sopenharmony_cistructures containing an index of all the pipelines in this cache.
7525e5c31af7Sopenharmony_ciThe pipeline cache index is located starting at pname:pipelineIndexOffset
7526e5c31af7Sopenharmony_cibytes into the cache and the location of pipeline code:i is calculated as:
7527e5c31af7Sopenharmony_ci[eq]#pname:pipelineIndexOffset + code:i {times} pname:pipelineIndexStride#.
7528e5c31af7Sopenharmony_ciThe slink:VkPipelineCacheSafetyCriticalIndexEntry structures may: not be
7529e5c31af7Sopenharmony_citightly packed, enabling additional implementation-specific data to be
7530e5c31af7Sopenharmony_cistored with each entry, or for future extensibility.
7531e5c31af7Sopenharmony_ci
7532e5c31af7Sopenharmony_ci[NOTE]
7533e5c31af7Sopenharmony_ci.Note
7534e5c31af7Sopenharmony_ci====
7535e5c31af7Sopenharmony_ciBecause the pipeline cache index is keyed by pipeline identifier,
7536e5c31af7Sopenharmony_ciapplications and offline compilers must ensure that there are no pipelines
7537e5c31af7Sopenharmony_ciwith identical pipeline identifiers in the same pipeline cache.
7538e5c31af7Sopenharmony_ci====
7539e5c31af7Sopenharmony_ci
7540e5c31af7Sopenharmony_ciUnlike most structures declared by the Vulkan API, all fields of this
7541e5c31af7Sopenharmony_cistructure are written with the least significant byte first, regardless of
7542e5c31af7Sopenharmony_cihost byte-order.
7543e5c31af7Sopenharmony_ci
7544e5c31af7Sopenharmony_ciThe C language specification does not define the packing of structure
7545e5c31af7Sopenharmony_cimembers.
7546e5c31af7Sopenharmony_ciThis layout assumes tight structure member packing, with members laid out in
7547e5c31af7Sopenharmony_cithe order listed in the structure, and the intended size of the structure is
7548e5c31af7Sopenharmony_ci56 bytes.
7549e5c31af7Sopenharmony_ciIf a compiler produces code that diverges from that pattern, applications
7550e5c31af7Sopenharmony_cimust: employ another method to set values at the correct offsets.
7551e5c31af7Sopenharmony_ci
7552e5c31af7Sopenharmony_ci.Valid Usage
7553e5c31af7Sopenharmony_ci****
7554e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheHeaderVersionSafetyCriticalOne-validationVersion-05077]]
7555e5c31af7Sopenharmony_ci    pname:validationVersion must: be
7556e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CACHE_VALIDATION_VERSION_SAFETY_CRITICAL_ONE
7557e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheHeaderVersionSafetyCriticalOne-pipelineIndexStride-05078]]
7558e5c31af7Sopenharmony_ci    pname:pipelineIndexStride must: be greater than or equal to 56 (the size
7559e5c31af7Sopenharmony_ci    of the slink:VkPipelineCacheSafetyCriticalIndexEntry structure)
7560e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheHeaderVersionSafetyCriticalOne-pipelineIndexOffset-05079]]
7561e5c31af7Sopenharmony_ci    [eq]#pname:pipelineIndexOffset + pname:pipelineIndexCount {times}
7562e5c31af7Sopenharmony_ci    pname:pipelineIndexStride# must: not exceed the size of the pipeline
7563e5c31af7Sopenharmony_ci    cache
7564e5c31af7Sopenharmony_ci****
7565e5c31af7Sopenharmony_ci
7566e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineCacheHeaderVersionSafetyCriticalOne.adoc[]
7567e5c31af7Sopenharmony_ci--
7568e5c31af7Sopenharmony_ci
7569e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheValidationVersion',desc='Encode pipeline cache validation version',type='enums']
7570e5c31af7Sopenharmony_ci--
7571e5c31af7Sopenharmony_ciThe elink:VkPipelineCacheValidationVersion enumeration determines the
7572e5c31af7Sopenharmony_cicontents of the pipeline cache validation information.
7573e5c31af7Sopenharmony_ciPossible values are:
7574e5c31af7Sopenharmony_ci
7575e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineCacheValidationVersion.adoc[]
7576e5c31af7Sopenharmony_ci
7577e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_CACHE_VALIDATION_VERSION_SAFETY_CRITICAL_ONE specifies
7578e5c31af7Sopenharmony_ci    version one of the pipeline cache validation information for Vulkan SC.
7579e5c31af7Sopenharmony_ci--
7580e5c31af7Sopenharmony_ci
7581e5c31af7Sopenharmony_ci[[pipelines-cache-index]]
7582e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheSafetyCriticalIndexEntry',desc='Structure describing the pipeline cache index entry',type='structs']
7583e5c31af7Sopenharmony_ci--
7584e5c31af7Sopenharmony_ciEach pipeline cache index entry consists of a
7585e5c31af7Sopenharmony_cisname:VkPipelineCacheSafetyCriticalIndexEntry structure:
7586e5c31af7Sopenharmony_ci
7587e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineCacheSafetyCriticalIndexEntry.adoc[]
7588e5c31af7Sopenharmony_ci
7589e5c31af7Sopenharmony_ci  * pname:pipelineIdentifier is the <<pipelines-identifier, pipeline
7590e5c31af7Sopenharmony_ci    identifier>> indicating which pipeline the information is associated
7591e5c31af7Sopenharmony_ci    with.
7592e5c31af7Sopenharmony_ci  * pname:pipelineMemorySize is the number of bytes of pipeline memory
7593e5c31af7Sopenharmony_ci    required for this pipeline.
7594e5c31af7Sopenharmony_ci    This is the minimum value that can: be successfully used for
7595e5c31af7Sopenharmony_ci    slink:VkPipelineOfflineCreateInfo::pname:poolEntrySize when this
7596e5c31af7Sopenharmony_ci    pipeline is used.
7597e5c31af7Sopenharmony_ci  * pname:jsonSize is the size in bytes of the pipeline JSON data
7598e5c31af7Sopenharmony_ci    representing the pipeline state for this pipeline.
7599e5c31af7Sopenharmony_ci    This value may: be zero, indicating the JSON data is not present in the
7600e5c31af7Sopenharmony_ci    pipeline cache for this pipeline.
7601e5c31af7Sopenharmony_ci  * pname:jsonOffset is the offset in bytes from the beginning of the
7602e5c31af7Sopenharmony_ci    pipeline cache header to the pipeline JSON data for this pipeline.
7603e5c31af7Sopenharmony_ci    This value must: be zero if the JSON data is not present in the pipeline
7604e5c31af7Sopenharmony_ci    cache for this pipeline.
7605e5c31af7Sopenharmony_ci  * pname:stageIndexCount is the number of entries in the pipeline cache
7606e5c31af7Sopenharmony_ci    stage validation index for this pipeline.
7607e5c31af7Sopenharmony_ci    This value may: be zero, indicating that no stage validation information
7608e5c31af7Sopenharmony_ci    is present in the pipeline cache for this pipeline.
7609e5c31af7Sopenharmony_ci  * pname:stageIndexStride is the number of bytes between consecutive stage
7610e5c31af7Sopenharmony_ci    validation index entries.
7611e5c31af7Sopenharmony_ci  * pname:stageIndexOffset is the offset in bytes from the beginning of the
7612e5c31af7Sopenharmony_ci    pipeline cache header to the <<pipelines-cache-stage-validation-index,
7613e5c31af7Sopenharmony_ci    stage validation index>> for this pipeline.
7614e5c31af7Sopenharmony_ci    This value must: be zero if no stage validation information is present
7615e5c31af7Sopenharmony_ci    for this pipeline.
7616e5c31af7Sopenharmony_ci
7617e5c31af7Sopenharmony_ciThe JSON data and the stage validation index are optionally: included in the
7618e5c31af7Sopenharmony_cipipeline cache index entry.
7619e5c31af7Sopenharmony_ciThey are only intended to be used for validation and debugging.
7620e5c31af7Sopenharmony_ciIf present they must: include both the JSON data and the corresponding
7621e5c31af7Sopenharmony_ciSPIR-V modules that were used by the offline compiler to compile the
7622e5c31af7Sopenharmony_cipipeline cache entry.
7623e5c31af7Sopenharmony_ci
7624e5c31af7Sopenharmony_ciThe data at pname:jsonOffset consists of a byte stream of pname:jsonSize
7625e5c31af7Sopenharmony_cibytes of UTF-8 encoded JSON that was used by the
7626e5c31af7Sopenharmony_ci<<pipelines-offline-compilation, offline pipeline compiler>> to create this
7627e5c31af7Sopenharmony_cipipeline cache entry.
7628e5c31af7Sopenharmony_ci
7629e5c31af7Sopenharmony_ciThe <<pipelines-cache-stage-validation-index, stage validation index>>
7630e5c31af7Sopenharmony_ciconsists of pname:stageIndexCount
7631e5c31af7Sopenharmony_cislink:VkPipelineCacheStageValidationIndexEntry structures which provide the
7632e5c31af7Sopenharmony_ciSPIR-V modules used by this pipeline and these are provided in the same
7633e5c31af7Sopenharmony_ciorder as provided to the slink:VkPipelineShaderStageCreateInfo structure(s)
7634e5c31af7Sopenharmony_ciin the stext:Vk*PipelineCreateInfo structure for this pipeline.
7635e5c31af7Sopenharmony_ciThe stage validation index is located at pname:stageIndexOffset bytes into
7636e5c31af7Sopenharmony_cithe cache and the location of stage code:i is calculated as:
7637e5c31af7Sopenharmony_ci[eq]#pname:stageIndexOffset {plus} code:i {times} pname:stageIndexStride#.
7638e5c31af7Sopenharmony_ciThe slink:VkPipelineCacheStageValidationIndexEntry structures may: not be
7639e5c31af7Sopenharmony_citightly packed, enabling additional implementation-specific data to be
7640e5c31af7Sopenharmony_cistored with each entry, or for future extensibility.
7641e5c31af7Sopenharmony_ci
7642e5c31af7Sopenharmony_ciUnlike most structures declared by the Vulkan API, all fields of this
7643e5c31af7Sopenharmony_cistructure are written with the least significant byte first, regardless of
7644e5c31af7Sopenharmony_cihost byte-order.
7645e5c31af7Sopenharmony_ci
7646e5c31af7Sopenharmony_ciThe C language specification does not define the packing of structure
7647e5c31af7Sopenharmony_cimembers.
7648e5c31af7Sopenharmony_ciThis layout assumes tight structure member packing, with members laid out in
7649e5c31af7Sopenharmony_cithe order listed in the structure, and the intended size of the structure is
7650e5c31af7Sopenharmony_ci56 bytes.
7651e5c31af7Sopenharmony_ciIf a compiler produces code that diverges from that pattern, applications
7652e5c31af7Sopenharmony_cimust: employ another method to set values at the correct offsets.
7653e5c31af7Sopenharmony_ci
7654e5c31af7Sopenharmony_ci.Valid Usage
7655e5c31af7Sopenharmony_ci****
7656e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-jsonSize-05080]]
7657e5c31af7Sopenharmony_ci    If pname:jsonSize is 0, pname:jsonOffset must: be 0
7658e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-jsonSize-05081]]
7659e5c31af7Sopenharmony_ci    If pname:jsonSize is 0, pname:stageIndexCount must: be 0
7660e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-jsonSize-08991]]
7661e5c31af7Sopenharmony_ci    If pname:jsonSize is not 0, [eq]#pname:jsonOffset {plus} pname:jsonSize#
7662e5c31af7Sopenharmony_ci    must: not exceed the size of the pipeline cache
7663e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-stageIndexCount-05082]]
7664e5c31af7Sopenharmony_ci    If pname:stageIndexCount is 0, pname:stageIndexOffset and
7665e5c31af7Sopenharmony_ci    pname:stageIndexStride must: be 0
7666e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-stageIndexCount-05083]]
7667e5c31af7Sopenharmony_ci    If pname:stageIndexCount is not 0, pname:stageIndexStride must: be
7668e5c31af7Sopenharmony_ci    greater than or equal to 16 (the size of the
7669e5c31af7Sopenharmony_ci    slink:VkPipelineCacheStageValidationIndexEntry structure)
7670e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-stageIndexCount-05084]]
7671e5c31af7Sopenharmony_ci    If pname:stageIndexCount is not 0, [eq]#pname:stageIndexOffset {plus}
7672e5c31af7Sopenharmony_ci    pname:stageIndexCount {times} pname:stageIndexStride# must: not exceed
7673e5c31af7Sopenharmony_ci    the size of the pipeline cache
7674e5c31af7Sopenharmony_ci****
7675e5c31af7Sopenharmony_ci
7676e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineCacheSafetyCriticalIndexEntry.adoc[]
7677e5c31af7Sopenharmony_ci--
7678e5c31af7Sopenharmony_ci
7679e5c31af7Sopenharmony_ci[[pipelines-cache-stage-validation-index]]
7680e5c31af7Sopenharmony_ci[open,refpage='VkPipelineCacheStageValidationIndexEntry',desc='Structure describing the pipeline cache stage validation index',type='structs']
7681e5c31af7Sopenharmony_ci--
7682e5c31af7Sopenharmony_ciEach pipeline cache stage validation index entry consists of a
7683e5c31af7Sopenharmony_cisname:VkPipelineCacheStageValidationIndexEntry structure:
7684e5c31af7Sopenharmony_ci
7685e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineCacheStageValidationIndexEntry.adoc[]
7686e5c31af7Sopenharmony_ci
7687e5c31af7Sopenharmony_ci  * pname:codeSize is the size in bytes of the SPIR-V module for this
7688e5c31af7Sopenharmony_ci    pipeline stage.
7689e5c31af7Sopenharmony_ci  * pname:codeOffset is the offset in bytes from the beginning of the
7690e5c31af7Sopenharmony_ci    pipeline cache header to the SPIR-V module for this pipeline stage.
7691e5c31af7Sopenharmony_ci
7692e5c31af7Sopenharmony_ciThe data at pname:codeOffset consists of pname:codeSize bytes of SPIR-V
7693e5c31af7Sopenharmony_cimodule as described in <<spirvenv, Appendix A>> that was used by the
7694e5c31af7Sopenharmony_ci<<pipelines-offline-compilation, offline pipeline compiler>> for this shader
7695e5c31af7Sopenharmony_cistage when creating this pipeline cache entry.
7696e5c31af7Sopenharmony_ci
7697e5c31af7Sopenharmony_ciUnlike most structures declared by the Vulkan API, all fields of this
7698e5c31af7Sopenharmony_cistructure are written with the least significant byte first, regardless of
7699e5c31af7Sopenharmony_cihost byte-order.
7700e5c31af7Sopenharmony_ci
7701e5c31af7Sopenharmony_ciThe C language specification does not define the packing of structure
7702e5c31af7Sopenharmony_cimembers.
7703e5c31af7Sopenharmony_ciThis layout assumes tight structure member packing, with members laid out in
7704e5c31af7Sopenharmony_cithe order listed in the structure, and the intended size of the structure is
7705e5c31af7Sopenharmony_ci16 bytes.
7706e5c31af7Sopenharmony_ciIf a compiler produces code that diverges from that pattern, applications
7707e5c31af7Sopenharmony_cimust: employ another method to set values at the correct offsets.
7708e5c31af7Sopenharmony_ci
7709e5c31af7Sopenharmony_ci.Valid Usage
7710e5c31af7Sopenharmony_ci****
7711e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheStageValidationIndexEntry-codeSize-05085]]
7712e5c31af7Sopenharmony_ci    pname:codeSize must: be greater than 0
7713e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheStageValidationIndexEntry-codeSize-05086]]
7714e5c31af7Sopenharmony_ci    pname:codeSize must: be a multiple of 4
7715e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineCacheStageValidationIndexEntry-codeOffset-05087]]
7716e5c31af7Sopenharmony_ci    [eq]#pname:codeOffset {plus} pname:codeSize# must: not exceed the size
7717e5c31af7Sopenharmony_ci    of the pipeline cache
7718e5c31af7Sopenharmony_ci****
7719e5c31af7Sopenharmony_ci
7720e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineCacheStageValidationIndexEntry.adoc[]
7721e5c31af7Sopenharmony_ci--
7722e5c31af7Sopenharmony_ci
7723e5c31af7Sopenharmony_ciifdef::hidden[]
7724e5c31af7Sopenharmony_ci// tag::scaddition[]
7725e5c31af7Sopenharmony_ci  * extending elink:VkPipelineCacheHeaderVersion
7726e5c31af7Sopenharmony_ci  ** ename:VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE <<SCID-1>>,
7727e5c31af7Sopenharmony_ci     <<SCID-8>>
7728e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheHeaderVersionSafetyCriticalOne <<SCID-1>>,
7729e5c31af7Sopenharmony_ci    <<SCID-8>>
7730e5c31af7Sopenharmony_ci  * elink:VkPipelineCacheValidationVersion <<SCID-1>>, <<SCID-8>>
7731e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheSafetyCriticalIndexEntry <<SCID-1>>, <<SCID-8>>
7732e5c31af7Sopenharmony_ci  * slink:VkPipelineCacheStageValidationIndexEntry<<SCID-1>>, <<SCID-8>>
7733e5c31af7Sopenharmony_ci// end::scaddition[]
7734e5c31af7Sopenharmony_ciendif::hidden[]
7735e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7736e5c31af7Sopenharmony_ci
7737e5c31af7Sopenharmony_ci
7738e5c31af7Sopenharmony_ci[[pipelines-cache-destroy]]
7739e5c31af7Sopenharmony_ci=== Destroying a Pipeline Cache
7740e5c31af7Sopenharmony_ci
7741e5c31af7Sopenharmony_ci[open,refpage='vkDestroyPipelineCache',desc='Destroy a pipeline cache object',type='protos']
7742e5c31af7Sopenharmony_ci--
7743e5c31af7Sopenharmony_ciTo destroy a pipeline cache, call:
7744e5c31af7Sopenharmony_ci
7745e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkDestroyPipelineCache.adoc[]
7746e5c31af7Sopenharmony_ci
7747e5c31af7Sopenharmony_ci  * pname:device is the logical device that destroys the pipeline cache
7748e5c31af7Sopenharmony_ci    object.
7749e5c31af7Sopenharmony_ci  * pname:pipelineCache is the handle of the pipeline cache to destroy.
7750e5c31af7Sopenharmony_ci  * pname:pAllocator controls host memory allocation as described in the
7751e5c31af7Sopenharmony_ci    <<memory-allocation, Memory Allocation>> chapter.
7752e5c31af7Sopenharmony_ci
7753e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7754e5c31af7Sopenharmony_ci.Valid Usage
7755e5c31af7Sopenharmony_ci****
7756e5c31af7Sopenharmony_ci  * [[VUID-vkDestroyPipelineCache-pipelineCache-00771]]
7757e5c31af7Sopenharmony_ci    If sname:VkAllocationCallbacks were provided when pname:pipelineCache
7758e5c31af7Sopenharmony_ci    was created, a compatible set of callbacks must: be provided here
7759e5c31af7Sopenharmony_ci  * [[VUID-vkDestroyPipelineCache-pipelineCache-00772]]
7760e5c31af7Sopenharmony_ci    If no sname:VkAllocationCallbacks were provided when pname:pipelineCache
7761e5c31af7Sopenharmony_ci    was created, pname:pAllocator must: be `NULL`
7762e5c31af7Sopenharmony_ci****
7763e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7764e5c31af7Sopenharmony_ci
7765e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkDestroyPipelineCache.adoc[]
7766e5c31af7Sopenharmony_ci--
7767e5c31af7Sopenharmony_ci
7768e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7769e5c31af7Sopenharmony_ci[[pipelines-offline-compilation]]
7770e5c31af7Sopenharmony_ci== Offline Pipeline Compilation
7771e5c31af7Sopenharmony_ci
7772e5c31af7Sopenharmony_ciIn Vulkan SC, the pipeline compilation process occurs offline <<SCID-8>>.
7773e5c31af7Sopenharmony_ci
7774e5c31af7Sopenharmony_ciThe <<shader-modules,SPIR-V shader module>> and pipeline state are supplied
7775e5c31af7Sopenharmony_cito an offline pipeline cache compiler which creates a pipeline cache entry
7776e5c31af7Sopenharmony_cifor the pipeline.
7777e5c31af7Sopenharmony_ciThe set of pipeline cache entries are combined offline into one or more
7778e5c31af7Sopenharmony_ci<<pipelines-cache, pipeline caches>>.
7779e5c31af7Sopenharmony_ciAt application run-time, the offline generated pipeline cache is provided to
7780e5c31af7Sopenharmony_cidevice creation as part of the slink:VkDeviceObjectReservationCreateInfo
7781e5c31af7Sopenharmony_cistructure and then loaded into a slink:VkPipelineCache object by the
7782e5c31af7Sopenharmony_ciapplication.
7783e5c31af7Sopenharmony_ciThe device, pipeline, and pipeline cache creation functions can: extract
7784e5c31af7Sopenharmony_ciimplementation-specific information from the pipeline cache.
7785e5c31af7Sopenharmony_ciThe specific pipeline to be loaded from the cache is specified at pipeline
7786e5c31af7Sopenharmony_cicreation time using a <<pipelines-identifier,pipeline identifier>>.
7787e5c31af7Sopenharmony_ciThe pipeline state that is provided at runtime to pipeline creation must:
7788e5c31af7Sopenharmony_cimatch the state that was specified to the offline pipeline cache compiler
7789e5c31af7Sopenharmony_ciwhen the pipeline cache entry was created offline (with the exception of the
7790e5c31af7Sopenharmony_cislink:VkPipelineShaderStageCreateInfo structure).
7791e5c31af7Sopenharmony_ci
7792e5c31af7Sopenharmony_ciIn order to assist with the specification of pipeline state for the offline
7793e5c31af7Sopenharmony_cipipeline cache compiler, Khronos has defined a _pipeline JSON schema_ to
7794e5c31af7Sopenharmony_cirepresent the pipeline state required to compile a SPIR-V module to
7795e5c31af7Sopenharmony_cidevice-specific machine code and a set of utilities to help with reading and
7796e5c31af7Sopenharmony_ciwriting of the JSON files.
7797e5c31af7Sopenharmony_ciSee https://github.com/KhronosGroup/VulkanSC-Docs/wiki/JSON-schema for more
7798e5c31af7Sopenharmony_ciinformation.
7799e5c31af7Sopenharmony_ci
7800e5c31af7Sopenharmony_ci[[pipelines-memory-reservation]]
7801e5c31af7Sopenharmony_ci== Pipeline Memory Reservation
7802e5c31af7Sopenharmony_ci
7803e5c31af7Sopenharmony_ciPipeline memory is allocated from a pool that is reserved at device creation
7804e5c31af7Sopenharmony_citime.
7805e5c31af7Sopenharmony_ciThe offline pipeline cache compiler writes the pipeline memory size
7806e5c31af7Sopenharmony_cirequirements for each pipeline into the pipeline's
7807e5c31af7Sopenharmony_cislink:VkPipelineCacheSafetyCriticalIndexEntry::pname:pipelineMemorySize
7808e5c31af7Sopenharmony_cientry in the <<pipelines-cache-index,pipeline cache index>>.
7809e5c31af7Sopenharmony_ciThe offline pipeline cache compiler may: also report it separately.
7810e5c31af7Sopenharmony_ciThe elements of
7811e5c31af7Sopenharmony_cislink:VkDeviceObjectReservationCreateInfo::pname:pPipelinePoolSizes are
7812e5c31af7Sopenharmony_cirequests for pname:poolEntryCount pool entries each of pool size
7813e5c31af7Sopenharmony_cipname:poolEntrySize, and any pipeline with a
7814e5c31af7Sopenharmony_cislink:VkPipelineCacheSafetyCriticalIndexEntry::pname:pipelineMemorySize less
7815e5c31af7Sopenharmony_cithan or equal to slink:VkPipelineOfflineCreateInfo::pname:poolEntrySize can:
7816e5c31af7Sopenharmony_cibe placed in one of those pool entries.
7817e5c31af7Sopenharmony_ciThe application should: request a set of pool sizes that best suits its
7818e5c31af7Sopenharmony_cianticipated worst-case usage.
7819e5c31af7Sopenharmony_ci
7820e5c31af7Sopenharmony_ciOn implementations where
7821e5c31af7Sopenharmony_cislink:VkPhysicalDeviceVulkanSC10Properties::pname:recyclePipelineMemory is
7822e5c31af7Sopenharmony_ciename:VK_FALSE, the memory for the pipeline pool is not recycled when a
7823e5c31af7Sopenharmony_cipipeline is destroyed, and once an entry has been used it cannot: be reused.
7824e5c31af7Sopenharmony_ciOn implementations where
7825e5c31af7Sopenharmony_cislink:VkPhysicalDeviceVulkanSC10Properties::pname:recyclePipelineMemory is
7826e5c31af7Sopenharmony_ciename:VK_TRUE, the memory for the pipeline pool is recycled when a pipeline
7827e5c31af7Sopenharmony_ciis destroyed, and the entry it was using becomes available to be reused.
7828e5c31af7Sopenharmony_ci
7829e5c31af7Sopenharmony_ci[[pipelines-identifier]]
7830e5c31af7Sopenharmony_ci== Pipeline Identifier
7831e5c31af7Sopenharmony_ci
7832e5c31af7Sopenharmony_ciA _pipeline identifier_ is an identifier that can be used to identify a
7833e5c31af7Sopenharmony_cispecific pipeline independently from the pipeline description, shader stages
7834e5c31af7Sopenharmony_ciand any relevant fixed-function stages, that were used to create the
7835e5c31af7Sopenharmony_cipipeline object.
7836e5c31af7Sopenharmony_ci
7837e5c31af7Sopenharmony_ciThe slink:VkPipelineOfflineCreateInfo structure allows an identifier to be
7838e5c31af7Sopenharmony_cispecified for the pipeline at pipeline creation via the pname:pNext field of
7839e5c31af7Sopenharmony_cithe slink:VkGraphicsPipelineCreateInfo,
7840e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
7841e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
7842e5c31af7Sopenharmony_ciand slink:VkComputePipelineCreateInfo structures.
7843e5c31af7Sopenharmony_ciIf a sname:VkPipelineOfflineCreateInfo structure is not included in the
7844e5c31af7Sopenharmony_cipname:pNext chain then pipeline creation will fail and
7845e5c31af7Sopenharmony_ciename:VK_ERROR_NO_PIPELINE_MATCH will be returned by the corresponding
7846e5c31af7Sopenharmony_ciftext:vkCreate*Pipelines command.
7847e5c31af7Sopenharmony_ci
7848e5c31af7Sopenharmony_ciThe identifier must: be used by the implementation to match against the
7849e5c31af7Sopenharmony_ciexisting content of the pipeline cache at pipeline creation.
7850e5c31af7Sopenharmony_ciThis is required for Vulkan SC where pipelines are generated offline and
7851e5c31af7Sopenharmony_cithere is no shader code in the pipeline cache to match at runtime.
7852e5c31af7Sopenharmony_ci
7853e5c31af7Sopenharmony_ci[NOTE]
7854e5c31af7Sopenharmony_ci.Note
7855e5c31af7Sopenharmony_ci====
7856e5c31af7Sopenharmony_ciThe identifier values must be specified or generated during the offline
7857e5c31af7Sopenharmony_cipipeline cache generation and embedded in to the pipeline cache blob.
7858e5c31af7Sopenharmony_ci====
7859e5c31af7Sopenharmony_ci
7860e5c31af7Sopenharmony_ci[open,refpage='VkPipelineOfflineCreateInfo',desc='Structure specifying pipeline UUID and pipeline pool size to use',type='structs']
7861e5c31af7Sopenharmony_ci--
7862e5c31af7Sopenharmony_ciThe sname:VkPipelineOfflineCreateInfo structure is defined as:
7863e5c31af7Sopenharmony_ci
7864e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineOfflineCreateInfo.adoc[]
7865e5c31af7Sopenharmony_ci
7866e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
7867e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
7868e5c31af7Sopenharmony_ci    structure.
7869e5c31af7Sopenharmony_ci  * pname:pipelineIdentifier is an array of ename:VK_UUID_SIZE code:uint8_t
7870e5c31af7Sopenharmony_ci    values representing an identifier for the pipeline.
7871e5c31af7Sopenharmony_ci  * pname:matchControl is a elink:VkPipelineMatchControl value specifying
7872e5c31af7Sopenharmony_ci    the type of identifier being used and how the match should be performed.
7873e5c31af7Sopenharmony_ci  * pname:poolEntrySize is the size of the entry in pipeline memory to use
7874e5c31af7Sopenharmony_ci    for this pipeline.
7875e5c31af7Sopenharmony_ci    It must: be a size that was requested via slink:VkPipelinePoolSize when
7876e5c31af7Sopenharmony_ci    the device was created.
7877e5c31af7Sopenharmony_ci
7878e5c31af7Sopenharmony_ciIf a match in the pipeline cache is not found then
7879e5c31af7Sopenharmony_ciename:VK_ERROR_NO_PIPELINE_MATCH will be returned to the application.
7880e5c31af7Sopenharmony_ci
7881e5c31af7Sopenharmony_ciIf pname:poolEntrySize is too small for the pipeline, or the number of
7882e5c31af7Sopenharmony_cientries for the requested pool size exceeds the reserved count for that pool
7883e5c31af7Sopenharmony_cisize, pipeline creation will fail and ename:VK_ERROR_OUT_OF_POOL_MEMORY will
7884e5c31af7Sopenharmony_cibe returned by the corresponding ftext:vkCreate*Pipelines command.
7885e5c31af7Sopenharmony_ci
7886e5c31af7Sopenharmony_ci.Valid Usage
7887e5c31af7Sopenharmony_ci****
7888e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineOfflineCreateInfo-poolEntrySize-05028]]
7889e5c31af7Sopenharmony_ci    pname:poolEntrySize must: be one of the sizes requested via
7890e5c31af7Sopenharmony_ci    slink:VkPipelinePoolSize when the device was created
7891e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineOfflineCreateInfo-recyclePipelineMemory-05029]]
7892e5c31af7Sopenharmony_ci    If
7893e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkanSC10Properties::pname:recyclePipelineMemory
7894e5c31af7Sopenharmony_ci    is ename:VK_TRUE, the number of currently existing pipelines created
7895e5c31af7Sopenharmony_ci    with this same value of pname:poolEntrySize plus 1 must: be less than or
7896e5c31af7Sopenharmony_ci    equal to the sum of the slink:VkPipelinePoolSize::pname:poolEntryCount
7897e5c31af7Sopenharmony_ci    values with the same value of pname:poolEntrySize
7898e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineOfflineCreateInfo-recyclePipelineMemory-05030]]
7899e5c31af7Sopenharmony_ci    If
7900e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceVulkanSC10Properties::pname:recyclePipelineMemory
7901e5c31af7Sopenharmony_ci    is ename:VK_FALSE, the total number of pipelines ever created with this
7902e5c31af7Sopenharmony_ci    same value of pname:poolEntrySize plus 1 must: be less than or equal to
7903e5c31af7Sopenharmony_ci    the sum of the slink:VkPipelinePoolSize::pname:poolEntryCount values
7904e5c31af7Sopenharmony_ci    with the same value of pname:poolEntrySize
7905e5c31af7Sopenharmony_ci****
7906e5c31af7Sopenharmony_ciifdef::hidden[]
7907e5c31af7Sopenharmony_ci// tag::scaddition[]
7908e5c31af7Sopenharmony_ci  * slink:VkPipelineOfflineCreateInfo <<SCID-1>>, <<SCID-8>>
7909e5c31af7Sopenharmony_ci  * elink:VkPipelineMatchControl <<SCID-1>>
7910e5c31af7Sopenharmony_ci// end::scaddition[]
7911e5c31af7Sopenharmony_ciendif::hidden[]
7912e5c31af7Sopenharmony_ci
7913e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineOfflineCreateInfo.adoc[]
7914e5c31af7Sopenharmony_ci--
7915e5c31af7Sopenharmony_ci
7916e5c31af7Sopenharmony_ci[open,refpage='VkPipelineMatchControl',desc='Describes the type of Identifier and Match being used',type='enums',xrefs='VkPipelineOfflineCreateInfo']
7917e5c31af7Sopenharmony_ci--
7918e5c31af7Sopenharmony_ciPossible values of the pname:matchControl member of
7919e5c31af7Sopenharmony_cisname:VkPipelineOfflineCreateInfo
7920e5c31af7Sopenharmony_ci
7921e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineMatchControl.adoc[]
7922e5c31af7Sopenharmony_ci
7923e5c31af7Sopenharmony_ciare:
7924e5c31af7Sopenharmony_ci
7925e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH specifies
7926e5c31af7Sopenharmony_ci    that the identifier is a UUID generated by the application and the
7927e5c31af7Sopenharmony_ci    identifiers must be an exact match.
7928e5c31af7Sopenharmony_ci
7929e5c31af7Sopenharmony_ci--
7930e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7931e5c31af7Sopenharmony_ci
7932e5c31af7Sopenharmony_ci[[pipelines-specialization-constants]]
7933e5c31af7Sopenharmony_ci== Specialization Constants
7934e5c31af7Sopenharmony_ci
7935e5c31af7Sopenharmony_ciifndef::VKSC_VERSION_1_0[]
7936e5c31af7Sopenharmony_ciSpecialization constants are a mechanism whereby constants in a SPIR-V
7937e5c31af7Sopenharmony_cimodule can: have their constant value specified at the time the
7938e5c31af7Sopenharmony_cisname:VkPipeline is created.
7939e5c31af7Sopenharmony_ciThis allows a SPIR-V module to have constants that can: be modified while
7940e5c31af7Sopenharmony_ciexecuting an application that uses the Vulkan API.
7941e5c31af7Sopenharmony_ci
7942e5c31af7Sopenharmony_ci[NOTE]
7943e5c31af7Sopenharmony_ci.Note
7944e5c31af7Sopenharmony_ci====
7945e5c31af7Sopenharmony_ciSpecialization constants are useful to allow a compute shader to have its
7946e5c31af7Sopenharmony_cilocal workgroup size changed at runtime by the user, for example.
7947e5c31af7Sopenharmony_ci====
7948e5c31af7Sopenharmony_ci
7949e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7950e5c31af7Sopenharmony_ciifdef::VKSC_VERSION_1_0[]
7951e5c31af7Sopenharmony_ciSpecialization constants are a mechanism whereby constants in a SPIR-V
7952e5c31af7Sopenharmony_cimodule can: have their constant value specified at the time the
7953e5c31af7Sopenharmony_cisname:VkPipeline is compiled offline.
7954e5c31af7Sopenharmony_ciThis allows a SPIR-V module to have constants that can: be modified at
7955e5c31af7Sopenharmony_cicompilation time rather than in the SPIR-V source.
7956e5c31af7Sopenharmony_ciThe pname:pSpecializationInfo parameters are not used at runtime and should:
7957e5c31af7Sopenharmony_cibe ignored by the implementation.
7958e5c31af7Sopenharmony_ciIf provided, the application must: set the pname:pSpecializationInfo
7959e5c31af7Sopenharmony_ciparameters to the values that were specified for the offline compilation of
7960e5c31af7Sopenharmony_cithis pipeline.
7961e5c31af7Sopenharmony_ci
7962e5c31af7Sopenharmony_ci[NOTE]
7963e5c31af7Sopenharmony_ci.Note
7964e5c31af7Sopenharmony_ci====
7965e5c31af7Sopenharmony_ciSpecialization constants are useful to allow a compute shader to have its
7966e5c31af7Sopenharmony_cilocal workgroup size changed at pipeline compilation time, for example.
7967e5c31af7Sopenharmony_ci====
7968e5c31af7Sopenharmony_ciendif::VKSC_VERSION_1_0[]
7969e5c31af7Sopenharmony_ci
7970e5c31af7Sopenharmony_ciEach slink:VkPipelineShaderStageCreateInfo structure contains a
7971e5c31af7Sopenharmony_cipname:pSpecializationInfo member, which can: be `NULL` to indicate no
7972e5c31af7Sopenharmony_cispecialization constants, or point to a sname:VkSpecializationInfo
7973e5c31af7Sopenharmony_cistructure.
7974e5c31af7Sopenharmony_ci
7975e5c31af7Sopenharmony_ci[open,refpage='VkSpecializationInfo',desc='Structure specifying specialization information',type='structs']
7976e5c31af7Sopenharmony_ci--
7977e5c31af7Sopenharmony_ciThe sname:VkSpecializationInfo structure is defined as:
7978e5c31af7Sopenharmony_ci
7979e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkSpecializationInfo.adoc[]
7980e5c31af7Sopenharmony_ci
7981e5c31af7Sopenharmony_ci  * pname:mapEntryCount is the number of entries in the pname:pMapEntries
7982e5c31af7Sopenharmony_ci    array.
7983e5c31af7Sopenharmony_ci  * pname:pMapEntries is a pointer to an array of
7984e5c31af7Sopenharmony_ci    sname:VkSpecializationMapEntry structures, which map constant IDs to
7985e5c31af7Sopenharmony_ci    offsets in pname:pData.
7986e5c31af7Sopenharmony_ci  * pname:dataSize is the byte size of the pname:pData buffer.
7987e5c31af7Sopenharmony_ci  * pname:pData contains the actual constant values to specialize with.
7988e5c31af7Sopenharmony_ci
7989e5c31af7Sopenharmony_ci.Valid Usage
7990e5c31af7Sopenharmony_ci****
7991e5c31af7Sopenharmony_ci  * [[VUID-VkSpecializationInfo-offset-00773]]
7992e5c31af7Sopenharmony_ci    The pname:offset member of each element of pname:pMapEntries must: be
7993e5c31af7Sopenharmony_ci    less than pname:dataSize
7994e5c31af7Sopenharmony_ci  * [[VUID-VkSpecializationInfo-pMapEntries-00774]]
7995e5c31af7Sopenharmony_ci    The pname:size member of each element of pname:pMapEntries must: be less
7996e5c31af7Sopenharmony_ci    than or equal to pname:dataSize minus pname:offset
7997e5c31af7Sopenharmony_ci  * [[VUID-VkSpecializationInfo-constantID-04911]]
7998e5c31af7Sopenharmony_ci    The pname:constantID value of each element of pname:pMapEntries must: be
7999e5c31af7Sopenharmony_ci    unique within pname:pMapEntries
8000e5c31af7Sopenharmony_ci****
8001e5c31af7Sopenharmony_ci
8002e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkSpecializationInfo.adoc[]
8003e5c31af7Sopenharmony_ci--
8004e5c31af7Sopenharmony_ci
8005e5c31af7Sopenharmony_ci[open,refpage='VkSpecializationMapEntry',desc='Structure specifying a specialization map entry',type='structs']
8006e5c31af7Sopenharmony_ci--
8007e5c31af7Sopenharmony_ciThe sname:VkSpecializationMapEntry structure is defined as:
8008e5c31af7Sopenharmony_ci
8009e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkSpecializationMapEntry.adoc[]
8010e5c31af7Sopenharmony_ci
8011e5c31af7Sopenharmony_ci  * pname:constantID is the ID of the specialization constant in SPIR-V.
8012e5c31af7Sopenharmony_ci  * pname:offset is the byte offset of the specialization constant value
8013e5c31af7Sopenharmony_ci    within the supplied data buffer.
8014e5c31af7Sopenharmony_ci  * pname:size is the byte size of the specialization constant value within
8015e5c31af7Sopenharmony_ci    the supplied data buffer.
8016e5c31af7Sopenharmony_ci
8017e5c31af7Sopenharmony_ciIf a pname:constantID value is not a specialization constant ID used in the
8018e5c31af7Sopenharmony_cishader, that map entry does not affect the behavior of the pipeline.
8019e5c31af7Sopenharmony_ci
8020e5c31af7Sopenharmony_ci.Valid Usage
8021e5c31af7Sopenharmony_ci****
8022e5c31af7Sopenharmony_ci  * [[VUID-VkSpecializationMapEntry-constantID-00776]]
8023e5c31af7Sopenharmony_ci    For a pname:constantID specialization constant declared in a shader,
8024e5c31af7Sopenharmony_ci    pname:size must: match the byte size of the pname:constantID.
8025e5c31af7Sopenharmony_ci    If the specialization constant is of type code:boolean, pname:size must:
8026e5c31af7Sopenharmony_ci    be the byte size of basetype:VkBool32
8027e5c31af7Sopenharmony_ci****
8028e5c31af7Sopenharmony_ci
8029e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkSpecializationMapEntry.adoc[]
8030e5c31af7Sopenharmony_ci--
8031e5c31af7Sopenharmony_ci
8032e5c31af7Sopenharmony_ciIn human readable SPIR-V:
8033e5c31af7Sopenharmony_ci
8034e5c31af7Sopenharmony_ci[source,glsl]
8035e5c31af7Sopenharmony_ci----
8036e5c31af7Sopenharmony_ciOpDecorate %x SpecId 13 ; decorate .x component of WorkgroupSize with ID 13
8037e5c31af7Sopenharmony_ciOpDecorate %y SpecId 42 ; decorate .y component of WorkgroupSize with ID 42
8038e5c31af7Sopenharmony_ciOpDecorate %z SpecId 3  ; decorate .z component of WorkgroupSize with ID 3
8039e5c31af7Sopenharmony_ciOpDecorate %wgsize BuiltIn WorkgroupSize ; decorate WorkgroupSize onto constant
8040e5c31af7Sopenharmony_ci%i32 = OpTypeInt 32 0 ; declare an unsigned 32-bit type
8041e5c31af7Sopenharmony_ci%uvec3 = OpTypeVector %i32 3 ; declare a 3 element vector type of unsigned 32-bit
8042e5c31af7Sopenharmony_ci%x = OpSpecConstant %i32 1 ; declare the .x component of WorkgroupSize
8043e5c31af7Sopenharmony_ci%y = OpSpecConstant %i32 1 ; declare the .y component of WorkgroupSize
8044e5c31af7Sopenharmony_ci%z = OpSpecConstant %i32 1 ; declare the .z component of WorkgroupSize
8045e5c31af7Sopenharmony_ci%wgsize = OpSpecConstantComposite %uvec3 %x %y %z ; declare WorkgroupSize
8046e5c31af7Sopenharmony_ci----
8047e5c31af7Sopenharmony_ci
8048e5c31af7Sopenharmony_ciFrom the above we have three specialization constants, one for each of the
8049e5c31af7Sopenharmony_cix, y & z elements of the WorkgroupSize vector.
8050e5c31af7Sopenharmony_ci
8051e5c31af7Sopenharmony_ciNow to specialize the above via the specialization constants mechanism:
8052e5c31af7Sopenharmony_ci
8053e5c31af7Sopenharmony_ci[source,c++]
8054e5c31af7Sopenharmony_ci----
8055e5c31af7Sopenharmony_ciconst VkSpecializationMapEntry entries[] =
8056e5c31af7Sopenharmony_ci{
8057e5c31af7Sopenharmony_ci    {
8058e5c31af7Sopenharmony_ci        .constantID = 13,
8059e5c31af7Sopenharmony_ci        .offset = 0 * sizeof(uint32_t),
8060e5c31af7Sopenharmony_ci        .size = sizeof(uint32_t)
8061e5c31af7Sopenharmony_ci    },
8062e5c31af7Sopenharmony_ci    {
8063e5c31af7Sopenharmony_ci        .constantID = 42,
8064e5c31af7Sopenharmony_ci        .offset = 1 * sizeof(uint32_t),
8065e5c31af7Sopenharmony_ci        .size = sizeof(uint32_t)
8066e5c31af7Sopenharmony_ci    },
8067e5c31af7Sopenharmony_ci    {
8068e5c31af7Sopenharmony_ci        .constantID = 3,
8069e5c31af7Sopenharmony_ci        .offset = 2 * sizeof(uint32_t),
8070e5c31af7Sopenharmony_ci        .size = sizeof(uint32_t)
8071e5c31af7Sopenharmony_ci    }
8072e5c31af7Sopenharmony_ci};
8073e5c31af7Sopenharmony_ci
8074e5c31af7Sopenharmony_ciconst uint32_t data[] = { 16, 8, 4 }; // our workgroup size is 16x8x4
8075e5c31af7Sopenharmony_ci
8076e5c31af7Sopenharmony_ciconst VkSpecializationInfo info =
8077e5c31af7Sopenharmony_ci{
8078e5c31af7Sopenharmony_ci    .mapEntryCount = 3,
8079e5c31af7Sopenharmony_ci    .pMapEntries  = entries,
8080e5c31af7Sopenharmony_ci    .dataSize = 3 * sizeof(uint32_t),
8081e5c31af7Sopenharmony_ci    .pData = data,
8082e5c31af7Sopenharmony_ci};
8083e5c31af7Sopenharmony_ci----
8084e5c31af7Sopenharmony_ci
8085e5c31af7Sopenharmony_ciThen when calling flink:vkCreateComputePipelines, and passing the
8086e5c31af7Sopenharmony_cisname:VkSpecializationInfo we defined as the pname:pSpecializationInfo
8087e5c31af7Sopenharmony_ciparameter of slink:VkPipelineShaderStageCreateInfo, we will create a compute
8088e5c31af7Sopenharmony_cipipeline with the runtime specified local workgroup size.
8089e5c31af7Sopenharmony_ci
8090e5c31af7Sopenharmony_ciAnother example would be that an application has a SPIR-V module that has
8091e5c31af7Sopenharmony_cisome platform-dependent constants they wish to use.
8092e5c31af7Sopenharmony_ci
8093e5c31af7Sopenharmony_ciIn human readable SPIR-V:
8094e5c31af7Sopenharmony_ci
8095e5c31af7Sopenharmony_ci// [source,glsl]
8096e5c31af7Sopenharmony_ci[source,glsl]
8097e5c31af7Sopenharmony_ci----
8098e5c31af7Sopenharmony_ciOpDecorate %1 SpecId 0  ; decorate our signed 32-bit integer constant
8099e5c31af7Sopenharmony_ciOpDecorate %2 SpecId 12 ; decorate our 32-bit floating-point constant
8100e5c31af7Sopenharmony_ci%i32 = OpTypeInt 32 1   ; declare a signed 32-bit type
8101e5c31af7Sopenharmony_ci%float = OpTypeFloat 32 ; declare a 32-bit floating-point type
8102e5c31af7Sopenharmony_ci%1 = OpSpecConstant %i32 -1 ; some signed 32-bit integer constant
8103e5c31af7Sopenharmony_ci%2 = OpSpecConstant %float 0.5 ; some 32-bit floating-point constant
8104e5c31af7Sopenharmony_ci----
8105e5c31af7Sopenharmony_ci
8106e5c31af7Sopenharmony_ciFrom the above we have two specialization constants, one is a signed 32-bit
8107e5c31af7Sopenharmony_ciinteger and the second is a 32-bit floating-point value.
8108e5c31af7Sopenharmony_ci
8109e5c31af7Sopenharmony_ciNow to specialize the above via the specialization constants mechanism:
8110e5c31af7Sopenharmony_ci
8111e5c31af7Sopenharmony_ci[source,c++]
8112e5c31af7Sopenharmony_ci----
8113e5c31af7Sopenharmony_cistruct SpecializationData {
8114e5c31af7Sopenharmony_ci    int32_t data0;
8115e5c31af7Sopenharmony_ci    float data1;
8116e5c31af7Sopenharmony_ci};
8117e5c31af7Sopenharmony_ci
8118e5c31af7Sopenharmony_ciconst VkSpecializationMapEntry entries[] =
8119e5c31af7Sopenharmony_ci{
8120e5c31af7Sopenharmony_ci    {
8121e5c31af7Sopenharmony_ci        .constantID = 0,
8122e5c31af7Sopenharmony_ci        .offset = offsetof(SpecializationData, data0),
8123e5c31af7Sopenharmony_ci        .size = sizeof(SpecializationData::data0)
8124e5c31af7Sopenharmony_ci    },
8125e5c31af7Sopenharmony_ci    {
8126e5c31af7Sopenharmony_ci        .constantID = 12,
8127e5c31af7Sopenharmony_ci        .offset = offsetof(SpecializationData, data1),
8128e5c31af7Sopenharmony_ci        .size = sizeof(SpecializationData::data1)
8129e5c31af7Sopenharmony_ci    }
8130e5c31af7Sopenharmony_ci};
8131e5c31af7Sopenharmony_ci
8132e5c31af7Sopenharmony_ciSpecializationData data;
8133e5c31af7Sopenharmony_cidata.data0 = -42;    // set the data for the 32-bit integer
8134e5c31af7Sopenharmony_cidata.data1 = 42.0f;  // set the data for the 32-bit floating-point
8135e5c31af7Sopenharmony_ci
8136e5c31af7Sopenharmony_ciconst VkSpecializationInfo info =
8137e5c31af7Sopenharmony_ci{
8138e5c31af7Sopenharmony_ci    .mapEntryCount = 2,
8139e5c31af7Sopenharmony_ci    .pMapEntries = entries,
8140e5c31af7Sopenharmony_ci    .dataSize = sizeof(data),
8141e5c31af7Sopenharmony_ci    .pdata = &data,
8142e5c31af7Sopenharmony_ci};
8143e5c31af7Sopenharmony_ci----
8144e5c31af7Sopenharmony_ci
8145e5c31af7Sopenharmony_ciIt is legal for a SPIR-V module with specializations to be compiled into a
8146e5c31af7Sopenharmony_cipipeline where no specialization information was provided.
8147e5c31af7Sopenharmony_ciSPIR-V specialization constants contain default values such that if a
8148e5c31af7Sopenharmony_cispecialization is not provided, the default value will be used.
8149e5c31af7Sopenharmony_ciIn the examples above, it would be valid for an application to only
8150e5c31af7Sopenharmony_cispecialize some of the specialization constants within the SPIR-V module,
8151e5c31af7Sopenharmony_ciand let the other constants use their default values encoded within the
8152e5c31af7Sopenharmony_ciOpSpecConstant declarations.
8153e5c31af7Sopenharmony_ci
8154e5c31af7Sopenharmony_ci
8155e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
8156e5c31af7Sopenharmony_ci[[pipelines-library]]
8157e5c31af7Sopenharmony_ci== Pipeline Libraries
8158e5c31af7Sopenharmony_ci
8159e5c31af7Sopenharmony_ciA pipeline library is a special pipeline that was created using the
8160e5c31af7Sopenharmony_ciename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR and cannot be bound, instead it
8161e5c31af7Sopenharmony_cidefines a set of pipeline state which can be linked into other pipelines.
8162e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
8163e5c31af7Sopenharmony_ciFor ray tracing pipelines this includes shaders and shader groups.
8164e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
8165e5c31af7Sopenharmony_ciifdef::VK_EXT_graphics_pipeline_library[]
8166e5c31af7Sopenharmony_ciFor graphics pipelines this includes distinct library types defined by
8167e5c31af7Sopenharmony_cielink:VkGraphicsPipelineLibraryFlagBitsEXT.
8168e5c31af7Sopenharmony_ciendif::VK_EXT_graphics_pipeline_library[]
8169e5c31af7Sopenharmony_ciThe application must: maintain the lifetime of a pipeline library based on
8170e5c31af7Sopenharmony_cithe pipelines that link with it.
8171e5c31af7Sopenharmony_ci
8172e5c31af7Sopenharmony_ciThis linkage is achieved by using the following structure within the
8173e5c31af7Sopenharmony_ciappropriate creation mechanisms:
8174e5c31af7Sopenharmony_ci
8175e5c31af7Sopenharmony_ci[open,refpage='VkPipelineLibraryCreateInfoKHR',desc='Structure specifying pipeline libraries to use when creating a pipeline',type='structs']
8176e5c31af7Sopenharmony_ci--
8177e5c31af7Sopenharmony_ciThe sname:VkPipelineLibraryCreateInfoKHR structure is defined as:
8178e5c31af7Sopenharmony_ci
8179e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineLibraryCreateInfoKHR.adoc[]
8180e5c31af7Sopenharmony_ci
8181e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
8182e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
8183e5c31af7Sopenharmony_ci    structure.
8184e5c31af7Sopenharmony_ci  * pname:libraryCount is the number of pipeline libraries in
8185e5c31af7Sopenharmony_ci    pname:pLibraries.
8186e5c31af7Sopenharmony_ci  * pname:pLibraries is a pointer to an array of slink:VkPipeline structures
8187e5c31af7Sopenharmony_ci    specifying pipeline libraries to use when creating a pipeline.
8188e5c31af7Sopenharmony_ci
8189e5c31af7Sopenharmony_ci.Valid Usage
8190e5c31af7Sopenharmony_ci****
8191e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-03381]]
8192e5c31af7Sopenharmony_ci    Each element of pname:pLibraries must: have been created with
8193e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
8194e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_module_identifier[]
8195e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-06855]]
8196e5c31af7Sopenharmony_ci    If any library in pname:pLibraries was created with a shader stage with
8197e5c31af7Sopenharmony_ci    slink:VkPipelineShaderStageModuleIdentifierCreateInfoEXT and
8198e5c31af7Sopenharmony_ci    pname:identifierSize not equal to 0, the pipeline must: be created with
8199e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT flag
8200e5c31af7Sopenharmony_ci    set
8201e5c31af7Sopenharmony_ciendif::VK_EXT_shader_module_identifier[]
8202e5c31af7Sopenharmony_ciifdef::VK_EXT_descriptor_buffer[]
8203e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-08096]]
8204e5c31af7Sopenharmony_ci    If any element of pname:pLibraries was created with
8205e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, all elements must:
8206e5c31af7Sopenharmony_ci    have been created with
8207e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
8208e5c31af7Sopenharmony_ciendif::VK_EXT_descriptor_buffer[]
8209e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_protected_access[]
8210e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07404]]
8211e5c31af7Sopenharmony_ci    If pname:pipeline is being created with
8212e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT, every element of
8213e5c31af7Sopenharmony_ci    pname:pLibraries must: have been created with
8214e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
8215e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07405]]
8216e5c31af7Sopenharmony_ci    If pname:pipeline is being created without
8217e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT, every element of
8218e5c31af7Sopenharmony_ci    pname:pLibraries must: have been created without
8219e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
8220e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07406]]
8221e5c31af7Sopenharmony_ci    If pname:pipeline is being created with
8222e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT, every element of
8223e5c31af7Sopenharmony_ci    pname:pLibraries must: have been created with
8224e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
8225e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07407]]
8226e5c31af7Sopenharmony_ci    If pname:pipeline is being created without
8227e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT, every element of
8228e5c31af7Sopenharmony_ci    pname:pLibraries must: have been created without
8229e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
8230e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_protected_access[]
8231e5c31af7Sopenharmony_ci****
8232e5c31af7Sopenharmony_ci
8233e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineLibraryCreateInfoKHR.adoc[]
8234e5c31af7Sopenharmony_ci--
8235e5c31af7Sopenharmony_ci
8236e5c31af7Sopenharmony_ciPipelines created with ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR libraries
8237e5c31af7Sopenharmony_cican: depend on other pipeline libraries in
8238e5c31af7Sopenharmony_cislink:VkPipelineLibraryCreateInfoKHR.
8239e5c31af7Sopenharmony_ci
8240e5c31af7Sopenharmony_ciA pipeline library is considered in-use, as long as one of the linking
8241e5c31af7Sopenharmony_cipipelines is in-use.
8242e5c31af7Sopenharmony_ciThis applies recursively if a pipeline library includes other pipeline
8243e5c31af7Sopenharmony_cilibraries.
8244e5c31af7Sopenharmony_ci
8245e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
8246e5c31af7Sopenharmony_ci
8247e5c31af7Sopenharmony_ci
8248e5c31af7Sopenharmony_ci[[pipelines-binding]]
8249e5c31af7Sopenharmony_ci== Pipeline Binding
8250e5c31af7Sopenharmony_ci
8251e5c31af7Sopenharmony_ci[open,refpage='vkCmdBindPipeline',desc='Bind a pipeline object to a command buffer',type='protos']
8252e5c31af7Sopenharmony_ci--
8253e5c31af7Sopenharmony_ciOnce a pipeline has been created, it can: be bound to the command buffer
8254e5c31af7Sopenharmony_ciusing the command:
8255e5c31af7Sopenharmony_ci
8256e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdBindPipeline.adoc[]
8257e5c31af7Sopenharmony_ci
8258e5c31af7Sopenharmony_ci  * pname:commandBuffer is the command buffer that the pipeline will be
8259e5c31af7Sopenharmony_ci    bound to.
8260e5c31af7Sopenharmony_ci  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
8261e5c31af7Sopenharmony_ci    to which bind point the pipeline is bound.
8262e5c31af7Sopenharmony_ci    Binding one does not disturb the others.
8263e5c31af7Sopenharmony_ci  * pname:pipeline is the pipeline to be bound.
8264e5c31af7Sopenharmony_ci
8265e5c31af7Sopenharmony_ci[[pipelines-bindpoint-commands]]
8266e5c31af7Sopenharmony_ciOnce bound, a pipeline binding affects subsequent commands that interact
8267e5c31af7Sopenharmony_ciwith the given pipeline type in the command buffer until a different
8268e5c31af7Sopenharmony_cipipeline of the same type is bound to the bind
8269e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_object[]
8270e5c31af7Sopenharmony_cipoint, or until the pipeline bind point is disturbed by binding a
8271e5c31af7Sopenharmony_ci<<shaders-objects, shader object>> as described in
8272e5c31af7Sopenharmony_ci<<shaders-objects-pipeline-interaction, Interaction with Pipelines>>.
8273e5c31af7Sopenharmony_ciendif::VK_EXT_shader_object[]
8274e5c31af7Sopenharmony_ciifndef::VK_EXT_shader_object[]
8275e5c31af7Sopenharmony_cipoint.
8276e5c31af7Sopenharmony_ciendif::VK_EXT_shader_object[]
8277e5c31af7Sopenharmony_ciCommands that do not interact with the <<shaders-binding,given pipeline>>
8278e5c31af7Sopenharmony_citype must: not be affected by the pipeline state.
8279e5c31af7Sopenharmony_ci
8280e5c31af7Sopenharmony_ci.Valid Usage
8281e5c31af7Sopenharmony_ci****
8282e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00777]]
8283e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, the
8284e5c31af7Sopenharmony_ci    sname:VkCommandPool that pname:commandBuffer was allocated from must:
8285e5c31af7Sopenharmony_ci    support compute operations
8286e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00778]]
8287e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, the
8288e5c31af7Sopenharmony_ci    sname:VkCommandPool that pname:commandBuffer was allocated from must:
8289e5c31af7Sopenharmony_ci    support graphics operations
8290e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00779]]
8291e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE,
8292e5c31af7Sopenharmony_ci    pname:pipeline must: be a compute pipeline
8293e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00780]]
8294e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS,
8295e5c31af7Sopenharmony_ci    pname:pipeline must: be a graphics pipeline
8296e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipeline-00781]]
8297e5c31af7Sopenharmony_ci    If the <<features-variableMultisampleRate,
8298e5c31af7Sopenharmony_ci    pname:variableMultisampleRate>> feature is not supported, pname:pipeline
8299e5c31af7Sopenharmony_ci    is a graphics pipeline, the current subpass <<renderpass-noattachments,
8300e5c31af7Sopenharmony_ci    uses no attachments>>, and this is not the first call to this function
8301e5c31af7Sopenharmony_ci    with a graphics pipeline after transitioning to the current subpass,
8302e5c31af7Sopenharmony_ci    then the sample count specified by this pipeline must: match that set in
8303e5c31af7Sopenharmony_ci    the previous pipeline
8304e5c31af7Sopenharmony_ciifdef::VK_EXT_sample_locations[]
8305e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-variableSampleLocations-01525]]
8306e5c31af7Sopenharmony_ci    If
8307e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
8308e5c31af7Sopenharmony_ci    is ename:VK_FALSE, and pname:pipeline is a graphics pipeline created
8309e5c31af7Sopenharmony_ci    with a slink:VkPipelineSampleLocationsStateCreateInfoEXT structure
8310e5c31af7Sopenharmony_ci    having its pname:sampleLocationsEnable member set to ename:VK_TRUE but
8311e5c31af7Sopenharmony_ci    without ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT enabled then the
8312e5c31af7Sopenharmony_ci    current render pass instance must: have been begun by specifying a
8313e5c31af7Sopenharmony_ci    slink:VkRenderPassSampleLocationsBeginInfoEXT structure whose
8314e5c31af7Sopenharmony_ci    pname:pPostSubpassSampleLocations member contains an element with a
8315e5c31af7Sopenharmony_ci    pname:subpassIndex matching the current subpass index and the
8316e5c31af7Sopenharmony_ci    pname:sampleLocationsInfo member of that element must: match the
8317e5c31af7Sopenharmony_ci    pname:sampleLocationsInfo specified in
8318e5c31af7Sopenharmony_ci    slink:VkPipelineSampleLocationsStateCreateInfoEXT when the pipeline was
8319e5c31af7Sopenharmony_ci    created
8320e5c31af7Sopenharmony_ciendif::VK_EXT_sample_locations[]
8321e5c31af7Sopenharmony_ciifdef::VK_EXT_transform_feedback[]
8322e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-None-02323]]
8323e5c31af7Sopenharmony_ci    This command must: not be recorded when transform feedback is active
8324e5c31af7Sopenharmony_ciendif::VK_EXT_transform_feedback[]
8325e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
8326e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-02391]]
8327e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is
8328e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, the sname:VkCommandPool
8329e5c31af7Sopenharmony_ci    that pname:commandBuffer was allocated from must: support compute
8330e5c31af7Sopenharmony_ci    operations
8331e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-02392]]
8332e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is
8333e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pname:pipeline must: be a
8334e5c31af7Sopenharmony_ci    ray tracing pipeline
8335e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-06721]]
8336e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is
8337e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pname:commandBuffer must:
8338e5c31af7Sopenharmony_ci    not be a protected command buffer
8339e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
8340e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_protected_access[]
8341e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineProtectedAccess-07408]]
8342e5c31af7Sopenharmony_ci    If the <<features-pipelineProtectedAccess,
8343e5c31af7Sopenharmony_ci    pname:pipelineProtectedAccess>> feature is enabled, and
8344e5c31af7Sopenharmony_ci    pname:commandBuffer is a protected command buffer, pname:pipeline must:
8345e5c31af7Sopenharmony_ci    have been created without
8346e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
8347e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineProtectedAccess-07409]]
8348e5c31af7Sopenharmony_ci    If the <<features-pipelineProtectedAccess,
8349e5c31af7Sopenharmony_ci    pname:pipelineProtectedAccess>> feature is enabled, and
8350e5c31af7Sopenharmony_ci    pname:commandBuffer is not a protected command buffer, pname:pipeline
8351e5c31af7Sopenharmony_ci    must: have been created without
8352e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
8353e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_protected_access[]
8354e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_library[]
8355e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipeline-03382]]
8356e5c31af7Sopenharmony_ci    pname:pipeline must: not have been created with
8357e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR set
8358e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_library[]
8359e5c31af7Sopenharmony_ciifdef::VK_NV_inherited_viewport_scissor[]
8360e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-commandBuffer-04808]]
8361e5c31af7Sopenharmony_ci    If pname:commandBuffer is a secondary command buffer with
8362e5c31af7Sopenharmony_ci    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
8363e5c31af7Sopenharmony_ci    enabled and pname:pipelineBindPoint is
8364e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_GRAPHICS, then the pname:pipeline must:
8365e5c31af7Sopenharmony_ci    have been created with ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT or
8366e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_VIEWPORT, and
8367e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT or
8368e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_SCISSOR enabled
8369e5c31af7Sopenharmony_ciendif::VK_NV_inherited_viewport_scissor[]
8370e5c31af7Sopenharmony_ciifdef::VK_NV_inherited_viewport_scissor,VK_EXT_discard_rectangles[]
8371e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-commandBuffer-04809]]
8372e5c31af7Sopenharmony_ci    If pname:commandBuffer is a secondary command buffer with
8373e5c31af7Sopenharmony_ci    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
8374e5c31af7Sopenharmony_ci    enabled and pname:pipelineBindPoint is
8375e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_GRAPHICS and pname:pipeline was created
8376e5c31af7Sopenharmony_ci    with slink:VkPipelineDiscardRectangleStateCreateInfoEXT structure and
8377e5c31af7Sopenharmony_ci    its pname:discardRectangleCount member is not `0`, or the pipeline was
8378e5c31af7Sopenharmony_ci    created with ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT
8379e5c31af7Sopenharmony_ci    enabled, then the pipeline must: have been created with
8380e5c31af7Sopenharmony_ci    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT enabled
8381e5c31af7Sopenharmony_ciendif::VK_NV_inherited_viewport_scissor,VK_EXT_discard_rectangles[]
8382e5c31af7Sopenharmony_ciifdef::VK_EXT_provoking_vertex[]
8383e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04881]]
8384e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS and
8385e5c31af7Sopenharmony_ci    the <<limits-provokingVertexModePerPipeline,
8386e5c31af7Sopenharmony_ci    pname:provokingVertexModePerPipeline>> limit is ename:VK_FALSE, then
8387e5c31af7Sopenharmony_ci    pipeline's
8388e5c31af7Sopenharmony_ci    slink:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT::pname:provokingVertexMode
8389e5c31af7Sopenharmony_ci    must: be the same as that of any other pipelines previously bound to
8390e5c31af7Sopenharmony_ci    this bind point within the current render pass instance, including any
8391e5c31af7Sopenharmony_ci    pipeline already bound when beginning the render pass instance
8392e5c31af7Sopenharmony_ciendif::VK_EXT_provoking_vertex[]
8393e5c31af7Sopenharmony_ciifdef::VK_HUAWEI_subpass_shading[]
8394e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04949]]
8395e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is
8396e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, the
8397e5c31af7Sopenharmony_ci    sname:VkCommandPool that pname:commandBuffer was allocated from must:
8398e5c31af7Sopenharmony_ci    support compute operations
8399e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04950]]
8400e5c31af7Sopenharmony_ci    If pname:pipelineBindPoint is
8401e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, pname:pipeline
8402e5c31af7Sopenharmony_ci    must: be a subpass shading pipeline
8403e5c31af7Sopenharmony_ciendif::VK_HUAWEI_subpass_shading[]
8404e5c31af7Sopenharmony_ci****
8405e5c31af7Sopenharmony_ci
8406e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCmdBindPipeline.adoc[]
8407e5c31af7Sopenharmony_ci--
8408e5c31af7Sopenharmony_ci
8409e5c31af7Sopenharmony_ci[open,refpage='VkPipelineBindPoint',desc='Specify the bind point of a pipeline object to a command buffer',type='enums']
8410e5c31af7Sopenharmony_ci--
8411e5c31af7Sopenharmony_ciPossible values of flink:vkCmdBindPipeline::pname:pipelineBindPoint,
8412e5c31af7Sopenharmony_cispecifying the bind point of a pipeline object, are:
8413e5c31af7Sopenharmony_ci
8414e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineBindPoint.adoc[]
8415e5c31af7Sopenharmony_ci
8416e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_BIND_POINT_COMPUTE specifies binding as a compute
8417e5c31af7Sopenharmony_ci    pipeline.
8418e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_BIND_POINT_GRAPHICS specifies binding as a graphics
8419e5c31af7Sopenharmony_ci    pipeline.
8420e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
8421e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR specifies binding as a ray
8422e5c31af7Sopenharmony_ci    tracing pipeline.
8423e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
8424e5c31af7Sopenharmony_ciifdef::VK_HUAWEI_subpass_shading[]
8425e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI specifies binding as
8426e5c31af7Sopenharmony_ci    a subpass shading pipeline.
8427e5c31af7Sopenharmony_ciendif::VK_HUAWEI_subpass_shading[]
8428e5c31af7Sopenharmony_ciifdef::VK_AMDX_shader_enqueue[]
8429e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX specifies binding as
8430e5c31af7Sopenharmony_ci    an <<executiongraphs, execution graph pipeline>>.
8431e5c31af7Sopenharmony_ciendif::VK_AMDX_shader_enqueue[]
8432e5c31af7Sopenharmony_ci--
8433e5c31af7Sopenharmony_ci
8434e5c31af7Sopenharmony_ciifdef::VK_NV_device_generated_commands[]
8435e5c31af7Sopenharmony_ci[open,refpage='vkCmdBindPipelineShaderGroupNV',desc='Bind a pipeline object's shader group to a command buffer',type='protos']
8436e5c31af7Sopenharmony_ci--
8437e5c31af7Sopenharmony_ciFor pipelines that were created with the support of multiple shader groups
8438e5c31af7Sopenharmony_ci(see <<graphics-shadergroups,Graphics Pipeline Shader Groups>>), the regular
8439e5c31af7Sopenharmony_cifname:vkCmdBindPipeline command will bind Shader Group `0`.
8440e5c31af7Sopenharmony_ciTo explicitly bind a shader group use:
8441e5c31af7Sopenharmony_ci
8442e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdBindPipelineShaderGroupNV.adoc[]
8443e5c31af7Sopenharmony_ci
8444e5c31af7Sopenharmony_ci  * pname:commandBuffer is the command buffer that the pipeline will be
8445e5c31af7Sopenharmony_ci    bound to.
8446e5c31af7Sopenharmony_ci  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
8447e5c31af7Sopenharmony_ci    the bind point to which the pipeline will be bound.
8448e5c31af7Sopenharmony_ci  * pname:pipeline is the pipeline to be bound.
8449e5c31af7Sopenharmony_ci  * pname:groupIndex is the shader group to be bound.
8450e5c31af7Sopenharmony_ci
8451e5c31af7Sopenharmony_ci
8452e5c31af7Sopenharmony_ci.Valid Usage
8453e5c31af7Sopenharmony_ci****
8454e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02893]]
8455e5c31af7Sopenharmony_ci    pname:groupIndex must: be `0` or less than the effective
8456e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:groupCount
8457e5c31af7Sopenharmony_ci    including the referenced pipelines
8458e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-02894]]
8459e5c31af7Sopenharmony_ci    The pname:pipelineBindPoint must: be
8460e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
8461e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02895]]
8462e5c31af7Sopenharmony_ci    The same restrictions as flink:vkCmdBindPipeline apply as if the bound
8463e5c31af7Sopenharmony_ci    pipeline was created only with the Shader Group from the
8464e5c31af7Sopenharmony_ci    pname:groupIndex information
8465e5c31af7Sopenharmony_ci  * [[VUID-vkCmdBindPipelineShaderGroupNV-deviceGeneratedCommands-02896]]
8466e5c31af7Sopenharmony_ci    The <<features-deviceGeneratedCommands, pname:deviceGeneratedCommands>>
8467e5c31af7Sopenharmony_ci    feature must: be enabled
8468e5c31af7Sopenharmony_ci****
8469e5c31af7Sopenharmony_ci
8470e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCmdBindPipelineShaderGroupNV.adoc[]
8471e5c31af7Sopenharmony_ci--
8472e5c31af7Sopenharmony_ciendif::VK_NV_device_generated_commands[]
8473e5c31af7Sopenharmony_ci
8474e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_object[]
8475e5c31af7Sopenharmony_ci[[pipelines-shader-object-interaction]]
8476e5c31af7Sopenharmony_ci=== Interaction With Shader Objects
8477e5c31af7Sopenharmony_ci
8478e5c31af7Sopenharmony_ciIf the <<features-shaderObject, pname:shaderObject>> feature is enabled,
8479e5c31af7Sopenharmony_ciapplications can: use both pipelines and <<shaders-objects, shader objects>>
8480e5c31af7Sopenharmony_ciat the same time.
8481e5c31af7Sopenharmony_ciThe interaction between pipelines and shader objects is described in
8482e5c31af7Sopenharmony_ci<<shaders-objects-pipeline-interaction, Interaction with Pipelines>>.
8483e5c31af7Sopenharmony_ciendif::VK_EXT_shader_object[]
8484e5c31af7Sopenharmony_ci
8485e5c31af7Sopenharmony_ci[[pipelines-dynamic-state]]
8486e5c31af7Sopenharmony_ci== Dynamic State
8487e5c31af7Sopenharmony_ci
8488e5c31af7Sopenharmony_ciWhen a pipeline object is bound, any pipeline object state that is not
8489e5c31af7Sopenharmony_cispecified as dynamic is applied to the command buffer state.
8490e5c31af7Sopenharmony_ciPipeline object state that is specified as dynamic is not applied to the
8491e5c31af7Sopenharmony_cicommand buffer state at this time.
8492e5c31af7Sopenharmony_ciInstead, dynamic state can: be modified at any time and persists for the
8493e5c31af7Sopenharmony_cilifetime of the command buffer, or until modified by another dynamic state
8494e5c31af7Sopenharmony_cisetting command, or made invalid by another pipeline bind with that state
8495e5c31af7Sopenharmony_cispecified as static.
8496e5c31af7Sopenharmony_ci
8497e5c31af7Sopenharmony_ciWhen a pipeline object is bound, the following applies to each state
8498e5c31af7Sopenharmony_ciparameter:
8499e5c31af7Sopenharmony_ci
8500e5c31af7Sopenharmony_ci  * If the state is not specified as dynamic in the new pipeline object,
8501e5c31af7Sopenharmony_ci    then that command buffer state is overwritten by the state in the new
8502e5c31af7Sopenharmony_ci    pipeline object.
8503e5c31af7Sopenharmony_ci    Before any draw or dispatch call with this pipeline there must: not have
8504e5c31af7Sopenharmony_ci    been any calls to any of the corresponding dynamic state setting
8505e5c31af7Sopenharmony_ci    commands after this pipeline was bound.
8506e5c31af7Sopenharmony_ci  * If the state is specified as dynamic in the new pipeline object, then
8507e5c31af7Sopenharmony_ci    that command buffer state is not disturbed.
8508e5c31af7Sopenharmony_ci    Before any draw or dispatch call with this pipeline there must: have
8509e5c31af7Sopenharmony_ci    been at least one call to each of the corresponding dynamic state
8510e5c31af7Sopenharmony_ci    setting commands.
8511e5c31af7Sopenharmony_ci    The state-setting commands must: be recorded after command buffer
8512e5c31af7Sopenharmony_ci    recording was begun, or after the last command binding a pipeline object
8513e5c31af7Sopenharmony_ci    with that state specified as static, whichever was the latter.
8514e5c31af7Sopenharmony_ci  * If the state is not included (corresponding pointer in
8515e5c31af7Sopenharmony_ci    slink:VkGraphicsPipelineCreateInfo was `NULL` or was ignored) in the new
8516e5c31af7Sopenharmony_ci    pipeline object, then that command buffer state is not disturbed.
8517e5c31af7Sopenharmony_ciifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
8518e5c31af7Sopenharmony_ci    For example, mesh shading pipelines do not include vertex input state
8519e5c31af7Sopenharmony_ci    and therefore do not disturb any such command buffer state.
8520e5c31af7Sopenharmony_ciendif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
8521e5c31af7Sopenharmony_ci
8522e5c31af7Sopenharmony_ciDynamic state that does not affect the result of operations can: be left
8523e5c31af7Sopenharmony_ciundefined:.
8524e5c31af7Sopenharmony_ci
8525e5c31af7Sopenharmony_ci[NOTE]
8526e5c31af7Sopenharmony_ci.Note
8527e5c31af7Sopenharmony_ci====
8528e5c31af7Sopenharmony_ciFor example, if blending is disabled by the pipeline object state then the
8529e5c31af7Sopenharmony_cidynamic color blend constants do not need to be specified in the command
8530e5c31af7Sopenharmony_cibuffer, even if this state is specified as dynamic in the pipeline object.
8531e5c31af7Sopenharmony_ci====
8532e5c31af7Sopenharmony_ci
8533e5c31af7Sopenharmony_ci
8534e5c31af7Sopenharmony_ciifdef::VK_AMD_shader_info,VK_KHR_pipeline_executable_properties,VK_EXT_pipeline_properties[]
8535e5c31af7Sopenharmony_ci[[pipelines-shader-information]]
8536e5c31af7Sopenharmony_ci== Pipeline Properties and Shader Information
8537e5c31af7Sopenharmony_ciendif::VK_AMD_shader_info,VK_KHR_pipeline_executable_properties,VK_EXT_pipeline_properties[]
8538e5c31af7Sopenharmony_ci
8539e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_executable_properties[]
8540e5c31af7Sopenharmony_ci[open,refpage='vkGetPipelineExecutablePropertiesKHR',desc='Get the executables associated with a pipeline',type='protos']
8541e5c31af7Sopenharmony_ci--
8542e5c31af7Sopenharmony_ciWhen a pipeline is created, its state and shaders are compiled into zero or
8543e5c31af7Sopenharmony_cimore device-specific executables, which are used when executing commands
8544e5c31af7Sopenharmony_ciagainst that pipeline.
8545e5c31af7Sopenharmony_ciTo query the properties of these pipeline executables, call:
8546e5c31af7Sopenharmony_ci
8547e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPipelineExecutablePropertiesKHR.adoc[]
8548e5c31af7Sopenharmony_ci
8549e5c31af7Sopenharmony_ci  * pname:device is the device that created the pipeline.
8550e5c31af7Sopenharmony_ci  * pname:pPipelineInfo describes the pipeline being queried.
8551e5c31af7Sopenharmony_ci  * pname:pExecutableCount is a pointer to an integer related to the number
8552e5c31af7Sopenharmony_ci    of pipeline executables available or queried, as described below.
8553e5c31af7Sopenharmony_ci  * pname:pProperties is either `NULL` or a pointer to an array of
8554e5c31af7Sopenharmony_ci    slink:VkPipelineExecutablePropertiesKHR structures.
8555e5c31af7Sopenharmony_ci
8556e5c31af7Sopenharmony_ciIf pname:pProperties is `NULL`, then the number of pipeline executables
8557e5c31af7Sopenharmony_ciassociated with the pipeline is returned in pname:pExecutableCount.
8558e5c31af7Sopenharmony_ciOtherwise, pname:pExecutableCount must: point to a variable set by the user
8559e5c31af7Sopenharmony_cito the number of elements in the pname:pProperties array, and on return the
8560e5c31af7Sopenharmony_civariable is overwritten with the number of structures actually written to
8561e5c31af7Sopenharmony_cipname:pProperties.
8562e5c31af7Sopenharmony_ciIf pname:pExecutableCount is less than the number of pipeline executables
8563e5c31af7Sopenharmony_ciassociated with the pipeline, at most pname:pExecutableCount structures will
8564e5c31af7Sopenharmony_cibe written, and ename:VK_INCOMPLETE will be returned instead of
8565e5c31af7Sopenharmony_ciename:VK_SUCCESS, to indicate that not all the available properties were
8566e5c31af7Sopenharmony_cireturned.
8567e5c31af7Sopenharmony_ci
8568e5c31af7Sopenharmony_ci.Valid Usage
8569e5c31af7Sopenharmony_ci****
8570e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelineExecutablePropertiesKHR-pipelineExecutableInfo-03270]]
8571e5c31af7Sopenharmony_ci    The <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>>
8572e5c31af7Sopenharmony_ci    feature must: be enabled
8573e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelineExecutablePropertiesKHR-pipeline-03271]]
8574e5c31af7Sopenharmony_ci    The pname:pipeline member of pname:pPipelineInfo must: have been created
8575e5c31af7Sopenharmony_ci    with pname:device
8576e5c31af7Sopenharmony_ci****
8577e5c31af7Sopenharmony_ci
8578e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPipelineExecutablePropertiesKHR.adoc[]
8579e5c31af7Sopenharmony_ci--
8580e5c31af7Sopenharmony_ci
8581e5c31af7Sopenharmony_ci[open,refpage='VkPipelineExecutablePropertiesKHR',desc='Structure describing a pipeline executable',type='structs']
8582e5c31af7Sopenharmony_ci--
8583e5c31af7Sopenharmony_ciThe sname:VkPipelineExecutablePropertiesKHR structure is defined as:
8584e5c31af7Sopenharmony_ci
8585e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineExecutablePropertiesKHR.adoc[]
8586e5c31af7Sopenharmony_ci
8587e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
8588e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
8589e5c31af7Sopenharmony_ci    structure.
8590e5c31af7Sopenharmony_ci  * pname:stages is a bitmask of zero or more elink:VkShaderStageFlagBits
8591e5c31af7Sopenharmony_ci    indicating which shader stages (if any) were principally used as inputs
8592e5c31af7Sopenharmony_ci    to compile this pipeline executable.
8593e5c31af7Sopenharmony_ci  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
8594e5c31af7Sopenharmony_ci    containing a null-terminated UTF-8 string which is a short human
8595e5c31af7Sopenharmony_ci    readable name for this pipeline executable.
8596e5c31af7Sopenharmony_ci  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
8597e5c31af7Sopenharmony_ci    containing a null-terminated UTF-8 string which is a human readable
8598e5c31af7Sopenharmony_ci    description for this pipeline executable.
8599e5c31af7Sopenharmony_ci  * pname:subgroupSize is the subgroup size with which this pipeline
8600e5c31af7Sopenharmony_ci    executable is dispatched.
8601e5c31af7Sopenharmony_ci
8602e5c31af7Sopenharmony_ciNot all implementations have a 1:1 mapping between shader stages and
8603e5c31af7Sopenharmony_cipipeline executables and some implementations may: reduce a given shader
8604e5c31af7Sopenharmony_cistage to fixed function hardware programming such that no pipeline
8605e5c31af7Sopenharmony_ciexecutable is available.
8606e5c31af7Sopenharmony_ciNo guarantees are provided about the mapping between shader stages and
8607e5c31af7Sopenharmony_cipipeline executables and pname:stages should: be considered a best effort
8608e5c31af7Sopenharmony_cihint.
8609e5c31af7Sopenharmony_ciBecause the application cannot: rely on the pname:stages field to provide an
8610e5c31af7Sopenharmony_ciexact description, pname:name and pname:description provide a human readable
8611e5c31af7Sopenharmony_ciname and description which more accurately describes the given pipeline
8612e5c31af7Sopenharmony_ciexecutable.
8613e5c31af7Sopenharmony_ci
8614e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineExecutablePropertiesKHR.adoc[]
8615e5c31af7Sopenharmony_ci--
8616e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_executable_properties[]
8617e5c31af7Sopenharmony_ci
8618e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_properties[]
8619e5c31af7Sopenharmony_ci[open,refpage='vkGetPipelinePropertiesEXT',desc='Query pipeline properties',type='protos']
8620e5c31af7Sopenharmony_ci--
8621e5c31af7Sopenharmony_ciTo query the pipeline properties call:
8622e5c31af7Sopenharmony_ci
8623e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPipelinePropertiesEXT.adoc[]
8624e5c31af7Sopenharmony_ci
8625e5c31af7Sopenharmony_ci  * pname:device is the logical device that created the pipeline.
8626e5c31af7Sopenharmony_ci  * pname:pPipelineInfo is a pointer to a slink:VkPipelineInfoEXT structure
8627e5c31af7Sopenharmony_ci    which describes the pipeline being queried.
8628e5c31af7Sopenharmony_ci  * pname:pPipelineProperties is a pointer to a slink:VkBaseOutStructure
8629e5c31af7Sopenharmony_ci    structure in which the pipeline properties will be written.
8630e5c31af7Sopenharmony_ci
8631e5c31af7Sopenharmony_ciTo query a pipeline's pname:pipelineIdentifier pass a
8632e5c31af7Sopenharmony_cislink:VkPipelinePropertiesIdentifierEXT structure in
8633e5c31af7Sopenharmony_cipname:pPipelineProperties.
8634e5c31af7Sopenharmony_ciEach pipeline is associated with a pname:pipelineIdentifier and the
8635e5c31af7Sopenharmony_ciidentifier is implementation specific.
8636e5c31af7Sopenharmony_ci
8637e5c31af7Sopenharmony_ci.Valid Usage
8638e5c31af7Sopenharmony_ci****
8639e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelinePropertiesEXT-pipeline-06738]]
8640e5c31af7Sopenharmony_ci    The pname:pipeline member of pname:pPipelineInfo must: have been created
8641e5c31af7Sopenharmony_ci    with pname:device
8642e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelinePropertiesEXT-pPipelineProperties-06739]]
8643e5c31af7Sopenharmony_ci    pname:pPipelineProperties must: be a valid pointer to a
8644e5c31af7Sopenharmony_ci    slink:VkPipelinePropertiesIdentifierEXT structure
8645e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelinePropertiesEXT-None-06766]]
8646e5c31af7Sopenharmony_ci    The <<features-pipelinePropertiesIdentifier,
8647e5c31af7Sopenharmony_ci    pname:pipelinePropertiesIdentifier>> feature must: be enabled
8648e5c31af7Sopenharmony_ci****
8649e5c31af7Sopenharmony_ci
8650e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPipelinePropertiesEXT.adoc[]
8651e5c31af7Sopenharmony_ci--
8652e5c31af7Sopenharmony_ci
8653e5c31af7Sopenharmony_ci[open,refpage='VkPipelinePropertiesIdentifierEXT',desc='Structure used to retrieve pipeline properties',type='structs']
8654e5c31af7Sopenharmony_ci--
8655e5c31af7Sopenharmony_ciThe sname:VkPipelinePropertiesIdentifierEXT structure is defined as:
8656e5c31af7Sopenharmony_ci
8657e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelinePropertiesIdentifierEXT.adoc[]
8658e5c31af7Sopenharmony_ci
8659e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
8660e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
8661e5c31af7Sopenharmony_ci    structure.
8662e5c31af7Sopenharmony_ci  * pname:pipelineIdentifier is an array of ename:VK_UUID_SIZE code:uint8_t
8663e5c31af7Sopenharmony_ci    values into which the pipeline identifier will be written.
8664e5c31af7Sopenharmony_ci
8665e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelinePropertiesIdentifierEXT.adoc[]
8666e5c31af7Sopenharmony_ci--
8667e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_properties[]
8668e5c31af7Sopenharmony_ci
8669e5c31af7Sopenharmony_ci// This structure is used by both vkGetPipelineExecutablePropertiesKHR and
8670e5c31af7Sopenharmony_ci// vkGetPipelinePropertiesEXT above, placing it in a nonstandard position.
8671e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_executable_properties,VK_EXT_pipeline_properties[]
8672e5c31af7Sopenharmony_ci[open,refpage='VkPipelineInfoKHR',desc='Structure describing a pipeline',type='structs',alias='VkPipelineInfoEXT']
8673e5c31af7Sopenharmony_ci--
8674e5c31af7Sopenharmony_ciThe sname:VkPipelineInfoKHR structure is defined as:
8675e5c31af7Sopenharmony_ci
8676e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineInfoKHR.adoc[]
8677e5c31af7Sopenharmony_ci
8678e5c31af7Sopenharmony_ciifdef::VK_EXT_pipeline_properties[]
8679e5c31af7Sopenharmony_cior the equivalent
8680e5c31af7Sopenharmony_ci
8681e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineInfoEXT.adoc[]
8682e5c31af7Sopenharmony_ciendif::VK_EXT_pipeline_properties[]
8683e5c31af7Sopenharmony_ci
8684e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
8685e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
8686e5c31af7Sopenharmony_ci    structure.
8687e5c31af7Sopenharmony_ci  * pname:pipeline is a sname:VkPipeline handle.
8688e5c31af7Sopenharmony_ci
8689e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineInfoKHR.adoc[]
8690e5c31af7Sopenharmony_ci--
8691e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_executable_properties,VK_EXT_pipeline_properties[]
8692e5c31af7Sopenharmony_ci
8693e5c31af7Sopenharmony_ciifdef::VK_KHR_pipeline_executable_properties[]
8694e5c31af7Sopenharmony_ci[open,refpage='vkGetPipelineExecutableStatisticsKHR',desc='Get compile time statistics associated with a pipeline executable',type='protos']
8695e5c31af7Sopenharmony_ci--
8696e5c31af7Sopenharmony_ciEach pipeline executable may: have a set of statistics associated with it
8697e5c31af7Sopenharmony_cithat are generated by the pipeline compilation process.
8698e5c31af7Sopenharmony_ciThese statistics may: include things such as instruction counts, amount of
8699e5c31af7Sopenharmony_cispilling (if any), maximum number of simultaneous threads, or anything else
8700e5c31af7Sopenharmony_ciwhich may: aid developers in evaluating the expected performance of a
8701e5c31af7Sopenharmony_cishader.
8702e5c31af7Sopenharmony_ciTo query the compile time statistics associated with a pipeline executable,
8703e5c31af7Sopenharmony_cicall:
8704e5c31af7Sopenharmony_ci
8705e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPipelineExecutableStatisticsKHR.adoc[]
8706e5c31af7Sopenharmony_ci
8707e5c31af7Sopenharmony_ci  * pname:device is the device that created the pipeline.
8708e5c31af7Sopenharmony_ci  * pname:pExecutableInfo describes the pipeline executable being queried.
8709e5c31af7Sopenharmony_ci  * pname:pStatisticCount is a pointer to an integer related to the number
8710e5c31af7Sopenharmony_ci    of statistics available or queried, as described below.
8711e5c31af7Sopenharmony_ci  * pname:pStatistics is either `NULL` or a pointer to an array of
8712e5c31af7Sopenharmony_ci    slink:VkPipelineExecutableStatisticKHR structures.
8713e5c31af7Sopenharmony_ci
8714e5c31af7Sopenharmony_ciIf pname:pStatistics is `NULL`, then the number of statistics associated
8715e5c31af7Sopenharmony_ciwith the pipeline executable is returned in pname:pStatisticCount.
8716e5c31af7Sopenharmony_ciOtherwise, pname:pStatisticCount must: point to a variable set by the user
8717e5c31af7Sopenharmony_cito the number of elements in the pname:pStatistics array, and on return the
8718e5c31af7Sopenharmony_civariable is overwritten with the number of structures actually written to
8719e5c31af7Sopenharmony_cipname:pStatistics.
8720e5c31af7Sopenharmony_ciIf pname:pStatisticCount is less than the number of statistics associated
8721e5c31af7Sopenharmony_ciwith the pipeline executable, at most pname:pStatisticCount structures will
8722e5c31af7Sopenharmony_cibe written, and ename:VK_INCOMPLETE will be returned instead of
8723e5c31af7Sopenharmony_ciename:VK_SUCCESS, to indicate that not all the available statistics were
8724e5c31af7Sopenharmony_cireturned.
8725e5c31af7Sopenharmony_ci
8726e5c31af7Sopenharmony_ci.Valid Usage
8727e5c31af7Sopenharmony_ci****
8728e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipelineExecutableInfo-03272]]
8729e5c31af7Sopenharmony_ci    The <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>>
8730e5c31af7Sopenharmony_ci    feature must: be enabled
8731e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03273]]
8732e5c31af7Sopenharmony_ci    The pname:pipeline member of pname:pExecutableInfo must: have been
8733e5c31af7Sopenharmony_ci    created with pname:device
8734e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03274]]
8735e5c31af7Sopenharmony_ci    The pname:pipeline member of pname:pExecutableInfo must: have been
8736e5c31af7Sopenharmony_ci    created with ename:VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR
8737e5c31af7Sopenharmony_ci****
8738e5c31af7Sopenharmony_ci
8739e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPipelineExecutableStatisticsKHR.adoc[]
8740e5c31af7Sopenharmony_ci--
8741e5c31af7Sopenharmony_ci
8742e5c31af7Sopenharmony_ci[open,refpage='VkPipelineExecutableInfoKHR',desc='Structure describing a pipeline executable to query for associated statistics or internal representations',type='structs']
8743e5c31af7Sopenharmony_ci--
8744e5c31af7Sopenharmony_ciThe sname:VkPipelineExecutableInfoKHR structure is defined as:
8745e5c31af7Sopenharmony_ci
8746e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineExecutableInfoKHR.adoc[]
8747e5c31af7Sopenharmony_ci
8748e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
8749e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
8750e5c31af7Sopenharmony_ci    structure.
8751e5c31af7Sopenharmony_ci  * pname:pipeline is the pipeline to query.
8752e5c31af7Sopenharmony_ci  * pname:executableIndex is the index of the pipeline executable to query
8753e5c31af7Sopenharmony_ci    in the array of executable properties returned by
8754e5c31af7Sopenharmony_ci    flink:vkGetPipelineExecutablePropertiesKHR.
8755e5c31af7Sopenharmony_ci
8756e5c31af7Sopenharmony_ci.Valid Usage
8757e5c31af7Sopenharmony_ci****
8758e5c31af7Sopenharmony_ci  * [[VUID-VkPipelineExecutableInfoKHR-executableIndex-03275]]
8759e5c31af7Sopenharmony_ci    pname:executableIndex must: be less than the number of pipeline
8760e5c31af7Sopenharmony_ci    executables associated with pname:pipeline as returned in the
8761e5c31af7Sopenharmony_ci    pname:pExecutableCount parameter of
8762e5c31af7Sopenharmony_ci    fname:vkGetPipelineExecutablePropertiesKHR
8763e5c31af7Sopenharmony_ci****
8764e5c31af7Sopenharmony_ci
8765e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineExecutableInfoKHR.adoc[]
8766e5c31af7Sopenharmony_ci--
8767e5c31af7Sopenharmony_ci
8768e5c31af7Sopenharmony_ci[open,refpage='VkPipelineExecutableStatisticKHR',desc='Structure describing a compile time pipeline executable statistic',type='structs']
8769e5c31af7Sopenharmony_ci--
8770e5c31af7Sopenharmony_ciThe sname:VkPipelineExecutableStatisticKHR structure is defined as:
8771e5c31af7Sopenharmony_ci
8772e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineExecutableStatisticKHR.adoc[]
8773e5c31af7Sopenharmony_ci
8774e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
8775e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
8776e5c31af7Sopenharmony_ci    structure.
8777e5c31af7Sopenharmony_ci  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
8778e5c31af7Sopenharmony_ci    containing a null-terminated UTF-8 string which is a short human
8779e5c31af7Sopenharmony_ci    readable name for this statistic.
8780e5c31af7Sopenharmony_ci  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
8781e5c31af7Sopenharmony_ci    containing a null-terminated UTF-8 string which is a human readable
8782e5c31af7Sopenharmony_ci    description for this statistic.
8783e5c31af7Sopenharmony_ci  * pname:format is a elink:VkPipelineExecutableStatisticFormatKHR value
8784e5c31af7Sopenharmony_ci    specifying the format of the data found in pname:value.
8785e5c31af7Sopenharmony_ci  * pname:value is the value of this statistic.
8786e5c31af7Sopenharmony_ci
8787e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineExecutableStatisticKHR.adoc[]
8788e5c31af7Sopenharmony_ci--
8789e5c31af7Sopenharmony_ci
8790e5c31af7Sopenharmony_ci[open,refpage='VkPipelineExecutableStatisticFormatKHR',desc='Enum describing a pipeline executable statistic's data format',type='enums']
8791e5c31af7Sopenharmony_ci--
8792e5c31af7Sopenharmony_ciThe ename:VkPipelineExecutableStatisticFormatKHR enum is defined as:
8793e5c31af7Sopenharmony_ci
8794e5c31af7Sopenharmony_ciinclude::{generated}/api/enums/VkPipelineExecutableStatisticFormatKHR.adoc[]
8795e5c31af7Sopenharmony_ci
8796e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR specifies that
8797e5c31af7Sopenharmony_ci    the statistic is returned as a 32-bit boolean value which must: be
8798e5c31af7Sopenharmony_ci    either ename:VK_TRUE or ename:VK_FALSE and should: be read from the
8799e5c31af7Sopenharmony_ci    fname:b32 field of sname:VkPipelineExecutableStatisticValueKHR.
8800e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR specifies that
8801e5c31af7Sopenharmony_ci    the statistic is returned as a signed 64-bit integer and should: be read
8802e5c31af7Sopenharmony_ci    from the fname:i64 field of sname:VkPipelineExecutableStatisticValueKHR.
8803e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR specifies that
8804e5c31af7Sopenharmony_ci    the statistic is returned as an unsigned 64-bit integer and should: be
8805e5c31af7Sopenharmony_ci    read from the fname:u64 field of
8806e5c31af7Sopenharmony_ci    sname:VkPipelineExecutableStatisticValueKHR.
8807e5c31af7Sopenharmony_ci  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR specifies that
8808e5c31af7Sopenharmony_ci    the statistic is returned as a 64-bit floating-point value and should:
8809e5c31af7Sopenharmony_ci    be read from the fname:f64 field of
8810e5c31af7Sopenharmony_ci    sname:VkPipelineExecutableStatisticValueKHR.
8811e5c31af7Sopenharmony_ci--
8812e5c31af7Sopenharmony_ci
8813e5c31af7Sopenharmony_ci[open,refpage='VkPipelineExecutableStatisticValueKHR',desc='A union describing a pipeline executable statistic's value',type='structs']
8814e5c31af7Sopenharmony_ci--
8815e5c31af7Sopenharmony_ciThe sname:VkPipelineExecutableStatisticValueKHR union is defined as:
8816e5c31af7Sopenharmony_ci
8817e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineExecutableStatisticValueKHR.adoc[]
8818e5c31af7Sopenharmony_ci
8819e5c31af7Sopenharmony_ci  * pname:b32 is the 32-bit boolean value if the
8820e5c31af7Sopenharmony_ci    ename:VkPipelineExecutableStatisticFormatKHR is
8821e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR.
8822e5c31af7Sopenharmony_ci  * pname:i64 is the signed 64-bit integer value if the
8823e5c31af7Sopenharmony_ci    ename:VkPipelineExecutableStatisticFormatKHR is
8824e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR.
8825e5c31af7Sopenharmony_ci  * pname:u64 is the unsigned 64-bit integer value if the
8826e5c31af7Sopenharmony_ci    ename:VkPipelineExecutableStatisticFormatKHR is
8827e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR.
8828e5c31af7Sopenharmony_ci  * pname:f64 is the 64-bit floating-point value if the
8829e5c31af7Sopenharmony_ci    ename:VkPipelineExecutableStatisticFormatKHR is
8830e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR.
8831e5c31af7Sopenharmony_ci
8832e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineExecutableStatisticValueKHR.adoc[]
8833e5c31af7Sopenharmony_ci--
8834e5c31af7Sopenharmony_ci
8835e5c31af7Sopenharmony_ci[open,refpage='vkGetPipelineExecutableInternalRepresentationsKHR',desc='Get internal representations of the pipeline executable',type='protos']
8836e5c31af7Sopenharmony_ci--
8837e5c31af7Sopenharmony_ciEach pipeline executable may: have one or more text or binary internal
8838e5c31af7Sopenharmony_cirepresentations associated with it which are generated as part of the
8839e5c31af7Sopenharmony_cicompile process.
8840e5c31af7Sopenharmony_ciThese may: include the final shader assembly, a binary form of the compiled
8841e5c31af7Sopenharmony_cishader, or the shader compiler's internal representation at any number of
8842e5c31af7Sopenharmony_ciintermediate compile steps.
8843e5c31af7Sopenharmony_ciTo query the internal representations associated with a pipeline executable,
8844e5c31af7Sopenharmony_cicall:
8845e5c31af7Sopenharmony_ci
8846e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkGetPipelineExecutableInternalRepresentationsKHR.adoc[]
8847e5c31af7Sopenharmony_ci
8848e5c31af7Sopenharmony_ci  * pname:device is the device that created the pipeline.
8849e5c31af7Sopenharmony_ci  * pname:pExecutableInfo describes the pipeline executable being queried.
8850e5c31af7Sopenharmony_ci  * pname:pInternalRepresentationCount is a pointer to an integer related to
8851e5c31af7Sopenharmony_ci    the number of internal representations available or queried, as
8852e5c31af7Sopenharmony_ci    described below.
8853e5c31af7Sopenharmony_ci  * pname:pInternalRepresentations is either `NULL` or a pointer to an array
8854e5c31af7Sopenharmony_ci    of slink:VkPipelineExecutableInternalRepresentationKHR structures.
8855e5c31af7Sopenharmony_ci
8856e5c31af7Sopenharmony_ciIf pname:pInternalRepresentations is `NULL`, then the number of internal
8857e5c31af7Sopenharmony_cirepresentations associated with the pipeline executable is returned in
8858e5c31af7Sopenharmony_cipname:pInternalRepresentationCount.
8859e5c31af7Sopenharmony_ciOtherwise, pname:pInternalRepresentationCount must: point to a variable set
8860e5c31af7Sopenharmony_ciby the user to the number of elements in the pname:pInternalRepresentations
8861e5c31af7Sopenharmony_ciarray, and on return the variable is overwritten with the number of
8862e5c31af7Sopenharmony_cistructures actually written to pname:pInternalRepresentations.
8863e5c31af7Sopenharmony_ciIf pname:pInternalRepresentationCount is less than the number of internal
8864e5c31af7Sopenharmony_cirepresentations associated with the pipeline executable, at most
8865e5c31af7Sopenharmony_cipname:pInternalRepresentationCount structures will be written, and
8866e5c31af7Sopenharmony_ciename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
8867e5c31af7Sopenharmony_ciindicate that not all the available representations were returned.
8868e5c31af7Sopenharmony_ci
8869e5c31af7Sopenharmony_ciWhile the details of the internal representations remain
8870e5c31af7Sopenharmony_ciimplementation-dependent, the implementation should: order the internal
8871e5c31af7Sopenharmony_cirepresentations in the order in which they occur in the compiled pipeline
8872e5c31af7Sopenharmony_ciwith the final shader assembly (if any) last.
8873e5c31af7Sopenharmony_ci
8874e5c31af7Sopenharmony_ci.Valid Usage
8875e5c31af7Sopenharmony_ci****
8876e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipelineExecutableInfo-03276]]
8877e5c31af7Sopenharmony_ci    The <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>>
8878e5c31af7Sopenharmony_ci    feature must: be enabled
8879e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03277]]
8880e5c31af7Sopenharmony_ci    The pname:pipeline member of pname:pExecutableInfo must: have been
8881e5c31af7Sopenharmony_ci    created with pname:device
8882e5c31af7Sopenharmony_ci  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03278]]
8883e5c31af7Sopenharmony_ci    The pname:pipeline member of pname:pExecutableInfo must: have been
8884e5c31af7Sopenharmony_ci    created with
8885e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
8886e5c31af7Sopenharmony_ci****
8887e5c31af7Sopenharmony_ci
8888e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkGetPipelineExecutableInternalRepresentationsKHR.adoc[]
8889e5c31af7Sopenharmony_ci--
8890e5c31af7Sopenharmony_ci
8891e5c31af7Sopenharmony_ci[open,refpage='VkPipelineExecutableInternalRepresentationKHR',desc='Structure describing the textual form of a pipeline executable internal representation',type='structs']
8892e5c31af7Sopenharmony_ci--
8893e5c31af7Sopenharmony_ciThe sname:VkPipelineExecutableInternalRepresentationKHR structure is defined
8894e5c31af7Sopenharmony_cias:
8895e5c31af7Sopenharmony_ci
8896e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkPipelineExecutableInternalRepresentationKHR.adoc[]
8897e5c31af7Sopenharmony_ci
8898e5c31af7Sopenharmony_ci  * pname:sType is a elink:VkStructureType value identifying this structure.
8899e5c31af7Sopenharmony_ci  * pname:pNext is `NULL` or a pointer to a structure extending this
8900e5c31af7Sopenharmony_ci    structure.
8901e5c31af7Sopenharmony_ci  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
8902e5c31af7Sopenharmony_ci    containing a null-terminated UTF-8 string which is a short human
8903e5c31af7Sopenharmony_ci    readable name for this internal representation.
8904e5c31af7Sopenharmony_ci  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
8905e5c31af7Sopenharmony_ci    containing a null-terminated UTF-8 string which is a human readable
8906e5c31af7Sopenharmony_ci    description for this internal representation.
8907e5c31af7Sopenharmony_ci  * pname:isText specifies whether the returned data is text or opaque data.
8908e5c31af7Sopenharmony_ci    If pname:isText is ename:VK_TRUE then the data returned in pname:pData
8909e5c31af7Sopenharmony_ci    is text and is guaranteed to be a null-terminated UTF-8 string.
8910e5c31af7Sopenharmony_ci  * pname:dataSize is an integer related to the size, in bytes, of the
8911e5c31af7Sopenharmony_ci    internal representation's data, as described below.
8912e5c31af7Sopenharmony_ci  * pname:pData is either `NULL` or a pointer to a block of data into which
8913e5c31af7Sopenharmony_ci    the implementation will write the internal representation.
8914e5c31af7Sopenharmony_ci
8915e5c31af7Sopenharmony_ciIf pname:pData is `NULL`, then the size, in bytes, of the internal
8916e5c31af7Sopenharmony_cirepresentation data is returned in pname:dataSize.
8917e5c31af7Sopenharmony_ciOtherwise, pname:dataSize must be the size of the buffer, in bytes, pointed
8918e5c31af7Sopenharmony_cito by pname:pData and on return pname:dataSize is overwritten with the
8919e5c31af7Sopenharmony_cinumber of bytes of data actually written to pname:pData including any
8920e5c31af7Sopenharmony_citrailing null character.
8921e5c31af7Sopenharmony_ciIf pname:dataSize is less than the size, in bytes, of the internal
8922e5c31af7Sopenharmony_cirepresentation's data, at most pname:dataSize bytes of data will be written
8923e5c31af7Sopenharmony_cito pname:pData, and ename:VK_INCOMPLETE will be returned instead of
8924e5c31af7Sopenharmony_ciename:VK_SUCCESS, to indicate that not all the available representation was
8925e5c31af7Sopenharmony_cireturned.
8926e5c31af7Sopenharmony_ci
8927e5c31af7Sopenharmony_ciIf pname:isText is ename:VK_TRUE and pname:pData is not `NULL` and
8928e5c31af7Sopenharmony_cipname:dataSize is not zero, the last byte written to pname:pData will be a
8929e5c31af7Sopenharmony_cinull character.
8930e5c31af7Sopenharmony_ci
8931e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkPipelineExecutableInternalRepresentationKHR.adoc[]
8932e5c31af7Sopenharmony_ci--
8933e5c31af7Sopenharmony_ciendif::VK_KHR_pipeline_executable_properties[]
8934e5c31af7Sopenharmony_ci
8935e5c31af7Sopenharmony_ci
8936e5c31af7Sopenharmony_ciifdef::VK_AMD_shader_info[]
8937e5c31af7Sopenharmony_ciinclude::{chapters}/VK_AMD_shader_info.adoc[]
8938e5c31af7Sopenharmony_ciendif::VK_AMD_shader_info[]
8939e5c31af7Sopenharmony_ci
8940e5c31af7Sopenharmony_ci
8941e5c31af7Sopenharmony_ci// These includes have their own section headers
8942e5c31af7Sopenharmony_ci
8943e5c31af7Sopenharmony_ciifdef::VK_AMD_pipeline_compiler_control[]
8944e5c31af7Sopenharmony_ciinclude::{chapters}/VK_AMD_pipeline_compiler_control.adoc[]
8945e5c31af7Sopenharmony_ciendif::VK_AMD_pipeline_compiler_control[]
8946e5c31af7Sopenharmony_ci
8947e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_feedback[]
8948e5c31af7Sopenharmony_ciinclude::{chapters}/VK_EXT_pipeline_creation_feedback/pipelines.adoc[]
8949e5c31af7Sopenharmony_ciendif::VK_VERSION_1_3,VK_EXT_pipeline_creation_feedback[]
8950