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