xref: /aosp_15_r20/external/mesa3d/docs/vulkan/graphics-state.rst (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard WorkerGraphics state
2*61046927SAndroid Build Coastguard Worker==============
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard WorkerThe Mesa Vulkan runtime provides helpers for managing the numerous pieces
5*61046927SAndroid Build Coastguard Workerof graphics state associated with a ``VkPipeline`` or set dynamically on a
6*61046927SAndroid Build Coastguard Workercommand buffer.  No such helpers are provided for compute or ray-tracing
7*61046927SAndroid Build Coastguard Workerbecause they have little or no state besides the shaders themselves.
8*61046927SAndroid Build Coastguard Worker
9*61046927SAndroid Build Coastguard Worker
10*61046927SAndroid Build Coastguard WorkerPipeline state
11*61046927SAndroid Build Coastguard Worker--------------
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard WorkerAll (possibly dynamic) Vulkan graphics pipeline state is encapsulated into
14*61046927SAndroid Build Coastguard Workera single :c:struct:`vk_graphics_pipeline_state` structure which contains
15*61046927SAndroid Build Coastguard Workerpointers to sub-structures for each of the different state categories.
16*61046927SAndroid Build Coastguard WorkerUnlike :c:type:`VkGraphicsPipelineCreateInfo`, the pointers in
17*61046927SAndroid Build Coastguard Worker:c:struct:`vk_graphics_pipeline_state` are guaranteed to be either be
18*61046927SAndroid Build Coastguard WorkerNULL or point to valid and properly populated memory.
19*61046927SAndroid Build Coastguard Worker
20*61046927SAndroid Build Coastguard WorkerWhen creating a pipeline, the
21*61046927SAndroid Build Coastguard Worker:c:func:`vk_graphics_pipeline_state_fill()` function can be used to
22*61046927SAndroid Build Coastguard Workergather all of the state from the core structures as well as various ``pNext``
23*61046927SAndroid Build Coastguard Workerchains into a single state structure.  Whenever an extension struct is
24*61046927SAndroid Build Coastguard Workermissing, a reasonable default value is provided whenever possible.
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker
27*61046927SAndroid Build Coastguard Worker:c:func:`vk_graphics_pipeline_state_fill()` automatically handles both
28*61046927SAndroid Build Coastguard Workerthe render pass and dynamic rendering.  For drivers which use
29*61046927SAndroid Build Coastguard Worker:c:struct:`vk_render_pass`, the :c:struct:`vk_render_pass_state`
30*61046927SAndroid Build Coastguard Workerstructure will be populated as if for dynamic rendering, regardless of
31*61046927SAndroid Build Coastguard Workerwhich path is used.  Drivers which use their own render pass structure
32*61046927SAndroid Build Coastguard Workershould parse the render pass, if available, and pass a
33*61046927SAndroid Build Coastguard Worker:c:struct:`vk_render_pass_state` to the ``driver_rp`` argument of
34*61046927SAndroid Build Coastguard Worker:c:func:`vk_graphics_pipeline_state_fill()` with the relevant information
35*61046927SAndroid Build Coastguard Workerfrom the specified subpass.  If a render pass is available,
36*61046927SAndroid Build Coastguard Worker:c:struct:`vk_render_pass_state` will be populated with the
37*61046927SAndroid Build Coastguard Workerthe information from the :c:struct:`driver_rp`.  If dynamic
38*61046927SAndroid Build Coastguard Workerrendering is used or the driver provides a ``NULL``
39*61046927SAndroid Build Coastguard Worker:c:struct:`driver_rp`, the :c:struct:`vk_render_pass_state`
40*61046927SAndroid Build Coastguard Workerstructure will be populated for dynamic rendering, including color, depth,
41*61046927SAndroid Build Coastguard Workerand stencil attachment formats.
42*61046927SAndroid Build Coastguard Worker
43*61046927SAndroid Build Coastguard WorkerThe usual flow for creating a full graphics pipeline (not library) looks
44*61046927SAndroid Build Coastguard Workerlike this:
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker.. code-block:: c
47*61046927SAndroid Build Coastguard Worker
48*61046927SAndroid Build Coastguard Worker   struct vk_graphics_pipeline_state state = { };
49*61046927SAndroid Build Coastguard Worker   struct vk_graphics_pipeline_all_state all;
50*61046927SAndroid Build Coastguard Worker   vk_graphics_pipeline_state_fill(&device->vk, &state, pCreateInfo,
51*61046927SAndroid Build Coastguard Worker                                   NULL, &all, NULL, 0, NULL);
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker   /* Emit stuff using the state in `state` */
54*61046927SAndroid Build Coastguard Worker
55*61046927SAndroid Build Coastguard WorkerThe :c:struct:`vk_graphics_pipeline_all_state` structure exists to allow
56*61046927SAndroid Build Coastguard Workerthe state to sit on the stack instead of requiring a heap allocation.  This
57*61046927SAndroid Build Coastguard Workeris useful if you intend to use the state right away and don't need to store
58*61046927SAndroid Build Coastguard Workerit.  For pipeline libraries, it's likely more useful to use the dynamically
59*61046927SAndroid Build Coastguard Workerallocated version and store the dynamically allocated memory in the
60*61046927SAndroid Build Coastguard Workerlibrary pipeline.
61*61046927SAndroid Build Coastguard Worker
62*61046927SAndroid Build Coastguard Worker.. code-block:: c
63*61046927SAndroid Build Coastguard Worker
64*61046927SAndroid Build Coastguard Worker   /* Assuming we have a vk_graphics_pipeline_state in pipeline */
65*61046927SAndroid Build Coastguard Worker   memset(&pipeline->state, 0, sizeof(pipeline->state));
66*61046927SAndroid Build Coastguard Worker
67*61046927SAndroid Build Coastguard Worker   for (uint32_t i = 0; i < lib_info->libraryCount; i++) {
68*61046927SAndroid Build Coastguard Worker      VK_FROM_HANDLE(drv_graphics_pipeline_library, lib, lib_info->pLibraries[i]);
69*61046927SAndroid Build Coastguard Worker      vk_graphics_pipeline_state_merge(&pipeline->state, &lib->state);
70*61046927SAndroid Build Coastguard Worker   }
71*61046927SAndroid Build Coastguard Worker
72*61046927SAndroid Build Coastguard Worker   /* This assumes you have a void **state_mem in pipeline */
73*61046927SAndroid Build Coastguard Worker   result = vk_graphics_pipeline_state_fill(&device->vk, &pipeline->state,
74*61046927SAndroid Build Coastguard Worker                                            pCreateInfo, NULL, NULL, pAllocator,
75*61046927SAndroid Build Coastguard Worker                                            VK_SYSTEM_ALLOCATION_SCOPE_OBJECT,
76*61046927SAndroid Build Coastguard Worker                                            &pipeline->state_mem);
77*61046927SAndroid Build Coastguard Worker   if (result != VK_SUCCESS)
78*61046927SAndroid Build Coastguard Worker      return result;
79*61046927SAndroid Build Coastguard Worker
80*61046927SAndroid Build Coastguard WorkerState from dependent libraries can be merged together using
81*61046927SAndroid Build Coastguard Worker:c:func:`vk_graphics_pipeline_state_merge`.
82*61046927SAndroid Build Coastguard Worker:c:func:`vk_graphics_pipeline_state_fill` will then only attempt to
83*61046927SAndroid Build Coastguard Workerpopulate missing fields.  You can also merge dependent pipeline libraries
84*61046927SAndroid Build Coastguard Workertogether but store the final state on the stack for immediate consumption:
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Worker.. code-block:: c
87*61046927SAndroid Build Coastguard Worker
88*61046927SAndroid Build Coastguard Worker   struct vk_graphics_pipeline_state state = { };
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker   for (uint32_t i = 0; i < lib_info->libraryCount; i++) {
91*61046927SAndroid Build Coastguard Worker      VK_FROM_HANDLE(drv_graphics_pipeline_library, lib, lib_info->pLibraries[i]);
92*61046927SAndroid Build Coastguard Worker      vk_graphics_pipeline_state_merge(&state, &lib->state);
93*61046927SAndroid Build Coastguard Worker   }
94*61046927SAndroid Build Coastguard Worker
95*61046927SAndroid Build Coastguard Worker   struct vk_graphics_pipeline_all_state all;
96*61046927SAndroid Build Coastguard Worker   vk_graphics_pipeline_state_fill(&device->vk, &state, pCreateInfo,
97*61046927SAndroid Build Coastguard Worker                                   NULL, &all, NULL, 0, NULL);
98*61046927SAndroid Build Coastguard Worker
99*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_graphics_pipeline_state_fill
100*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
101*61046927SAndroid Build Coastguard Worker
102*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_graphics_pipeline_state_merge
103*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
104*61046927SAndroid Build Coastguard Worker
105*61046927SAndroid Build Coastguard Worker
106*61046927SAndroid Build Coastguard WorkerDynamic state
107*61046927SAndroid Build Coastguard Worker-------------
108*61046927SAndroid Build Coastguard Worker
109*61046927SAndroid Build Coastguard WorkerAll dynamic states in Vulkan, regardless of which API version or extension
110*61046927SAndroid Build Coastguard Workerintroduced them, are represented by the
111*61046927SAndroid Build Coastguard Worker:c:enum:`mesa_vk_dynamic_graphics_state` enum.  This corresponds to the
112*61046927SAndroid Build Coastguard Worker:c:type:`VkDynamicState` enum in the Vulkan API only it's compact (has no
113*61046927SAndroid Build Coastguard Workerholes due to extension namespacing) and a bit better organized.  Each
114*61046927SAndroid Build Coastguard Workerenumerant is named with the name of the state group to which the dynamic
115*61046927SAndroid Build Coastguard Workerstate belongs as well as the name of the dynamic state itself.  The fact
116*61046927SAndroid Build Coastguard Workerthat it's compact allows us to use to index bitsets.
117*61046927SAndroid Build Coastguard Worker
118*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_get_dynamic_graphics_states
119*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
120*61046927SAndroid Build Coastguard Worker
121*61046927SAndroid Build Coastguard WorkerWe also provide a :c:struct:`vk_dynamic_graphics_state` structure which
122*61046927SAndroid Build Coastguard Workercontains all the dynamic graphics states, regardless of which API version
123*61046927SAndroid Build Coastguard Workeror extension introduced them.  This structure can be populated from a
124*61046927SAndroid Build Coastguard Worker:c:struct:`vk_graphics_pipeline_state` via
125*61046927SAndroid Build Coastguard Worker:c:func:`vk_dynamic_graphics_state_init`.
126*61046927SAndroid Build Coastguard Worker
127*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_dynamic_graphics_state_init
128*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
129*61046927SAndroid Build Coastguard Worker
130*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_dynamic_graphics_state_copy
131*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
132*61046927SAndroid Build Coastguard Worker
133*61046927SAndroid Build Coastguard WorkerThere is also a :c:struct:`vk_dynamic_graphics_state` embedded in
134*61046927SAndroid Build Coastguard Worker:c:struct:`vk_command_buffer`.  Should you choose to use them, we provide
135*61046927SAndroid Build Coastguard Workercommon implementations for all ``vkCmdSet*()`` functions.  Two additional
136*61046927SAndroid Build Coastguard Workerfunctions are provided for the driver to call in ``CmdBindPipeline()`` and
137*61046927SAndroid Build Coastguard Worker``CmdBindVertexBuffers2()``:
138*61046927SAndroid Build Coastguard Worker
139*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_cmd_set_dynamic_graphics_state
140*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
141*61046927SAndroid Build Coastguard Worker
142*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_cmd_set_vertex_binding_strides
143*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
144*61046927SAndroid Build Coastguard Worker
145*61046927SAndroid Build Coastguard WorkerTo use the dynamic state framework, you will need the following in your
146*61046927SAndroid Build Coastguard Workerpipeline structure:
147*61046927SAndroid Build Coastguard Worker
148*61046927SAndroid Build Coastguard Worker.. code-block:: c
149*61046927SAndroid Build Coastguard Worker
150*61046927SAndroid Build Coastguard Worker   struct drv_graphics_pipeline {
151*61046927SAndroid Build Coastguard Worker      ....
152*61046927SAndroid Build Coastguard Worker      struct vk_vertex_input_state vi_state;
153*61046927SAndroid Build Coastguard Worker      struct vk_sample_locations_state sl_state;
154*61046927SAndroid Build Coastguard Worker      struct vk_dynamic_graphics_state dynamic;
155*61046927SAndroid Build Coastguard Worker      ...
156*61046927SAndroid Build Coastguard Worker   };
157*61046927SAndroid Build Coastguard Worker
158*61046927SAndroid Build Coastguard WorkerThen, in your pipeline create function,
159*61046927SAndroid Build Coastguard Worker
160*61046927SAndroid Build Coastguard Worker.. code-block:: c
161*61046927SAndroid Build Coastguard Worker
162*61046927SAndroid Build Coastguard Worker   memset(&pipeline->dynamic, 0, sizeof(pipeline->dynamic));
163*61046927SAndroid Build Coastguard Worker   pipeline->dynamic->vi = &pipeline->vi_state;
164*61046927SAndroid Build Coastguard Worker   pipeline->dynamic->ms.sample_locations = &pipeline->sl_state;
165*61046927SAndroid Build Coastguard Worker   vk_dynamic_graphics_state_init(&pipeline->dynamic, &state);
166*61046927SAndroid Build Coastguard Worker
167*61046927SAndroid Build Coastguard WorkerIn your implementation of ``vkCmdBindPipeline()``,
168*61046927SAndroid Build Coastguard Worker
169*61046927SAndroid Build Coastguard Worker.. code-block:: c
170*61046927SAndroid Build Coastguard Worker
171*61046927SAndroid Build Coastguard Worker   vk_cmd_set_dynamic_graphics_state(&cmd->vk, &pipeline->dynamic_state);
172*61046927SAndroid Build Coastguard Worker
173*61046927SAndroid Build Coastguard WorkerAnd, finally, at ``vkCmdDraw*()`` time, the code to emit dynamic state into
174*61046927SAndroid Build Coastguard Workeryour hardware command buffer will look something like this:
175*61046927SAndroid Build Coastguard Worker
176*61046927SAndroid Build Coastguard Worker.. code-block:: c
177*61046927SAndroid Build Coastguard Worker
178*61046927SAndroid Build Coastguard Worker   static void
179*61046927SAndroid Build Coastguard Worker   emit_dynamic_state(struct drv_cmd_buffer *cmd)
180*61046927SAndroid Build Coastguard Worker   {
181*61046927SAndroid Build Coastguard Worker      struct vk_dynamic_graphics_state *dyn = &cmd->vk.dynamic_graphics_state;
182*61046927SAndroid Build Coastguard Worker
183*61046927SAndroid Build Coastguard Worker      if (!vk_dynamic_graphics_state_any_dirty(dyn))
184*61046927SAndroid Build Coastguard Worker         return;
185*61046927SAndroid Build Coastguard Worker
186*61046927SAndroid Build Coastguard Worker      if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VP_VIEWPORTS) |
187*61046927SAndroid Build Coastguard Worker          BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VP_VIEWPORT_COUNT)) {
188*61046927SAndroid Build Coastguard Worker         /* Re-emit viewports */
189*61046927SAndroid Build Coastguard Worker      }
190*61046927SAndroid Build Coastguard Worker
191*61046927SAndroid Build Coastguard Worker      if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VP_SCISSORS) |
192*61046927SAndroid Build Coastguard Worker          BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VP_SCISSOR_COUNT)) {
193*61046927SAndroid Build Coastguard Worker         /* Re-emit scissors */
194*61046927SAndroid Build Coastguard Worker      }
195*61046927SAndroid Build Coastguard Worker
196*61046927SAndroid Build Coastguard Worker      /* etc... */
197*61046927SAndroid Build Coastguard Worker
198*61046927SAndroid Build Coastguard Worker      vk_dynamic_graphics_state_clear_dirty(dyn);
199*61046927SAndroid Build Coastguard Worker   }
200*61046927SAndroid Build Coastguard Worker
201*61046927SAndroid Build Coastguard WorkerAny states used by the currently bound pipeline and attachments are always
202*61046927SAndroid Build Coastguard Workervalid in ``vk_command_buffer::dynamic_graphics_state`` so you can always
203*61046927SAndroid Build Coastguard Workeruse a state even if it isn't dirty on this particular draw.
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_dynamic_graphics_state_dirty_all
206*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
207*61046927SAndroid Build Coastguard Worker
208*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_dynamic_graphics_state_clear_dirty
209*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
210*61046927SAndroid Build Coastguard Worker
211*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_dynamic_graphics_state_any_dirty
212*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
213*61046927SAndroid Build Coastguard Worker
214*61046927SAndroid Build Coastguard Worker
215*61046927SAndroid Build Coastguard WorkerDepth stencil state optimization
216*61046927SAndroid Build Coastguard Worker--------------------------------
217*61046927SAndroid Build Coastguard Worker
218*61046927SAndroid Build Coastguard Worker.. c:autofunction:: vk_optimize_depth_stencil_state
219*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
220*61046927SAndroid Build Coastguard Worker
221*61046927SAndroid Build Coastguard Worker
222*61046927SAndroid Build Coastguard WorkerReference
223*61046927SAndroid Build Coastguard Worker---------
224*61046927SAndroid Build Coastguard Worker
225*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_graphics_pipeline_state
226*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
227*61046927SAndroid Build Coastguard Worker   :members:
228*61046927SAndroid Build Coastguard Worker
229*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_vertex_binding_state
230*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
231*61046927SAndroid Build Coastguard Worker   :members:
232*61046927SAndroid Build Coastguard Worker
233*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_vertex_attribute_state
234*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
235*61046927SAndroid Build Coastguard Worker   :members:
236*61046927SAndroid Build Coastguard Worker
237*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_vertex_input_state
238*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
239*61046927SAndroid Build Coastguard Worker   :members:
240*61046927SAndroid Build Coastguard Worker
241*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_input_assembly_state
242*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
243*61046927SAndroid Build Coastguard Worker   :members:
244*61046927SAndroid Build Coastguard Worker
245*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_tessellation_state
246*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
247*61046927SAndroid Build Coastguard Worker   :members:
248*61046927SAndroid Build Coastguard Worker
249*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_viewport_state
250*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
251*61046927SAndroid Build Coastguard Worker   :members:
252*61046927SAndroid Build Coastguard Worker
253*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_discard_rectangles_state
254*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
255*61046927SAndroid Build Coastguard Worker   :members:
256*61046927SAndroid Build Coastguard Worker
257*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_rasterization_state
258*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
259*61046927SAndroid Build Coastguard Worker   :members:
260*61046927SAndroid Build Coastguard Worker
261*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_fragment_shading_rate_state
262*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
263*61046927SAndroid Build Coastguard Worker   :members:
264*61046927SAndroid Build Coastguard Worker
265*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_sample_locations_state
266*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
267*61046927SAndroid Build Coastguard Worker   :members:
268*61046927SAndroid Build Coastguard Worker
269*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_multisample_state
270*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
271*61046927SAndroid Build Coastguard Worker   :members:
272*61046927SAndroid Build Coastguard Worker
273*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_stencil_test_face_state
274*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
275*61046927SAndroid Build Coastguard Worker   :members:
276*61046927SAndroid Build Coastguard Worker
277*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_depth_stencil_state
278*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
279*61046927SAndroid Build Coastguard Worker   :members:
280*61046927SAndroid Build Coastguard Worker
281*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_color_blend_state
282*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
283*61046927SAndroid Build Coastguard Worker   :members:
284*61046927SAndroid Build Coastguard Worker
285*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_render_pass_state
286*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
287*61046927SAndroid Build Coastguard Worker   :members:
288*61046927SAndroid Build Coastguard Worker
289*61046927SAndroid Build Coastguard Worker.. c:autoenum:: mesa_vk_dynamic_graphics_state
290*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
291*61046927SAndroid Build Coastguard Worker
292*61046927SAndroid Build Coastguard Worker.. c:autostruct:: vk_dynamic_graphics_state
293*61046927SAndroid Build Coastguard Worker   :file: src/vulkan/runtime/vk_graphics_state.h
294*61046927SAndroid Build Coastguard Worker   :members:
295