1bf215546Sopenharmony_ci/* This file is generated by venus-protocol.  See vn_protocol_driver.h. */
2bf215546Sopenharmony_ci
3bf215546Sopenharmony_ci/*
4bf215546Sopenharmony_ci * Copyright 2020 Google LLC
5bf215546Sopenharmony_ci * SPDX-License-Identifier: MIT
6bf215546Sopenharmony_ci */
7bf215546Sopenharmony_ci
8bf215546Sopenharmony_ci#ifndef VN_PROTOCOL_DRIVER_PIPELINE_H
9bf215546Sopenharmony_ci#define VN_PROTOCOL_DRIVER_PIPELINE_H
10bf215546Sopenharmony_ci
11bf215546Sopenharmony_ci#include "vn_instance.h"
12bf215546Sopenharmony_ci#include "vn_protocol_driver_structs.h"
13bf215546Sopenharmony_ci
14bf215546Sopenharmony_ci/* struct VkSpecializationMapEntry */
15bf215546Sopenharmony_ci
16bf215546Sopenharmony_cistatic inline size_t
17bf215546Sopenharmony_civn_sizeof_VkSpecializationMapEntry(const VkSpecializationMapEntry *val)
18bf215546Sopenharmony_ci{
19bf215546Sopenharmony_ci    size_t size = 0;
20bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->constantID);
21bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->offset);
22bf215546Sopenharmony_ci    size += vn_sizeof_size_t(&val->size);
23bf215546Sopenharmony_ci    return size;
24bf215546Sopenharmony_ci}
25bf215546Sopenharmony_ci
26bf215546Sopenharmony_cistatic inline void
27bf215546Sopenharmony_civn_encode_VkSpecializationMapEntry(struct vn_cs_encoder *enc, const VkSpecializationMapEntry *val)
28bf215546Sopenharmony_ci{
29bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->constantID);
30bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->offset);
31bf215546Sopenharmony_ci    vn_encode_size_t(enc, &val->size);
32bf215546Sopenharmony_ci}
33bf215546Sopenharmony_ci
34bf215546Sopenharmony_ci/* struct VkSpecializationInfo */
35bf215546Sopenharmony_ci
36bf215546Sopenharmony_cistatic inline size_t
37bf215546Sopenharmony_civn_sizeof_VkSpecializationInfo(const VkSpecializationInfo *val)
38bf215546Sopenharmony_ci{
39bf215546Sopenharmony_ci    size_t size = 0;
40bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->mapEntryCount);
41bf215546Sopenharmony_ci    if (val->pMapEntries) {
42bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->mapEntryCount);
43bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->mapEntryCount; i++)
44bf215546Sopenharmony_ci            size += vn_sizeof_VkSpecializationMapEntry(&val->pMapEntries[i]);
45bf215546Sopenharmony_ci    } else {
46bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
47bf215546Sopenharmony_ci    }
48bf215546Sopenharmony_ci    size += vn_sizeof_size_t(&val->dataSize);
49bf215546Sopenharmony_ci    if (val->pData) {
50bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->dataSize);
51bf215546Sopenharmony_ci        size += vn_sizeof_blob_array(val->pData, val->dataSize);
52bf215546Sopenharmony_ci    } else {
53bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
54bf215546Sopenharmony_ci    }
55bf215546Sopenharmony_ci    return size;
56bf215546Sopenharmony_ci}
57bf215546Sopenharmony_ci
58bf215546Sopenharmony_cistatic inline void
59bf215546Sopenharmony_civn_encode_VkSpecializationInfo(struct vn_cs_encoder *enc, const VkSpecializationInfo *val)
60bf215546Sopenharmony_ci{
61bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->mapEntryCount);
62bf215546Sopenharmony_ci    if (val->pMapEntries) {
63bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->mapEntryCount);
64bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->mapEntryCount; i++)
65bf215546Sopenharmony_ci            vn_encode_VkSpecializationMapEntry(enc, &val->pMapEntries[i]);
66bf215546Sopenharmony_ci    } else {
67bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
68bf215546Sopenharmony_ci    }
69bf215546Sopenharmony_ci    vn_encode_size_t(enc, &val->dataSize);
70bf215546Sopenharmony_ci    if (val->pData) {
71bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->dataSize);
72bf215546Sopenharmony_ci        vn_encode_blob_array(enc, val->pData, val->dataSize);
73bf215546Sopenharmony_ci    } else {
74bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
75bf215546Sopenharmony_ci    }
76bf215546Sopenharmony_ci}
77bf215546Sopenharmony_ci
78bf215546Sopenharmony_ci/* struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo chain */
79bf215546Sopenharmony_ci
80bf215546Sopenharmony_cistatic inline size_t
81bf215546Sopenharmony_civn_sizeof_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_pnext(const void *val)
82bf215546Sopenharmony_ci{
83bf215546Sopenharmony_ci    /* no known/supported struct */
84bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
85bf215546Sopenharmony_ci}
86bf215546Sopenharmony_ci
87bf215546Sopenharmony_cistatic inline size_t
88bf215546Sopenharmony_civn_sizeof_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_self(const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *val)
89bf215546Sopenharmony_ci{
90bf215546Sopenharmony_ci    size_t size = 0;
91bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
92bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->requiredSubgroupSize);
93bf215546Sopenharmony_ci    return size;
94bf215546Sopenharmony_ci}
95bf215546Sopenharmony_ci
96bf215546Sopenharmony_cistatic inline size_t
97bf215546Sopenharmony_civn_sizeof_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *val)
98bf215546Sopenharmony_ci{
99bf215546Sopenharmony_ci    size_t size = 0;
100bf215546Sopenharmony_ci
101bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
102bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_pnext(val->pNext);
103bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_self(val);
104bf215546Sopenharmony_ci
105bf215546Sopenharmony_ci    return size;
106bf215546Sopenharmony_ci}
107bf215546Sopenharmony_ci
108bf215546Sopenharmony_cistatic inline void
109bf215546Sopenharmony_civn_encode_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
110bf215546Sopenharmony_ci{
111bf215546Sopenharmony_ci    /* no known/supported struct */
112bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
113bf215546Sopenharmony_ci}
114bf215546Sopenharmony_ci
115bf215546Sopenharmony_cistatic inline void
116bf215546Sopenharmony_civn_encode_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *val)
117bf215546Sopenharmony_ci{
118bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
119bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->requiredSubgroupSize);
120bf215546Sopenharmony_ci}
121bf215546Sopenharmony_ci
122bf215546Sopenharmony_cistatic inline void
123bf215546Sopenharmony_civn_encode_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(struct vn_cs_encoder *enc, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *val)
124bf215546Sopenharmony_ci{
125bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO);
126bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO });
127bf215546Sopenharmony_ci    vn_encode_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_pnext(enc, val->pNext);
128bf215546Sopenharmony_ci    vn_encode_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_self(enc, val);
129bf215546Sopenharmony_ci}
130bf215546Sopenharmony_ci
131bf215546Sopenharmony_ci/* struct VkPipelineShaderStageCreateInfo chain */
132bf215546Sopenharmony_ci
133bf215546Sopenharmony_cistatic inline size_t
134bf215546Sopenharmony_civn_sizeof_VkPipelineShaderStageCreateInfo_pnext(const void *val)
135bf215546Sopenharmony_ci{
136bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
137bf215546Sopenharmony_ci    size_t size = 0;
138bf215546Sopenharmony_ci
139bf215546Sopenharmony_ci    while (pnext) {
140bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
141bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO:
142bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(226 /* VK_EXT_subgroup_size_control */))
143bf215546Sopenharmony_ci                break;
144bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
145bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
146bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineShaderStageCreateInfo_pnext(pnext->pNext);
147bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_self((const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *)pnext);
148bf215546Sopenharmony_ci            return size;
149bf215546Sopenharmony_ci        default:
150bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
151bf215546Sopenharmony_ci            break;
152bf215546Sopenharmony_ci        }
153bf215546Sopenharmony_ci        pnext = pnext->pNext;
154bf215546Sopenharmony_ci    }
155bf215546Sopenharmony_ci
156bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
157bf215546Sopenharmony_ci}
158bf215546Sopenharmony_ci
159bf215546Sopenharmony_cistatic inline size_t
160bf215546Sopenharmony_civn_sizeof_VkPipelineShaderStageCreateInfo_self(const VkPipelineShaderStageCreateInfo *val)
161bf215546Sopenharmony_ci{
162bf215546Sopenharmony_ci    size_t size = 0;
163bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
164bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
165bf215546Sopenharmony_ci    size += vn_sizeof_VkShaderStageFlagBits(&val->stage);
166bf215546Sopenharmony_ci    size += vn_sizeof_VkShaderModule(&val->module);
167bf215546Sopenharmony_ci    if (val->pName) {
168bf215546Sopenharmony_ci        const size_t string_size = strlen(val->pName) + 1;
169bf215546Sopenharmony_ci        size += vn_sizeof_array_size(string_size);
170bf215546Sopenharmony_ci        size += vn_sizeof_char_array(val->pName, string_size);
171bf215546Sopenharmony_ci    } else {
172bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
173bf215546Sopenharmony_ci    }
174bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pSpecializationInfo);
175bf215546Sopenharmony_ci    if (val->pSpecializationInfo)
176bf215546Sopenharmony_ci        size += vn_sizeof_VkSpecializationInfo(val->pSpecializationInfo);
177bf215546Sopenharmony_ci    return size;
178bf215546Sopenharmony_ci}
179bf215546Sopenharmony_ci
180bf215546Sopenharmony_cistatic inline size_t
181bf215546Sopenharmony_civn_sizeof_VkPipelineShaderStageCreateInfo(const VkPipelineShaderStageCreateInfo *val)
182bf215546Sopenharmony_ci{
183bf215546Sopenharmony_ci    size_t size = 0;
184bf215546Sopenharmony_ci
185bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
186bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineShaderStageCreateInfo_pnext(val->pNext);
187bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineShaderStageCreateInfo_self(val);
188bf215546Sopenharmony_ci
189bf215546Sopenharmony_ci    return size;
190bf215546Sopenharmony_ci}
191bf215546Sopenharmony_ci
192bf215546Sopenharmony_cistatic inline void
193bf215546Sopenharmony_civn_encode_VkPipelineShaderStageCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
194bf215546Sopenharmony_ci{
195bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
196bf215546Sopenharmony_ci
197bf215546Sopenharmony_ci    while (pnext) {
198bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
199bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO:
200bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(226 /* VK_EXT_subgroup_size_control */))
201bf215546Sopenharmony_ci                break;
202bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
203bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
204bf215546Sopenharmony_ci            vn_encode_VkPipelineShaderStageCreateInfo_pnext(enc, pnext->pNext);
205bf215546Sopenharmony_ci            vn_encode_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo_self(enc, (const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *)pnext);
206bf215546Sopenharmony_ci            return;
207bf215546Sopenharmony_ci        default:
208bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
209bf215546Sopenharmony_ci            break;
210bf215546Sopenharmony_ci        }
211bf215546Sopenharmony_ci        pnext = pnext->pNext;
212bf215546Sopenharmony_ci    }
213bf215546Sopenharmony_ci
214bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
215bf215546Sopenharmony_ci}
216bf215546Sopenharmony_ci
217bf215546Sopenharmony_cistatic inline void
218bf215546Sopenharmony_civn_encode_VkPipelineShaderStageCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineShaderStageCreateInfo *val)
219bf215546Sopenharmony_ci{
220bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
221bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
222bf215546Sopenharmony_ci    vn_encode_VkShaderStageFlagBits(enc, &val->stage);
223bf215546Sopenharmony_ci    vn_encode_VkShaderModule(enc, &val->module);
224bf215546Sopenharmony_ci    if (val->pName) {
225bf215546Sopenharmony_ci        const size_t string_size = strlen(val->pName) + 1;
226bf215546Sopenharmony_ci        vn_encode_array_size(enc, string_size);
227bf215546Sopenharmony_ci        vn_encode_char_array(enc, val->pName, string_size);
228bf215546Sopenharmony_ci    } else {
229bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
230bf215546Sopenharmony_ci    }
231bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pSpecializationInfo))
232bf215546Sopenharmony_ci        vn_encode_VkSpecializationInfo(enc, val->pSpecializationInfo);
233bf215546Sopenharmony_ci}
234bf215546Sopenharmony_ci
235bf215546Sopenharmony_cistatic inline void
236bf215546Sopenharmony_civn_encode_VkPipelineShaderStageCreateInfo(struct vn_cs_encoder *enc, const VkPipelineShaderStageCreateInfo *val)
237bf215546Sopenharmony_ci{
238bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO);
239bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO });
240bf215546Sopenharmony_ci    vn_encode_VkPipelineShaderStageCreateInfo_pnext(enc, val->pNext);
241bf215546Sopenharmony_ci    vn_encode_VkPipelineShaderStageCreateInfo_self(enc, val);
242bf215546Sopenharmony_ci}
243bf215546Sopenharmony_ci
244bf215546Sopenharmony_ci/* struct VkVertexInputBindingDescription */
245bf215546Sopenharmony_ci
246bf215546Sopenharmony_cistatic inline size_t
247bf215546Sopenharmony_civn_sizeof_VkVertexInputBindingDescription(const VkVertexInputBindingDescription *val)
248bf215546Sopenharmony_ci{
249bf215546Sopenharmony_ci    size_t size = 0;
250bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->binding);
251bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->stride);
252bf215546Sopenharmony_ci    size += vn_sizeof_VkVertexInputRate(&val->inputRate);
253bf215546Sopenharmony_ci    return size;
254bf215546Sopenharmony_ci}
255bf215546Sopenharmony_ci
256bf215546Sopenharmony_cistatic inline void
257bf215546Sopenharmony_civn_encode_VkVertexInputBindingDescription(struct vn_cs_encoder *enc, const VkVertexInputBindingDescription *val)
258bf215546Sopenharmony_ci{
259bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->binding);
260bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->stride);
261bf215546Sopenharmony_ci    vn_encode_VkVertexInputRate(enc, &val->inputRate);
262bf215546Sopenharmony_ci}
263bf215546Sopenharmony_ci
264bf215546Sopenharmony_ci/* struct VkVertexInputAttributeDescription */
265bf215546Sopenharmony_ci
266bf215546Sopenharmony_cistatic inline size_t
267bf215546Sopenharmony_civn_sizeof_VkVertexInputAttributeDescription(const VkVertexInputAttributeDescription *val)
268bf215546Sopenharmony_ci{
269bf215546Sopenharmony_ci    size_t size = 0;
270bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->location);
271bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->binding);
272bf215546Sopenharmony_ci    size += vn_sizeof_VkFormat(&val->format);
273bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->offset);
274bf215546Sopenharmony_ci    return size;
275bf215546Sopenharmony_ci}
276bf215546Sopenharmony_ci
277bf215546Sopenharmony_cistatic inline void
278bf215546Sopenharmony_civn_encode_VkVertexInputAttributeDescription(struct vn_cs_encoder *enc, const VkVertexInputAttributeDescription *val)
279bf215546Sopenharmony_ci{
280bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->location);
281bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->binding);
282bf215546Sopenharmony_ci    vn_encode_VkFormat(enc, &val->format);
283bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->offset);
284bf215546Sopenharmony_ci}
285bf215546Sopenharmony_ci
286bf215546Sopenharmony_ci/* struct VkVertexInputBindingDivisorDescriptionEXT */
287bf215546Sopenharmony_ci
288bf215546Sopenharmony_cistatic inline size_t
289bf215546Sopenharmony_civn_sizeof_VkVertexInputBindingDivisorDescriptionEXT(const VkVertexInputBindingDivisorDescriptionEXT *val)
290bf215546Sopenharmony_ci{
291bf215546Sopenharmony_ci    size_t size = 0;
292bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->binding);
293bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->divisor);
294bf215546Sopenharmony_ci    return size;
295bf215546Sopenharmony_ci}
296bf215546Sopenharmony_ci
297bf215546Sopenharmony_cistatic inline void
298bf215546Sopenharmony_civn_encode_VkVertexInputBindingDivisorDescriptionEXT(struct vn_cs_encoder *enc, const VkVertexInputBindingDivisorDescriptionEXT *val)
299bf215546Sopenharmony_ci{
300bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->binding);
301bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->divisor);
302bf215546Sopenharmony_ci}
303bf215546Sopenharmony_ci
304bf215546Sopenharmony_ci/* struct VkPipelineVertexInputDivisorStateCreateInfoEXT chain */
305bf215546Sopenharmony_ci
306bf215546Sopenharmony_cistatic inline size_t
307bf215546Sopenharmony_civn_sizeof_VkPipelineVertexInputDivisorStateCreateInfoEXT_pnext(const void *val)
308bf215546Sopenharmony_ci{
309bf215546Sopenharmony_ci    /* no known/supported struct */
310bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
311bf215546Sopenharmony_ci}
312bf215546Sopenharmony_ci
313bf215546Sopenharmony_cistatic inline size_t
314bf215546Sopenharmony_civn_sizeof_VkPipelineVertexInputDivisorStateCreateInfoEXT_self(const VkPipelineVertexInputDivisorStateCreateInfoEXT *val)
315bf215546Sopenharmony_ci{
316bf215546Sopenharmony_ci    size_t size = 0;
317bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
318bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->vertexBindingDivisorCount);
319bf215546Sopenharmony_ci    if (val->pVertexBindingDivisors) {
320bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->vertexBindingDivisorCount);
321bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->vertexBindingDivisorCount; i++)
322bf215546Sopenharmony_ci            size += vn_sizeof_VkVertexInputBindingDivisorDescriptionEXT(&val->pVertexBindingDivisors[i]);
323bf215546Sopenharmony_ci    } else {
324bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
325bf215546Sopenharmony_ci    }
326bf215546Sopenharmony_ci    return size;
327bf215546Sopenharmony_ci}
328bf215546Sopenharmony_ci
329bf215546Sopenharmony_cistatic inline size_t
330bf215546Sopenharmony_civn_sizeof_VkPipelineVertexInputDivisorStateCreateInfoEXT(const VkPipelineVertexInputDivisorStateCreateInfoEXT *val)
331bf215546Sopenharmony_ci{
332bf215546Sopenharmony_ci    size_t size = 0;
333bf215546Sopenharmony_ci
334bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
335bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineVertexInputDivisorStateCreateInfoEXT_pnext(val->pNext);
336bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineVertexInputDivisorStateCreateInfoEXT_self(val);
337bf215546Sopenharmony_ci
338bf215546Sopenharmony_ci    return size;
339bf215546Sopenharmony_ci}
340bf215546Sopenharmony_ci
341bf215546Sopenharmony_cistatic inline void
342bf215546Sopenharmony_civn_encode_VkPipelineVertexInputDivisorStateCreateInfoEXT_pnext(struct vn_cs_encoder *enc, const void *val)
343bf215546Sopenharmony_ci{
344bf215546Sopenharmony_ci    /* no known/supported struct */
345bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
346bf215546Sopenharmony_ci}
347bf215546Sopenharmony_ci
348bf215546Sopenharmony_cistatic inline void
349bf215546Sopenharmony_civn_encode_VkPipelineVertexInputDivisorStateCreateInfoEXT_self(struct vn_cs_encoder *enc, const VkPipelineVertexInputDivisorStateCreateInfoEXT *val)
350bf215546Sopenharmony_ci{
351bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
352bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->vertexBindingDivisorCount);
353bf215546Sopenharmony_ci    if (val->pVertexBindingDivisors) {
354bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->vertexBindingDivisorCount);
355bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->vertexBindingDivisorCount; i++)
356bf215546Sopenharmony_ci            vn_encode_VkVertexInputBindingDivisorDescriptionEXT(enc, &val->pVertexBindingDivisors[i]);
357bf215546Sopenharmony_ci    } else {
358bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
359bf215546Sopenharmony_ci    }
360bf215546Sopenharmony_ci}
361bf215546Sopenharmony_ci
362bf215546Sopenharmony_cistatic inline void
363bf215546Sopenharmony_civn_encode_VkPipelineVertexInputDivisorStateCreateInfoEXT(struct vn_cs_encoder *enc, const VkPipelineVertexInputDivisorStateCreateInfoEXT *val)
364bf215546Sopenharmony_ci{
365bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT);
366bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT });
367bf215546Sopenharmony_ci    vn_encode_VkPipelineVertexInputDivisorStateCreateInfoEXT_pnext(enc, val->pNext);
368bf215546Sopenharmony_ci    vn_encode_VkPipelineVertexInputDivisorStateCreateInfoEXT_self(enc, val);
369bf215546Sopenharmony_ci}
370bf215546Sopenharmony_ci
371bf215546Sopenharmony_ci/* struct VkPipelineVertexInputStateCreateInfo chain */
372bf215546Sopenharmony_ci
373bf215546Sopenharmony_cistatic inline size_t
374bf215546Sopenharmony_civn_sizeof_VkPipelineVertexInputStateCreateInfo_pnext(const void *val)
375bf215546Sopenharmony_ci{
376bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
377bf215546Sopenharmony_ci    size_t size = 0;
378bf215546Sopenharmony_ci
379bf215546Sopenharmony_ci    while (pnext) {
380bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
381bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
382bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(191 /* VK_EXT_vertex_attribute_divisor */))
383bf215546Sopenharmony_ci                break;
384bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
385bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
386bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineVertexInputStateCreateInfo_pnext(pnext->pNext);
387bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineVertexInputDivisorStateCreateInfoEXT_self((const VkPipelineVertexInputDivisorStateCreateInfoEXT *)pnext);
388bf215546Sopenharmony_ci            return size;
389bf215546Sopenharmony_ci        default:
390bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
391bf215546Sopenharmony_ci            break;
392bf215546Sopenharmony_ci        }
393bf215546Sopenharmony_ci        pnext = pnext->pNext;
394bf215546Sopenharmony_ci    }
395bf215546Sopenharmony_ci
396bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
397bf215546Sopenharmony_ci}
398bf215546Sopenharmony_ci
399bf215546Sopenharmony_cistatic inline size_t
400bf215546Sopenharmony_civn_sizeof_VkPipelineVertexInputStateCreateInfo_self(const VkPipelineVertexInputStateCreateInfo *val)
401bf215546Sopenharmony_ci{
402bf215546Sopenharmony_ci    size_t size = 0;
403bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
404bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
405bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->vertexBindingDescriptionCount);
406bf215546Sopenharmony_ci    if (val->pVertexBindingDescriptions) {
407bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->vertexBindingDescriptionCount);
408bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->vertexBindingDescriptionCount; i++)
409bf215546Sopenharmony_ci            size += vn_sizeof_VkVertexInputBindingDescription(&val->pVertexBindingDescriptions[i]);
410bf215546Sopenharmony_ci    } else {
411bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
412bf215546Sopenharmony_ci    }
413bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->vertexAttributeDescriptionCount);
414bf215546Sopenharmony_ci    if (val->pVertexAttributeDescriptions) {
415bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->vertexAttributeDescriptionCount);
416bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->vertexAttributeDescriptionCount; i++)
417bf215546Sopenharmony_ci            size += vn_sizeof_VkVertexInputAttributeDescription(&val->pVertexAttributeDescriptions[i]);
418bf215546Sopenharmony_ci    } else {
419bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
420bf215546Sopenharmony_ci    }
421bf215546Sopenharmony_ci    return size;
422bf215546Sopenharmony_ci}
423bf215546Sopenharmony_ci
424bf215546Sopenharmony_cistatic inline size_t
425bf215546Sopenharmony_civn_sizeof_VkPipelineVertexInputStateCreateInfo(const VkPipelineVertexInputStateCreateInfo *val)
426bf215546Sopenharmony_ci{
427bf215546Sopenharmony_ci    size_t size = 0;
428bf215546Sopenharmony_ci
429bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
430bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineVertexInputStateCreateInfo_pnext(val->pNext);
431bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineVertexInputStateCreateInfo_self(val);
432bf215546Sopenharmony_ci
433bf215546Sopenharmony_ci    return size;
434bf215546Sopenharmony_ci}
435bf215546Sopenharmony_ci
436bf215546Sopenharmony_cistatic inline void
437bf215546Sopenharmony_civn_encode_VkPipelineVertexInputStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
438bf215546Sopenharmony_ci{
439bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
440bf215546Sopenharmony_ci
441bf215546Sopenharmony_ci    while (pnext) {
442bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
443bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
444bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(191 /* VK_EXT_vertex_attribute_divisor */))
445bf215546Sopenharmony_ci                break;
446bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
447bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
448bf215546Sopenharmony_ci            vn_encode_VkPipelineVertexInputStateCreateInfo_pnext(enc, pnext->pNext);
449bf215546Sopenharmony_ci            vn_encode_VkPipelineVertexInputDivisorStateCreateInfoEXT_self(enc, (const VkPipelineVertexInputDivisorStateCreateInfoEXT *)pnext);
450bf215546Sopenharmony_ci            return;
451bf215546Sopenharmony_ci        default:
452bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
453bf215546Sopenharmony_ci            break;
454bf215546Sopenharmony_ci        }
455bf215546Sopenharmony_ci        pnext = pnext->pNext;
456bf215546Sopenharmony_ci    }
457bf215546Sopenharmony_ci
458bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
459bf215546Sopenharmony_ci}
460bf215546Sopenharmony_ci
461bf215546Sopenharmony_cistatic inline void
462bf215546Sopenharmony_civn_encode_VkPipelineVertexInputStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineVertexInputStateCreateInfo *val)
463bf215546Sopenharmony_ci{
464bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
465bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
466bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->vertexBindingDescriptionCount);
467bf215546Sopenharmony_ci    if (val->pVertexBindingDescriptions) {
468bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->vertexBindingDescriptionCount);
469bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->vertexBindingDescriptionCount; i++)
470bf215546Sopenharmony_ci            vn_encode_VkVertexInputBindingDescription(enc, &val->pVertexBindingDescriptions[i]);
471bf215546Sopenharmony_ci    } else {
472bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
473bf215546Sopenharmony_ci    }
474bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->vertexAttributeDescriptionCount);
475bf215546Sopenharmony_ci    if (val->pVertexAttributeDescriptions) {
476bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->vertexAttributeDescriptionCount);
477bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->vertexAttributeDescriptionCount; i++)
478bf215546Sopenharmony_ci            vn_encode_VkVertexInputAttributeDescription(enc, &val->pVertexAttributeDescriptions[i]);
479bf215546Sopenharmony_ci    } else {
480bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
481bf215546Sopenharmony_ci    }
482bf215546Sopenharmony_ci}
483bf215546Sopenharmony_ci
484bf215546Sopenharmony_cistatic inline void
485bf215546Sopenharmony_civn_encode_VkPipelineVertexInputStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineVertexInputStateCreateInfo *val)
486bf215546Sopenharmony_ci{
487bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO);
488bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO });
489bf215546Sopenharmony_ci    vn_encode_VkPipelineVertexInputStateCreateInfo_pnext(enc, val->pNext);
490bf215546Sopenharmony_ci    vn_encode_VkPipelineVertexInputStateCreateInfo_self(enc, val);
491bf215546Sopenharmony_ci}
492bf215546Sopenharmony_ci
493bf215546Sopenharmony_ci/* struct VkPipelineInputAssemblyStateCreateInfo chain */
494bf215546Sopenharmony_ci
495bf215546Sopenharmony_cistatic inline size_t
496bf215546Sopenharmony_civn_sizeof_VkPipelineInputAssemblyStateCreateInfo_pnext(const void *val)
497bf215546Sopenharmony_ci{
498bf215546Sopenharmony_ci    /* no known/supported struct */
499bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
500bf215546Sopenharmony_ci}
501bf215546Sopenharmony_ci
502bf215546Sopenharmony_cistatic inline size_t
503bf215546Sopenharmony_civn_sizeof_VkPipelineInputAssemblyStateCreateInfo_self(const VkPipelineInputAssemblyStateCreateInfo *val)
504bf215546Sopenharmony_ci{
505bf215546Sopenharmony_ci    size_t size = 0;
506bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
507bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
508bf215546Sopenharmony_ci    size += vn_sizeof_VkPrimitiveTopology(&val->topology);
509bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->primitiveRestartEnable);
510bf215546Sopenharmony_ci    return size;
511bf215546Sopenharmony_ci}
512bf215546Sopenharmony_ci
513bf215546Sopenharmony_cistatic inline size_t
514bf215546Sopenharmony_civn_sizeof_VkPipelineInputAssemblyStateCreateInfo(const VkPipelineInputAssemblyStateCreateInfo *val)
515bf215546Sopenharmony_ci{
516bf215546Sopenharmony_ci    size_t size = 0;
517bf215546Sopenharmony_ci
518bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
519bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineInputAssemblyStateCreateInfo_pnext(val->pNext);
520bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineInputAssemblyStateCreateInfo_self(val);
521bf215546Sopenharmony_ci
522bf215546Sopenharmony_ci    return size;
523bf215546Sopenharmony_ci}
524bf215546Sopenharmony_ci
525bf215546Sopenharmony_cistatic inline void
526bf215546Sopenharmony_civn_encode_VkPipelineInputAssemblyStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
527bf215546Sopenharmony_ci{
528bf215546Sopenharmony_ci    /* no known/supported struct */
529bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
530bf215546Sopenharmony_ci}
531bf215546Sopenharmony_ci
532bf215546Sopenharmony_cistatic inline void
533bf215546Sopenharmony_civn_encode_VkPipelineInputAssemblyStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineInputAssemblyStateCreateInfo *val)
534bf215546Sopenharmony_ci{
535bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
536bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
537bf215546Sopenharmony_ci    vn_encode_VkPrimitiveTopology(enc, &val->topology);
538bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->primitiveRestartEnable);
539bf215546Sopenharmony_ci}
540bf215546Sopenharmony_ci
541bf215546Sopenharmony_cistatic inline void
542bf215546Sopenharmony_civn_encode_VkPipelineInputAssemblyStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineInputAssemblyStateCreateInfo *val)
543bf215546Sopenharmony_ci{
544bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO);
545bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO });
546bf215546Sopenharmony_ci    vn_encode_VkPipelineInputAssemblyStateCreateInfo_pnext(enc, val->pNext);
547bf215546Sopenharmony_ci    vn_encode_VkPipelineInputAssemblyStateCreateInfo_self(enc, val);
548bf215546Sopenharmony_ci}
549bf215546Sopenharmony_ci
550bf215546Sopenharmony_ci/* struct VkPipelineTessellationDomainOriginStateCreateInfo chain */
551bf215546Sopenharmony_ci
552bf215546Sopenharmony_cistatic inline size_t
553bf215546Sopenharmony_civn_sizeof_VkPipelineTessellationDomainOriginStateCreateInfo_pnext(const void *val)
554bf215546Sopenharmony_ci{
555bf215546Sopenharmony_ci    /* no known/supported struct */
556bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
557bf215546Sopenharmony_ci}
558bf215546Sopenharmony_ci
559bf215546Sopenharmony_cistatic inline size_t
560bf215546Sopenharmony_civn_sizeof_VkPipelineTessellationDomainOriginStateCreateInfo_self(const VkPipelineTessellationDomainOriginStateCreateInfo *val)
561bf215546Sopenharmony_ci{
562bf215546Sopenharmony_ci    size_t size = 0;
563bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
564bf215546Sopenharmony_ci    size += vn_sizeof_VkTessellationDomainOrigin(&val->domainOrigin);
565bf215546Sopenharmony_ci    return size;
566bf215546Sopenharmony_ci}
567bf215546Sopenharmony_ci
568bf215546Sopenharmony_cistatic inline size_t
569bf215546Sopenharmony_civn_sizeof_VkPipelineTessellationDomainOriginStateCreateInfo(const VkPipelineTessellationDomainOriginStateCreateInfo *val)
570bf215546Sopenharmony_ci{
571bf215546Sopenharmony_ci    size_t size = 0;
572bf215546Sopenharmony_ci
573bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
574bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineTessellationDomainOriginStateCreateInfo_pnext(val->pNext);
575bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineTessellationDomainOriginStateCreateInfo_self(val);
576bf215546Sopenharmony_ci
577bf215546Sopenharmony_ci    return size;
578bf215546Sopenharmony_ci}
579bf215546Sopenharmony_ci
580bf215546Sopenharmony_cistatic inline void
581bf215546Sopenharmony_civn_encode_VkPipelineTessellationDomainOriginStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
582bf215546Sopenharmony_ci{
583bf215546Sopenharmony_ci    /* no known/supported struct */
584bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
585bf215546Sopenharmony_ci}
586bf215546Sopenharmony_ci
587bf215546Sopenharmony_cistatic inline void
588bf215546Sopenharmony_civn_encode_VkPipelineTessellationDomainOriginStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineTessellationDomainOriginStateCreateInfo *val)
589bf215546Sopenharmony_ci{
590bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
591bf215546Sopenharmony_ci    vn_encode_VkTessellationDomainOrigin(enc, &val->domainOrigin);
592bf215546Sopenharmony_ci}
593bf215546Sopenharmony_ci
594bf215546Sopenharmony_cistatic inline void
595bf215546Sopenharmony_civn_encode_VkPipelineTessellationDomainOriginStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineTessellationDomainOriginStateCreateInfo *val)
596bf215546Sopenharmony_ci{
597bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO);
598bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO });
599bf215546Sopenharmony_ci    vn_encode_VkPipelineTessellationDomainOriginStateCreateInfo_pnext(enc, val->pNext);
600bf215546Sopenharmony_ci    vn_encode_VkPipelineTessellationDomainOriginStateCreateInfo_self(enc, val);
601bf215546Sopenharmony_ci}
602bf215546Sopenharmony_ci
603bf215546Sopenharmony_ci/* struct VkPipelineTessellationStateCreateInfo chain */
604bf215546Sopenharmony_ci
605bf215546Sopenharmony_cistatic inline size_t
606bf215546Sopenharmony_civn_sizeof_VkPipelineTessellationStateCreateInfo_pnext(const void *val)
607bf215546Sopenharmony_ci{
608bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
609bf215546Sopenharmony_ci    size_t size = 0;
610bf215546Sopenharmony_ci
611bf215546Sopenharmony_ci    while (pnext) {
612bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
613bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
614bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
615bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
616bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineTessellationStateCreateInfo_pnext(pnext->pNext);
617bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineTessellationDomainOriginStateCreateInfo_self((const VkPipelineTessellationDomainOriginStateCreateInfo *)pnext);
618bf215546Sopenharmony_ci            return size;
619bf215546Sopenharmony_ci        default:
620bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
621bf215546Sopenharmony_ci            break;
622bf215546Sopenharmony_ci        }
623bf215546Sopenharmony_ci        pnext = pnext->pNext;
624bf215546Sopenharmony_ci    }
625bf215546Sopenharmony_ci
626bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
627bf215546Sopenharmony_ci}
628bf215546Sopenharmony_ci
629bf215546Sopenharmony_cistatic inline size_t
630bf215546Sopenharmony_civn_sizeof_VkPipelineTessellationStateCreateInfo_self(const VkPipelineTessellationStateCreateInfo *val)
631bf215546Sopenharmony_ci{
632bf215546Sopenharmony_ci    size_t size = 0;
633bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
634bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
635bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->patchControlPoints);
636bf215546Sopenharmony_ci    return size;
637bf215546Sopenharmony_ci}
638bf215546Sopenharmony_ci
639bf215546Sopenharmony_cistatic inline size_t
640bf215546Sopenharmony_civn_sizeof_VkPipelineTessellationStateCreateInfo(const VkPipelineTessellationStateCreateInfo *val)
641bf215546Sopenharmony_ci{
642bf215546Sopenharmony_ci    size_t size = 0;
643bf215546Sopenharmony_ci
644bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
645bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineTessellationStateCreateInfo_pnext(val->pNext);
646bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineTessellationStateCreateInfo_self(val);
647bf215546Sopenharmony_ci
648bf215546Sopenharmony_ci    return size;
649bf215546Sopenharmony_ci}
650bf215546Sopenharmony_ci
651bf215546Sopenharmony_cistatic inline void
652bf215546Sopenharmony_civn_encode_VkPipelineTessellationStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
653bf215546Sopenharmony_ci{
654bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
655bf215546Sopenharmony_ci
656bf215546Sopenharmony_ci    while (pnext) {
657bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
658bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
659bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
660bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
661bf215546Sopenharmony_ci            vn_encode_VkPipelineTessellationStateCreateInfo_pnext(enc, pnext->pNext);
662bf215546Sopenharmony_ci            vn_encode_VkPipelineTessellationDomainOriginStateCreateInfo_self(enc, (const VkPipelineTessellationDomainOriginStateCreateInfo *)pnext);
663bf215546Sopenharmony_ci            return;
664bf215546Sopenharmony_ci        default:
665bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
666bf215546Sopenharmony_ci            break;
667bf215546Sopenharmony_ci        }
668bf215546Sopenharmony_ci        pnext = pnext->pNext;
669bf215546Sopenharmony_ci    }
670bf215546Sopenharmony_ci
671bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
672bf215546Sopenharmony_ci}
673bf215546Sopenharmony_ci
674bf215546Sopenharmony_cistatic inline void
675bf215546Sopenharmony_civn_encode_VkPipelineTessellationStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineTessellationStateCreateInfo *val)
676bf215546Sopenharmony_ci{
677bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
678bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
679bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->patchControlPoints);
680bf215546Sopenharmony_ci}
681bf215546Sopenharmony_ci
682bf215546Sopenharmony_cistatic inline void
683bf215546Sopenharmony_civn_encode_VkPipelineTessellationStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineTessellationStateCreateInfo *val)
684bf215546Sopenharmony_ci{
685bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO);
686bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO });
687bf215546Sopenharmony_ci    vn_encode_VkPipelineTessellationStateCreateInfo_pnext(enc, val->pNext);
688bf215546Sopenharmony_ci    vn_encode_VkPipelineTessellationStateCreateInfo_self(enc, val);
689bf215546Sopenharmony_ci}
690bf215546Sopenharmony_ci
691bf215546Sopenharmony_ci/* struct VkPipelineViewportStateCreateInfo chain */
692bf215546Sopenharmony_ci
693bf215546Sopenharmony_cistatic inline size_t
694bf215546Sopenharmony_civn_sizeof_VkPipelineViewportStateCreateInfo_pnext(const void *val)
695bf215546Sopenharmony_ci{
696bf215546Sopenharmony_ci    /* no known/supported struct */
697bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
698bf215546Sopenharmony_ci}
699bf215546Sopenharmony_ci
700bf215546Sopenharmony_cistatic inline size_t
701bf215546Sopenharmony_civn_sizeof_VkPipelineViewportStateCreateInfo_self(const VkPipelineViewportStateCreateInfo *val)
702bf215546Sopenharmony_ci{
703bf215546Sopenharmony_ci    size_t size = 0;
704bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
705bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
706bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->viewportCount);
707bf215546Sopenharmony_ci    if (val->pViewports) {
708bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->viewportCount);
709bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->viewportCount; i++)
710bf215546Sopenharmony_ci            size += vn_sizeof_VkViewport(&val->pViewports[i]);
711bf215546Sopenharmony_ci    } else {
712bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
713bf215546Sopenharmony_ci    }
714bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->scissorCount);
715bf215546Sopenharmony_ci    if (val->pScissors) {
716bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->scissorCount);
717bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->scissorCount; i++)
718bf215546Sopenharmony_ci            size += vn_sizeof_VkRect2D(&val->pScissors[i]);
719bf215546Sopenharmony_ci    } else {
720bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
721bf215546Sopenharmony_ci    }
722bf215546Sopenharmony_ci    return size;
723bf215546Sopenharmony_ci}
724bf215546Sopenharmony_ci
725bf215546Sopenharmony_cistatic inline size_t
726bf215546Sopenharmony_civn_sizeof_VkPipelineViewportStateCreateInfo(const VkPipelineViewportStateCreateInfo *val)
727bf215546Sopenharmony_ci{
728bf215546Sopenharmony_ci    size_t size = 0;
729bf215546Sopenharmony_ci
730bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
731bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineViewportStateCreateInfo_pnext(val->pNext);
732bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineViewportStateCreateInfo_self(val);
733bf215546Sopenharmony_ci
734bf215546Sopenharmony_ci    return size;
735bf215546Sopenharmony_ci}
736bf215546Sopenharmony_ci
737bf215546Sopenharmony_cistatic inline void
738bf215546Sopenharmony_civn_encode_VkPipelineViewportStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
739bf215546Sopenharmony_ci{
740bf215546Sopenharmony_ci    /* no known/supported struct */
741bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
742bf215546Sopenharmony_ci}
743bf215546Sopenharmony_ci
744bf215546Sopenharmony_cistatic inline void
745bf215546Sopenharmony_civn_encode_VkPipelineViewportStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineViewportStateCreateInfo *val)
746bf215546Sopenharmony_ci{
747bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
748bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
749bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->viewportCount);
750bf215546Sopenharmony_ci    if (val->pViewports) {
751bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->viewportCount);
752bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->viewportCount; i++)
753bf215546Sopenharmony_ci            vn_encode_VkViewport(enc, &val->pViewports[i]);
754bf215546Sopenharmony_ci    } else {
755bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
756bf215546Sopenharmony_ci    }
757bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->scissorCount);
758bf215546Sopenharmony_ci    if (val->pScissors) {
759bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->scissorCount);
760bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->scissorCount; i++)
761bf215546Sopenharmony_ci            vn_encode_VkRect2D(enc, &val->pScissors[i]);
762bf215546Sopenharmony_ci    } else {
763bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
764bf215546Sopenharmony_ci    }
765bf215546Sopenharmony_ci}
766bf215546Sopenharmony_ci
767bf215546Sopenharmony_cistatic inline void
768bf215546Sopenharmony_civn_encode_VkPipelineViewportStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineViewportStateCreateInfo *val)
769bf215546Sopenharmony_ci{
770bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO);
771bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO });
772bf215546Sopenharmony_ci    vn_encode_VkPipelineViewportStateCreateInfo_pnext(enc, val->pNext);
773bf215546Sopenharmony_ci    vn_encode_VkPipelineViewportStateCreateInfo_self(enc, val);
774bf215546Sopenharmony_ci}
775bf215546Sopenharmony_ci
776bf215546Sopenharmony_ci/* struct VkPipelineRasterizationConservativeStateCreateInfoEXT chain */
777bf215546Sopenharmony_ci
778bf215546Sopenharmony_cistatic inline size_t
779bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationConservativeStateCreateInfoEXT_pnext(const void *val)
780bf215546Sopenharmony_ci{
781bf215546Sopenharmony_ci    /* no known/supported struct */
782bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
783bf215546Sopenharmony_ci}
784bf215546Sopenharmony_ci
785bf215546Sopenharmony_cistatic inline size_t
786bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationConservativeStateCreateInfoEXT_self(const VkPipelineRasterizationConservativeStateCreateInfoEXT *val)
787bf215546Sopenharmony_ci{
788bf215546Sopenharmony_ci    size_t size = 0;
789bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
790bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
791bf215546Sopenharmony_ci    size += vn_sizeof_VkConservativeRasterizationModeEXT(&val->conservativeRasterizationMode);
792bf215546Sopenharmony_ci    size += vn_sizeof_float(&val->extraPrimitiveOverestimationSize);
793bf215546Sopenharmony_ci    return size;
794bf215546Sopenharmony_ci}
795bf215546Sopenharmony_ci
796bf215546Sopenharmony_cistatic inline size_t
797bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationConservativeStateCreateInfoEXT(const VkPipelineRasterizationConservativeStateCreateInfoEXT *val)
798bf215546Sopenharmony_ci{
799bf215546Sopenharmony_ci    size_t size = 0;
800bf215546Sopenharmony_ci
801bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
802bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationConservativeStateCreateInfoEXT_pnext(val->pNext);
803bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationConservativeStateCreateInfoEXT_self(val);
804bf215546Sopenharmony_ci
805bf215546Sopenharmony_ci    return size;
806bf215546Sopenharmony_ci}
807bf215546Sopenharmony_ci
808bf215546Sopenharmony_cistatic inline void
809bf215546Sopenharmony_civn_encode_VkPipelineRasterizationConservativeStateCreateInfoEXT_pnext(struct vn_cs_encoder *enc, const void *val)
810bf215546Sopenharmony_ci{
811bf215546Sopenharmony_ci    /* no known/supported struct */
812bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
813bf215546Sopenharmony_ci}
814bf215546Sopenharmony_ci
815bf215546Sopenharmony_cistatic inline void
816bf215546Sopenharmony_civn_encode_VkPipelineRasterizationConservativeStateCreateInfoEXT_self(struct vn_cs_encoder *enc, const VkPipelineRasterizationConservativeStateCreateInfoEXT *val)
817bf215546Sopenharmony_ci{
818bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
819bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
820bf215546Sopenharmony_ci    vn_encode_VkConservativeRasterizationModeEXT(enc, &val->conservativeRasterizationMode);
821bf215546Sopenharmony_ci    vn_encode_float(enc, &val->extraPrimitiveOverestimationSize);
822bf215546Sopenharmony_ci}
823bf215546Sopenharmony_ci
824bf215546Sopenharmony_cistatic inline void
825bf215546Sopenharmony_civn_encode_VkPipelineRasterizationConservativeStateCreateInfoEXT(struct vn_cs_encoder *enc, const VkPipelineRasterizationConservativeStateCreateInfoEXT *val)
826bf215546Sopenharmony_ci{
827bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT);
828bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT });
829bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationConservativeStateCreateInfoEXT_pnext(enc, val->pNext);
830bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationConservativeStateCreateInfoEXT_self(enc, val);
831bf215546Sopenharmony_ci}
832bf215546Sopenharmony_ci
833bf215546Sopenharmony_ci/* struct VkPipelineRasterizationStateStreamCreateInfoEXT chain */
834bf215546Sopenharmony_ci
835bf215546Sopenharmony_cistatic inline size_t
836bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationStateStreamCreateInfoEXT_pnext(const void *val)
837bf215546Sopenharmony_ci{
838bf215546Sopenharmony_ci    /* no known/supported struct */
839bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
840bf215546Sopenharmony_ci}
841bf215546Sopenharmony_ci
842bf215546Sopenharmony_cistatic inline size_t
843bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationStateStreamCreateInfoEXT_self(const VkPipelineRasterizationStateStreamCreateInfoEXT *val)
844bf215546Sopenharmony_ci{
845bf215546Sopenharmony_ci    size_t size = 0;
846bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
847bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
848bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->rasterizationStream);
849bf215546Sopenharmony_ci    return size;
850bf215546Sopenharmony_ci}
851bf215546Sopenharmony_ci
852bf215546Sopenharmony_cistatic inline size_t
853bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationStateStreamCreateInfoEXT(const VkPipelineRasterizationStateStreamCreateInfoEXT *val)
854bf215546Sopenharmony_ci{
855bf215546Sopenharmony_ci    size_t size = 0;
856bf215546Sopenharmony_ci
857bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
858bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationStateStreamCreateInfoEXT_pnext(val->pNext);
859bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationStateStreamCreateInfoEXT_self(val);
860bf215546Sopenharmony_ci
861bf215546Sopenharmony_ci    return size;
862bf215546Sopenharmony_ci}
863bf215546Sopenharmony_ci
864bf215546Sopenharmony_cistatic inline void
865bf215546Sopenharmony_civn_encode_VkPipelineRasterizationStateStreamCreateInfoEXT_pnext(struct vn_cs_encoder *enc, const void *val)
866bf215546Sopenharmony_ci{
867bf215546Sopenharmony_ci    /* no known/supported struct */
868bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
869bf215546Sopenharmony_ci}
870bf215546Sopenharmony_ci
871bf215546Sopenharmony_cistatic inline void
872bf215546Sopenharmony_civn_encode_VkPipelineRasterizationStateStreamCreateInfoEXT_self(struct vn_cs_encoder *enc, const VkPipelineRasterizationStateStreamCreateInfoEXT *val)
873bf215546Sopenharmony_ci{
874bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
875bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
876bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->rasterizationStream);
877bf215546Sopenharmony_ci}
878bf215546Sopenharmony_ci
879bf215546Sopenharmony_cistatic inline void
880bf215546Sopenharmony_civn_encode_VkPipelineRasterizationStateStreamCreateInfoEXT(struct vn_cs_encoder *enc, const VkPipelineRasterizationStateStreamCreateInfoEXT *val)
881bf215546Sopenharmony_ci{
882bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT);
883bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT });
884bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationStateStreamCreateInfoEXT_pnext(enc, val->pNext);
885bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationStateStreamCreateInfoEXT_self(enc, val);
886bf215546Sopenharmony_ci}
887bf215546Sopenharmony_ci
888bf215546Sopenharmony_ci/* struct VkPipelineRasterizationDepthClipStateCreateInfoEXT chain */
889bf215546Sopenharmony_ci
890bf215546Sopenharmony_cistatic inline size_t
891bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationDepthClipStateCreateInfoEXT_pnext(const void *val)
892bf215546Sopenharmony_ci{
893bf215546Sopenharmony_ci    /* no known/supported struct */
894bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
895bf215546Sopenharmony_ci}
896bf215546Sopenharmony_ci
897bf215546Sopenharmony_cistatic inline size_t
898bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationDepthClipStateCreateInfoEXT_self(const VkPipelineRasterizationDepthClipStateCreateInfoEXT *val)
899bf215546Sopenharmony_ci{
900bf215546Sopenharmony_ci    size_t size = 0;
901bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
902bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
903bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->depthClipEnable);
904bf215546Sopenharmony_ci    return size;
905bf215546Sopenharmony_ci}
906bf215546Sopenharmony_ci
907bf215546Sopenharmony_cistatic inline size_t
908bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationDepthClipStateCreateInfoEXT(const VkPipelineRasterizationDepthClipStateCreateInfoEXT *val)
909bf215546Sopenharmony_ci{
910bf215546Sopenharmony_ci    size_t size = 0;
911bf215546Sopenharmony_ci
912bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
913bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationDepthClipStateCreateInfoEXT_pnext(val->pNext);
914bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationDepthClipStateCreateInfoEXT_self(val);
915bf215546Sopenharmony_ci
916bf215546Sopenharmony_ci    return size;
917bf215546Sopenharmony_ci}
918bf215546Sopenharmony_ci
919bf215546Sopenharmony_cistatic inline void
920bf215546Sopenharmony_civn_encode_VkPipelineRasterizationDepthClipStateCreateInfoEXT_pnext(struct vn_cs_encoder *enc, const void *val)
921bf215546Sopenharmony_ci{
922bf215546Sopenharmony_ci    /* no known/supported struct */
923bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
924bf215546Sopenharmony_ci}
925bf215546Sopenharmony_ci
926bf215546Sopenharmony_cistatic inline void
927bf215546Sopenharmony_civn_encode_VkPipelineRasterizationDepthClipStateCreateInfoEXT_self(struct vn_cs_encoder *enc, const VkPipelineRasterizationDepthClipStateCreateInfoEXT *val)
928bf215546Sopenharmony_ci{
929bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
930bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
931bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->depthClipEnable);
932bf215546Sopenharmony_ci}
933bf215546Sopenharmony_ci
934bf215546Sopenharmony_cistatic inline void
935bf215546Sopenharmony_civn_encode_VkPipelineRasterizationDepthClipStateCreateInfoEXT(struct vn_cs_encoder *enc, const VkPipelineRasterizationDepthClipStateCreateInfoEXT *val)
936bf215546Sopenharmony_ci{
937bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT);
938bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT });
939bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationDepthClipStateCreateInfoEXT_pnext(enc, val->pNext);
940bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationDepthClipStateCreateInfoEXT_self(enc, val);
941bf215546Sopenharmony_ci}
942bf215546Sopenharmony_ci
943bf215546Sopenharmony_ci/* struct VkPipelineRasterizationLineStateCreateInfoEXT chain */
944bf215546Sopenharmony_ci
945bf215546Sopenharmony_cistatic inline size_t
946bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationLineStateCreateInfoEXT_pnext(const void *val)
947bf215546Sopenharmony_ci{
948bf215546Sopenharmony_ci    /* no known/supported struct */
949bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
950bf215546Sopenharmony_ci}
951bf215546Sopenharmony_ci
952bf215546Sopenharmony_cistatic inline size_t
953bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationLineStateCreateInfoEXT_self(const VkPipelineRasterizationLineStateCreateInfoEXT *val)
954bf215546Sopenharmony_ci{
955bf215546Sopenharmony_ci    size_t size = 0;
956bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
957bf215546Sopenharmony_ci    size += vn_sizeof_VkLineRasterizationModeEXT(&val->lineRasterizationMode);
958bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->stippledLineEnable);
959bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->lineStippleFactor);
960bf215546Sopenharmony_ci    size += vn_sizeof_uint16_t(&val->lineStipplePattern);
961bf215546Sopenharmony_ci    return size;
962bf215546Sopenharmony_ci}
963bf215546Sopenharmony_ci
964bf215546Sopenharmony_cistatic inline size_t
965bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationLineStateCreateInfoEXT(const VkPipelineRasterizationLineStateCreateInfoEXT *val)
966bf215546Sopenharmony_ci{
967bf215546Sopenharmony_ci    size_t size = 0;
968bf215546Sopenharmony_ci
969bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
970bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationLineStateCreateInfoEXT_pnext(val->pNext);
971bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationLineStateCreateInfoEXT_self(val);
972bf215546Sopenharmony_ci
973bf215546Sopenharmony_ci    return size;
974bf215546Sopenharmony_ci}
975bf215546Sopenharmony_ci
976bf215546Sopenharmony_cistatic inline void
977bf215546Sopenharmony_civn_encode_VkPipelineRasterizationLineStateCreateInfoEXT_pnext(struct vn_cs_encoder *enc, const void *val)
978bf215546Sopenharmony_ci{
979bf215546Sopenharmony_ci    /* no known/supported struct */
980bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
981bf215546Sopenharmony_ci}
982bf215546Sopenharmony_ci
983bf215546Sopenharmony_cistatic inline void
984bf215546Sopenharmony_civn_encode_VkPipelineRasterizationLineStateCreateInfoEXT_self(struct vn_cs_encoder *enc, const VkPipelineRasterizationLineStateCreateInfoEXT *val)
985bf215546Sopenharmony_ci{
986bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
987bf215546Sopenharmony_ci    vn_encode_VkLineRasterizationModeEXT(enc, &val->lineRasterizationMode);
988bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->stippledLineEnable);
989bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->lineStippleFactor);
990bf215546Sopenharmony_ci    vn_encode_uint16_t(enc, &val->lineStipplePattern);
991bf215546Sopenharmony_ci}
992bf215546Sopenharmony_ci
993bf215546Sopenharmony_cistatic inline void
994bf215546Sopenharmony_civn_encode_VkPipelineRasterizationLineStateCreateInfoEXT(struct vn_cs_encoder *enc, const VkPipelineRasterizationLineStateCreateInfoEXT *val)
995bf215546Sopenharmony_ci{
996bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT);
997bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT });
998bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationLineStateCreateInfoEXT_pnext(enc, val->pNext);
999bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationLineStateCreateInfoEXT_self(enc, val);
1000bf215546Sopenharmony_ci}
1001bf215546Sopenharmony_ci
1002bf215546Sopenharmony_ci/* struct VkPipelineRasterizationProvokingVertexStateCreateInfoEXT chain */
1003bf215546Sopenharmony_ci
1004bf215546Sopenharmony_cistatic inline size_t
1005bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_pnext(const void *val)
1006bf215546Sopenharmony_ci{
1007bf215546Sopenharmony_ci    /* no known/supported struct */
1008bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1009bf215546Sopenharmony_ci}
1010bf215546Sopenharmony_ci
1011bf215546Sopenharmony_cistatic inline size_t
1012bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self(const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *val)
1013bf215546Sopenharmony_ci{
1014bf215546Sopenharmony_ci    size_t size = 0;
1015bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1016bf215546Sopenharmony_ci    size += vn_sizeof_VkProvokingVertexModeEXT(&val->provokingVertexMode);
1017bf215546Sopenharmony_ci    return size;
1018bf215546Sopenharmony_ci}
1019bf215546Sopenharmony_ci
1020bf215546Sopenharmony_cistatic inline size_t
1021bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *val)
1022bf215546Sopenharmony_ci{
1023bf215546Sopenharmony_ci    size_t size = 0;
1024bf215546Sopenharmony_ci
1025bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1026bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_pnext(val->pNext);
1027bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self(val);
1028bf215546Sopenharmony_ci
1029bf215546Sopenharmony_ci    return size;
1030bf215546Sopenharmony_ci}
1031bf215546Sopenharmony_ci
1032bf215546Sopenharmony_cistatic inline void
1033bf215546Sopenharmony_civn_encode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_pnext(struct vn_cs_encoder *enc, const void *val)
1034bf215546Sopenharmony_ci{
1035bf215546Sopenharmony_ci    /* no known/supported struct */
1036bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1037bf215546Sopenharmony_ci}
1038bf215546Sopenharmony_ci
1039bf215546Sopenharmony_cistatic inline void
1040bf215546Sopenharmony_civn_encode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self(struct vn_cs_encoder *enc, const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *val)
1041bf215546Sopenharmony_ci{
1042bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1043bf215546Sopenharmony_ci    vn_encode_VkProvokingVertexModeEXT(enc, &val->provokingVertexMode);
1044bf215546Sopenharmony_ci}
1045bf215546Sopenharmony_ci
1046bf215546Sopenharmony_cistatic inline void
1047bf215546Sopenharmony_civn_encode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(struct vn_cs_encoder *enc, const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *val)
1048bf215546Sopenharmony_ci{
1049bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT);
1050bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT });
1051bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_pnext(enc, val->pNext);
1052bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self(enc, val);
1053bf215546Sopenharmony_ci}
1054bf215546Sopenharmony_ci
1055bf215546Sopenharmony_ci/* struct VkPipelineRasterizationStateCreateInfo chain */
1056bf215546Sopenharmony_ci
1057bf215546Sopenharmony_cistatic inline size_t
1058bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationStateCreateInfo_pnext(const void *val)
1059bf215546Sopenharmony_ci{
1060bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
1061bf215546Sopenharmony_ci    size_t size = 0;
1062bf215546Sopenharmony_ci
1063bf215546Sopenharmony_ci    while (pnext) {
1064bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
1065bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
1066bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(102 /* VK_EXT_conservative_rasterization */))
1067bf215546Sopenharmony_ci                break;
1068bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
1069bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
1070bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationStateCreateInfo_pnext(pnext->pNext);
1071bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationConservativeStateCreateInfoEXT_self((const VkPipelineRasterizationConservativeStateCreateInfoEXT *)pnext);
1072bf215546Sopenharmony_ci            return size;
1073bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
1074bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(29 /* VK_EXT_transform_feedback */))
1075bf215546Sopenharmony_ci                break;
1076bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
1077bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
1078bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationStateCreateInfo_pnext(pnext->pNext);
1079bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationStateStreamCreateInfoEXT_self((const VkPipelineRasterizationStateStreamCreateInfoEXT *)pnext);
1080bf215546Sopenharmony_ci            return size;
1081bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:
1082bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(103 /* VK_EXT_depth_clip_enable */))
1083bf215546Sopenharmony_ci                break;
1084bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
1085bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
1086bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationStateCreateInfo_pnext(pnext->pNext);
1087bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationDepthClipStateCreateInfoEXT_self((const VkPipelineRasterizationDepthClipStateCreateInfoEXT *)pnext);
1088bf215546Sopenharmony_ci            return size;
1089bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:
1090bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(260 /* VK_EXT_line_rasterization */))
1091bf215546Sopenharmony_ci                break;
1092bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
1093bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
1094bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationStateCreateInfo_pnext(pnext->pNext);
1095bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationLineStateCreateInfoEXT_self((const VkPipelineRasterizationLineStateCreateInfoEXT *)pnext);
1096bf215546Sopenharmony_ci            return size;
1097bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT:
1098bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(255 /* VK_EXT_provoking_vertex */))
1099bf215546Sopenharmony_ci                break;
1100bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
1101bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
1102bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationStateCreateInfo_pnext(pnext->pNext);
1103bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self((const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *)pnext);
1104bf215546Sopenharmony_ci            return size;
1105bf215546Sopenharmony_ci        default:
1106bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
1107bf215546Sopenharmony_ci            break;
1108bf215546Sopenharmony_ci        }
1109bf215546Sopenharmony_ci        pnext = pnext->pNext;
1110bf215546Sopenharmony_ci    }
1111bf215546Sopenharmony_ci
1112bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1113bf215546Sopenharmony_ci}
1114bf215546Sopenharmony_ci
1115bf215546Sopenharmony_cistatic inline size_t
1116bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationStateCreateInfo_self(const VkPipelineRasterizationStateCreateInfo *val)
1117bf215546Sopenharmony_ci{
1118bf215546Sopenharmony_ci    size_t size = 0;
1119bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1120bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
1121bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->depthClampEnable);
1122bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->rasterizerDiscardEnable);
1123bf215546Sopenharmony_ci    size += vn_sizeof_VkPolygonMode(&val->polygonMode);
1124bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->cullMode);
1125bf215546Sopenharmony_ci    size += vn_sizeof_VkFrontFace(&val->frontFace);
1126bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->depthBiasEnable);
1127bf215546Sopenharmony_ci    size += vn_sizeof_float(&val->depthBiasConstantFactor);
1128bf215546Sopenharmony_ci    size += vn_sizeof_float(&val->depthBiasClamp);
1129bf215546Sopenharmony_ci    size += vn_sizeof_float(&val->depthBiasSlopeFactor);
1130bf215546Sopenharmony_ci    size += vn_sizeof_float(&val->lineWidth);
1131bf215546Sopenharmony_ci    return size;
1132bf215546Sopenharmony_ci}
1133bf215546Sopenharmony_ci
1134bf215546Sopenharmony_cistatic inline size_t
1135bf215546Sopenharmony_civn_sizeof_VkPipelineRasterizationStateCreateInfo(const VkPipelineRasterizationStateCreateInfo *val)
1136bf215546Sopenharmony_ci{
1137bf215546Sopenharmony_ci    size_t size = 0;
1138bf215546Sopenharmony_ci
1139bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1140bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationStateCreateInfo_pnext(val->pNext);
1141bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRasterizationStateCreateInfo_self(val);
1142bf215546Sopenharmony_ci
1143bf215546Sopenharmony_ci    return size;
1144bf215546Sopenharmony_ci}
1145bf215546Sopenharmony_ci
1146bf215546Sopenharmony_cistatic inline void
1147bf215546Sopenharmony_civn_encode_VkPipelineRasterizationStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1148bf215546Sopenharmony_ci{
1149bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
1150bf215546Sopenharmony_ci
1151bf215546Sopenharmony_ci    while (pnext) {
1152bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
1153bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
1154bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(102 /* VK_EXT_conservative_rasterization */))
1155bf215546Sopenharmony_ci                break;
1156bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
1157bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
1158bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationStateCreateInfo_pnext(enc, pnext->pNext);
1159bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationConservativeStateCreateInfoEXT_self(enc, (const VkPipelineRasterizationConservativeStateCreateInfoEXT *)pnext);
1160bf215546Sopenharmony_ci            return;
1161bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
1162bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(29 /* VK_EXT_transform_feedback */))
1163bf215546Sopenharmony_ci                break;
1164bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
1165bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
1166bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationStateCreateInfo_pnext(enc, pnext->pNext);
1167bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationStateStreamCreateInfoEXT_self(enc, (const VkPipelineRasterizationStateStreamCreateInfoEXT *)pnext);
1168bf215546Sopenharmony_ci            return;
1169bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:
1170bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(103 /* VK_EXT_depth_clip_enable */))
1171bf215546Sopenharmony_ci                break;
1172bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
1173bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
1174bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationStateCreateInfo_pnext(enc, pnext->pNext);
1175bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationDepthClipStateCreateInfoEXT_self(enc, (const VkPipelineRasterizationDepthClipStateCreateInfoEXT *)pnext);
1176bf215546Sopenharmony_ci            return;
1177bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:
1178bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(260 /* VK_EXT_line_rasterization */))
1179bf215546Sopenharmony_ci                break;
1180bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
1181bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
1182bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationStateCreateInfo_pnext(enc, pnext->pNext);
1183bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationLineStateCreateInfoEXT_self(enc, (const VkPipelineRasterizationLineStateCreateInfoEXT *)pnext);
1184bf215546Sopenharmony_ci            return;
1185bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT:
1186bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(255 /* VK_EXT_provoking_vertex */))
1187bf215546Sopenharmony_ci                break;
1188bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
1189bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
1190bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationStateCreateInfo_pnext(enc, pnext->pNext);
1191bf215546Sopenharmony_ci            vn_encode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self(enc, (const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *)pnext);
1192bf215546Sopenharmony_ci            return;
1193bf215546Sopenharmony_ci        default:
1194bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
1195bf215546Sopenharmony_ci            break;
1196bf215546Sopenharmony_ci        }
1197bf215546Sopenharmony_ci        pnext = pnext->pNext;
1198bf215546Sopenharmony_ci    }
1199bf215546Sopenharmony_ci
1200bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1201bf215546Sopenharmony_ci}
1202bf215546Sopenharmony_ci
1203bf215546Sopenharmony_cistatic inline void
1204bf215546Sopenharmony_civn_encode_VkPipelineRasterizationStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineRasterizationStateCreateInfo *val)
1205bf215546Sopenharmony_ci{
1206bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1207bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
1208bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->depthClampEnable);
1209bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->rasterizerDiscardEnable);
1210bf215546Sopenharmony_ci    vn_encode_VkPolygonMode(enc, &val->polygonMode);
1211bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->cullMode);
1212bf215546Sopenharmony_ci    vn_encode_VkFrontFace(enc, &val->frontFace);
1213bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->depthBiasEnable);
1214bf215546Sopenharmony_ci    vn_encode_float(enc, &val->depthBiasConstantFactor);
1215bf215546Sopenharmony_ci    vn_encode_float(enc, &val->depthBiasClamp);
1216bf215546Sopenharmony_ci    vn_encode_float(enc, &val->depthBiasSlopeFactor);
1217bf215546Sopenharmony_ci    vn_encode_float(enc, &val->lineWidth);
1218bf215546Sopenharmony_ci}
1219bf215546Sopenharmony_ci
1220bf215546Sopenharmony_cistatic inline void
1221bf215546Sopenharmony_civn_encode_VkPipelineRasterizationStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineRasterizationStateCreateInfo *val)
1222bf215546Sopenharmony_ci{
1223bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO);
1224bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO });
1225bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationStateCreateInfo_pnext(enc, val->pNext);
1226bf215546Sopenharmony_ci    vn_encode_VkPipelineRasterizationStateCreateInfo_self(enc, val);
1227bf215546Sopenharmony_ci}
1228bf215546Sopenharmony_ci
1229bf215546Sopenharmony_ci/* struct VkPipelineMultisampleStateCreateInfo chain */
1230bf215546Sopenharmony_ci
1231bf215546Sopenharmony_cistatic inline size_t
1232bf215546Sopenharmony_civn_sizeof_VkPipelineMultisampleStateCreateInfo_pnext(const void *val)
1233bf215546Sopenharmony_ci{
1234bf215546Sopenharmony_ci    /* no known/supported struct */
1235bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1236bf215546Sopenharmony_ci}
1237bf215546Sopenharmony_ci
1238bf215546Sopenharmony_cistatic inline size_t
1239bf215546Sopenharmony_civn_sizeof_VkPipelineMultisampleStateCreateInfo_self(const VkPipelineMultisampleStateCreateInfo *val)
1240bf215546Sopenharmony_ci{
1241bf215546Sopenharmony_ci    size_t size = 0;
1242bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1243bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
1244bf215546Sopenharmony_ci    size += vn_sizeof_VkSampleCountFlagBits(&val->rasterizationSamples);
1245bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->sampleShadingEnable);
1246bf215546Sopenharmony_ci    size += vn_sizeof_float(&val->minSampleShading);
1247bf215546Sopenharmony_ci    if (val->pSampleMask) {
1248bf215546Sopenharmony_ci        size += vn_sizeof_array_size((val->rasterizationSamples + 31) / 32);
1249bf215546Sopenharmony_ci        size += vn_sizeof_VkSampleMask_array(val->pSampleMask, (val->rasterizationSamples + 31) / 32);
1250bf215546Sopenharmony_ci    } else {
1251bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
1252bf215546Sopenharmony_ci    }
1253bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->alphaToCoverageEnable);
1254bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->alphaToOneEnable);
1255bf215546Sopenharmony_ci    return size;
1256bf215546Sopenharmony_ci}
1257bf215546Sopenharmony_ci
1258bf215546Sopenharmony_cistatic inline size_t
1259bf215546Sopenharmony_civn_sizeof_VkPipelineMultisampleStateCreateInfo(const VkPipelineMultisampleStateCreateInfo *val)
1260bf215546Sopenharmony_ci{
1261bf215546Sopenharmony_ci    size_t size = 0;
1262bf215546Sopenharmony_ci
1263bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1264bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineMultisampleStateCreateInfo_pnext(val->pNext);
1265bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineMultisampleStateCreateInfo_self(val);
1266bf215546Sopenharmony_ci
1267bf215546Sopenharmony_ci    return size;
1268bf215546Sopenharmony_ci}
1269bf215546Sopenharmony_ci
1270bf215546Sopenharmony_cistatic inline void
1271bf215546Sopenharmony_civn_encode_VkPipelineMultisampleStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1272bf215546Sopenharmony_ci{
1273bf215546Sopenharmony_ci    /* no known/supported struct */
1274bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1275bf215546Sopenharmony_ci}
1276bf215546Sopenharmony_ci
1277bf215546Sopenharmony_cistatic inline void
1278bf215546Sopenharmony_civn_encode_VkPipelineMultisampleStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineMultisampleStateCreateInfo *val)
1279bf215546Sopenharmony_ci{
1280bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1281bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
1282bf215546Sopenharmony_ci    vn_encode_VkSampleCountFlagBits(enc, &val->rasterizationSamples);
1283bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->sampleShadingEnable);
1284bf215546Sopenharmony_ci    vn_encode_float(enc, &val->minSampleShading);
1285bf215546Sopenharmony_ci    if (val->pSampleMask) {
1286bf215546Sopenharmony_ci        vn_encode_array_size(enc, (val->rasterizationSamples + 31) / 32);
1287bf215546Sopenharmony_ci        vn_encode_VkSampleMask_array(enc, val->pSampleMask, (val->rasterizationSamples + 31) / 32);
1288bf215546Sopenharmony_ci    } else {
1289bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
1290bf215546Sopenharmony_ci    }
1291bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->alphaToCoverageEnable);
1292bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->alphaToOneEnable);
1293bf215546Sopenharmony_ci}
1294bf215546Sopenharmony_ci
1295bf215546Sopenharmony_cistatic inline void
1296bf215546Sopenharmony_civn_encode_VkPipelineMultisampleStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineMultisampleStateCreateInfo *val)
1297bf215546Sopenharmony_ci{
1298bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO);
1299bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO });
1300bf215546Sopenharmony_ci    vn_encode_VkPipelineMultisampleStateCreateInfo_pnext(enc, val->pNext);
1301bf215546Sopenharmony_ci    vn_encode_VkPipelineMultisampleStateCreateInfo_self(enc, val);
1302bf215546Sopenharmony_ci}
1303bf215546Sopenharmony_ci
1304bf215546Sopenharmony_ci/* struct VkStencilOpState */
1305bf215546Sopenharmony_ci
1306bf215546Sopenharmony_cistatic inline size_t
1307bf215546Sopenharmony_civn_sizeof_VkStencilOpState(const VkStencilOpState *val)
1308bf215546Sopenharmony_ci{
1309bf215546Sopenharmony_ci    size_t size = 0;
1310bf215546Sopenharmony_ci    size += vn_sizeof_VkStencilOp(&val->failOp);
1311bf215546Sopenharmony_ci    size += vn_sizeof_VkStencilOp(&val->passOp);
1312bf215546Sopenharmony_ci    size += vn_sizeof_VkStencilOp(&val->depthFailOp);
1313bf215546Sopenharmony_ci    size += vn_sizeof_VkCompareOp(&val->compareOp);
1314bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->compareMask);
1315bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->writeMask);
1316bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->reference);
1317bf215546Sopenharmony_ci    return size;
1318bf215546Sopenharmony_ci}
1319bf215546Sopenharmony_ci
1320bf215546Sopenharmony_cistatic inline void
1321bf215546Sopenharmony_civn_encode_VkStencilOpState(struct vn_cs_encoder *enc, const VkStencilOpState *val)
1322bf215546Sopenharmony_ci{
1323bf215546Sopenharmony_ci    vn_encode_VkStencilOp(enc, &val->failOp);
1324bf215546Sopenharmony_ci    vn_encode_VkStencilOp(enc, &val->passOp);
1325bf215546Sopenharmony_ci    vn_encode_VkStencilOp(enc, &val->depthFailOp);
1326bf215546Sopenharmony_ci    vn_encode_VkCompareOp(enc, &val->compareOp);
1327bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->compareMask);
1328bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->writeMask);
1329bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->reference);
1330bf215546Sopenharmony_ci}
1331bf215546Sopenharmony_ci
1332bf215546Sopenharmony_ci/* struct VkPipelineDepthStencilStateCreateInfo chain */
1333bf215546Sopenharmony_ci
1334bf215546Sopenharmony_cistatic inline size_t
1335bf215546Sopenharmony_civn_sizeof_VkPipelineDepthStencilStateCreateInfo_pnext(const void *val)
1336bf215546Sopenharmony_ci{
1337bf215546Sopenharmony_ci    /* no known/supported struct */
1338bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1339bf215546Sopenharmony_ci}
1340bf215546Sopenharmony_ci
1341bf215546Sopenharmony_cistatic inline size_t
1342bf215546Sopenharmony_civn_sizeof_VkPipelineDepthStencilStateCreateInfo_self(const VkPipelineDepthStencilStateCreateInfo *val)
1343bf215546Sopenharmony_ci{
1344bf215546Sopenharmony_ci    size_t size = 0;
1345bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1346bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
1347bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->depthTestEnable);
1348bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->depthWriteEnable);
1349bf215546Sopenharmony_ci    size += vn_sizeof_VkCompareOp(&val->depthCompareOp);
1350bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->depthBoundsTestEnable);
1351bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->stencilTestEnable);
1352bf215546Sopenharmony_ci    size += vn_sizeof_VkStencilOpState(&val->front);
1353bf215546Sopenharmony_ci    size += vn_sizeof_VkStencilOpState(&val->back);
1354bf215546Sopenharmony_ci    size += vn_sizeof_float(&val->minDepthBounds);
1355bf215546Sopenharmony_ci    size += vn_sizeof_float(&val->maxDepthBounds);
1356bf215546Sopenharmony_ci    return size;
1357bf215546Sopenharmony_ci}
1358bf215546Sopenharmony_ci
1359bf215546Sopenharmony_cistatic inline size_t
1360bf215546Sopenharmony_civn_sizeof_VkPipelineDepthStencilStateCreateInfo(const VkPipelineDepthStencilStateCreateInfo *val)
1361bf215546Sopenharmony_ci{
1362bf215546Sopenharmony_ci    size_t size = 0;
1363bf215546Sopenharmony_ci
1364bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1365bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineDepthStencilStateCreateInfo_pnext(val->pNext);
1366bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineDepthStencilStateCreateInfo_self(val);
1367bf215546Sopenharmony_ci
1368bf215546Sopenharmony_ci    return size;
1369bf215546Sopenharmony_ci}
1370bf215546Sopenharmony_ci
1371bf215546Sopenharmony_cistatic inline void
1372bf215546Sopenharmony_civn_encode_VkPipelineDepthStencilStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1373bf215546Sopenharmony_ci{
1374bf215546Sopenharmony_ci    /* no known/supported struct */
1375bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1376bf215546Sopenharmony_ci}
1377bf215546Sopenharmony_ci
1378bf215546Sopenharmony_cistatic inline void
1379bf215546Sopenharmony_civn_encode_VkPipelineDepthStencilStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineDepthStencilStateCreateInfo *val)
1380bf215546Sopenharmony_ci{
1381bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1382bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
1383bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->depthTestEnable);
1384bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->depthWriteEnable);
1385bf215546Sopenharmony_ci    vn_encode_VkCompareOp(enc, &val->depthCompareOp);
1386bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->depthBoundsTestEnable);
1387bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->stencilTestEnable);
1388bf215546Sopenharmony_ci    vn_encode_VkStencilOpState(enc, &val->front);
1389bf215546Sopenharmony_ci    vn_encode_VkStencilOpState(enc, &val->back);
1390bf215546Sopenharmony_ci    vn_encode_float(enc, &val->minDepthBounds);
1391bf215546Sopenharmony_ci    vn_encode_float(enc, &val->maxDepthBounds);
1392bf215546Sopenharmony_ci}
1393bf215546Sopenharmony_ci
1394bf215546Sopenharmony_cistatic inline void
1395bf215546Sopenharmony_civn_encode_VkPipelineDepthStencilStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineDepthStencilStateCreateInfo *val)
1396bf215546Sopenharmony_ci{
1397bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO);
1398bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO });
1399bf215546Sopenharmony_ci    vn_encode_VkPipelineDepthStencilStateCreateInfo_pnext(enc, val->pNext);
1400bf215546Sopenharmony_ci    vn_encode_VkPipelineDepthStencilStateCreateInfo_self(enc, val);
1401bf215546Sopenharmony_ci}
1402bf215546Sopenharmony_ci
1403bf215546Sopenharmony_ci/* struct VkPipelineColorBlendAttachmentState */
1404bf215546Sopenharmony_ci
1405bf215546Sopenharmony_cistatic inline size_t
1406bf215546Sopenharmony_civn_sizeof_VkPipelineColorBlendAttachmentState(const VkPipelineColorBlendAttachmentState *val)
1407bf215546Sopenharmony_ci{
1408bf215546Sopenharmony_ci    size_t size = 0;
1409bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->blendEnable);
1410bf215546Sopenharmony_ci    size += vn_sizeof_VkBlendFactor(&val->srcColorBlendFactor);
1411bf215546Sopenharmony_ci    size += vn_sizeof_VkBlendFactor(&val->dstColorBlendFactor);
1412bf215546Sopenharmony_ci    size += vn_sizeof_VkBlendOp(&val->colorBlendOp);
1413bf215546Sopenharmony_ci    size += vn_sizeof_VkBlendFactor(&val->srcAlphaBlendFactor);
1414bf215546Sopenharmony_ci    size += vn_sizeof_VkBlendFactor(&val->dstAlphaBlendFactor);
1415bf215546Sopenharmony_ci    size += vn_sizeof_VkBlendOp(&val->alphaBlendOp);
1416bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->colorWriteMask);
1417bf215546Sopenharmony_ci    return size;
1418bf215546Sopenharmony_ci}
1419bf215546Sopenharmony_ci
1420bf215546Sopenharmony_cistatic inline void
1421bf215546Sopenharmony_civn_encode_VkPipelineColorBlendAttachmentState(struct vn_cs_encoder *enc, const VkPipelineColorBlendAttachmentState *val)
1422bf215546Sopenharmony_ci{
1423bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->blendEnable);
1424bf215546Sopenharmony_ci    vn_encode_VkBlendFactor(enc, &val->srcColorBlendFactor);
1425bf215546Sopenharmony_ci    vn_encode_VkBlendFactor(enc, &val->dstColorBlendFactor);
1426bf215546Sopenharmony_ci    vn_encode_VkBlendOp(enc, &val->colorBlendOp);
1427bf215546Sopenharmony_ci    vn_encode_VkBlendFactor(enc, &val->srcAlphaBlendFactor);
1428bf215546Sopenharmony_ci    vn_encode_VkBlendFactor(enc, &val->dstAlphaBlendFactor);
1429bf215546Sopenharmony_ci    vn_encode_VkBlendOp(enc, &val->alphaBlendOp);
1430bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->colorWriteMask);
1431bf215546Sopenharmony_ci}
1432bf215546Sopenharmony_ci
1433bf215546Sopenharmony_ci/* struct VkPipelineColorBlendStateCreateInfo chain */
1434bf215546Sopenharmony_ci
1435bf215546Sopenharmony_cistatic inline size_t
1436bf215546Sopenharmony_civn_sizeof_VkPipelineColorBlendStateCreateInfo_pnext(const void *val)
1437bf215546Sopenharmony_ci{
1438bf215546Sopenharmony_ci    /* no known/supported struct */
1439bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1440bf215546Sopenharmony_ci}
1441bf215546Sopenharmony_ci
1442bf215546Sopenharmony_cistatic inline size_t
1443bf215546Sopenharmony_civn_sizeof_VkPipelineColorBlendStateCreateInfo_self(const VkPipelineColorBlendStateCreateInfo *val)
1444bf215546Sopenharmony_ci{
1445bf215546Sopenharmony_ci    size_t size = 0;
1446bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1447bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
1448bf215546Sopenharmony_ci    size += vn_sizeof_VkBool32(&val->logicOpEnable);
1449bf215546Sopenharmony_ci    size += vn_sizeof_VkLogicOp(&val->logicOp);
1450bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->attachmentCount);
1451bf215546Sopenharmony_ci    if (val->pAttachments) {
1452bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->attachmentCount);
1453bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->attachmentCount; i++)
1454bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineColorBlendAttachmentState(&val->pAttachments[i]);
1455bf215546Sopenharmony_ci    } else {
1456bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
1457bf215546Sopenharmony_ci    }
1458bf215546Sopenharmony_ci    size += vn_sizeof_array_size(4);
1459bf215546Sopenharmony_ci    size += vn_sizeof_float_array(val->blendConstants, 4);
1460bf215546Sopenharmony_ci    return size;
1461bf215546Sopenharmony_ci}
1462bf215546Sopenharmony_ci
1463bf215546Sopenharmony_cistatic inline size_t
1464bf215546Sopenharmony_civn_sizeof_VkPipelineColorBlendStateCreateInfo(const VkPipelineColorBlendStateCreateInfo *val)
1465bf215546Sopenharmony_ci{
1466bf215546Sopenharmony_ci    size_t size = 0;
1467bf215546Sopenharmony_ci
1468bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1469bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineColorBlendStateCreateInfo_pnext(val->pNext);
1470bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineColorBlendStateCreateInfo_self(val);
1471bf215546Sopenharmony_ci
1472bf215546Sopenharmony_ci    return size;
1473bf215546Sopenharmony_ci}
1474bf215546Sopenharmony_ci
1475bf215546Sopenharmony_cistatic inline void
1476bf215546Sopenharmony_civn_encode_VkPipelineColorBlendStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1477bf215546Sopenharmony_ci{
1478bf215546Sopenharmony_ci    /* no known/supported struct */
1479bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1480bf215546Sopenharmony_ci}
1481bf215546Sopenharmony_ci
1482bf215546Sopenharmony_cistatic inline void
1483bf215546Sopenharmony_civn_encode_VkPipelineColorBlendStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineColorBlendStateCreateInfo *val)
1484bf215546Sopenharmony_ci{
1485bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1486bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
1487bf215546Sopenharmony_ci    vn_encode_VkBool32(enc, &val->logicOpEnable);
1488bf215546Sopenharmony_ci    vn_encode_VkLogicOp(enc, &val->logicOp);
1489bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->attachmentCount);
1490bf215546Sopenharmony_ci    if (val->pAttachments) {
1491bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->attachmentCount);
1492bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->attachmentCount; i++)
1493bf215546Sopenharmony_ci            vn_encode_VkPipelineColorBlendAttachmentState(enc, &val->pAttachments[i]);
1494bf215546Sopenharmony_ci    } else {
1495bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
1496bf215546Sopenharmony_ci    }
1497bf215546Sopenharmony_ci    vn_encode_array_size(enc, 4);
1498bf215546Sopenharmony_ci    vn_encode_float_array(enc, val->blendConstants, 4);
1499bf215546Sopenharmony_ci}
1500bf215546Sopenharmony_ci
1501bf215546Sopenharmony_cistatic inline void
1502bf215546Sopenharmony_civn_encode_VkPipelineColorBlendStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineColorBlendStateCreateInfo *val)
1503bf215546Sopenharmony_ci{
1504bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO);
1505bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO });
1506bf215546Sopenharmony_ci    vn_encode_VkPipelineColorBlendStateCreateInfo_pnext(enc, val->pNext);
1507bf215546Sopenharmony_ci    vn_encode_VkPipelineColorBlendStateCreateInfo_self(enc, val);
1508bf215546Sopenharmony_ci}
1509bf215546Sopenharmony_ci
1510bf215546Sopenharmony_ci/* struct VkPipelineDynamicStateCreateInfo chain */
1511bf215546Sopenharmony_ci
1512bf215546Sopenharmony_cistatic inline size_t
1513bf215546Sopenharmony_civn_sizeof_VkPipelineDynamicStateCreateInfo_pnext(const void *val)
1514bf215546Sopenharmony_ci{
1515bf215546Sopenharmony_ci    /* no known/supported struct */
1516bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1517bf215546Sopenharmony_ci}
1518bf215546Sopenharmony_ci
1519bf215546Sopenharmony_cistatic inline size_t
1520bf215546Sopenharmony_civn_sizeof_VkPipelineDynamicStateCreateInfo_self(const VkPipelineDynamicStateCreateInfo *val)
1521bf215546Sopenharmony_ci{
1522bf215546Sopenharmony_ci    size_t size = 0;
1523bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1524bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
1525bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->dynamicStateCount);
1526bf215546Sopenharmony_ci    if (val->pDynamicStates) {
1527bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->dynamicStateCount);
1528bf215546Sopenharmony_ci        size += vn_sizeof_VkDynamicState_array(val->pDynamicStates, val->dynamicStateCount);
1529bf215546Sopenharmony_ci    } else {
1530bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
1531bf215546Sopenharmony_ci    }
1532bf215546Sopenharmony_ci    return size;
1533bf215546Sopenharmony_ci}
1534bf215546Sopenharmony_ci
1535bf215546Sopenharmony_cistatic inline size_t
1536bf215546Sopenharmony_civn_sizeof_VkPipelineDynamicStateCreateInfo(const VkPipelineDynamicStateCreateInfo *val)
1537bf215546Sopenharmony_ci{
1538bf215546Sopenharmony_ci    size_t size = 0;
1539bf215546Sopenharmony_ci
1540bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1541bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineDynamicStateCreateInfo_pnext(val->pNext);
1542bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineDynamicStateCreateInfo_self(val);
1543bf215546Sopenharmony_ci
1544bf215546Sopenharmony_ci    return size;
1545bf215546Sopenharmony_ci}
1546bf215546Sopenharmony_ci
1547bf215546Sopenharmony_cistatic inline void
1548bf215546Sopenharmony_civn_encode_VkPipelineDynamicStateCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1549bf215546Sopenharmony_ci{
1550bf215546Sopenharmony_ci    /* no known/supported struct */
1551bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1552bf215546Sopenharmony_ci}
1553bf215546Sopenharmony_ci
1554bf215546Sopenharmony_cistatic inline void
1555bf215546Sopenharmony_civn_encode_VkPipelineDynamicStateCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineDynamicStateCreateInfo *val)
1556bf215546Sopenharmony_ci{
1557bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1558bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
1559bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->dynamicStateCount);
1560bf215546Sopenharmony_ci    if (val->pDynamicStates) {
1561bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->dynamicStateCount);
1562bf215546Sopenharmony_ci        vn_encode_VkDynamicState_array(enc, val->pDynamicStates, val->dynamicStateCount);
1563bf215546Sopenharmony_ci    } else {
1564bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
1565bf215546Sopenharmony_ci    }
1566bf215546Sopenharmony_ci}
1567bf215546Sopenharmony_ci
1568bf215546Sopenharmony_cistatic inline void
1569bf215546Sopenharmony_civn_encode_VkPipelineDynamicStateCreateInfo(struct vn_cs_encoder *enc, const VkPipelineDynamicStateCreateInfo *val)
1570bf215546Sopenharmony_ci{
1571bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO);
1572bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO });
1573bf215546Sopenharmony_ci    vn_encode_VkPipelineDynamicStateCreateInfo_pnext(enc, val->pNext);
1574bf215546Sopenharmony_ci    vn_encode_VkPipelineDynamicStateCreateInfo_self(enc, val);
1575bf215546Sopenharmony_ci}
1576bf215546Sopenharmony_ci
1577bf215546Sopenharmony_ci/* struct VkPipelineCreationFeedback */
1578bf215546Sopenharmony_ci
1579bf215546Sopenharmony_cistatic inline size_t
1580bf215546Sopenharmony_civn_sizeof_VkPipelineCreationFeedback(const VkPipelineCreationFeedback *val)
1581bf215546Sopenharmony_ci{
1582bf215546Sopenharmony_ci    size_t size = 0;
1583bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
1584bf215546Sopenharmony_ci    size += vn_sizeof_uint64_t(&val->duration);
1585bf215546Sopenharmony_ci    return size;
1586bf215546Sopenharmony_ci}
1587bf215546Sopenharmony_ci
1588bf215546Sopenharmony_cistatic inline void
1589bf215546Sopenharmony_civn_encode_VkPipelineCreationFeedback(struct vn_cs_encoder *enc, const VkPipelineCreationFeedback *val)
1590bf215546Sopenharmony_ci{
1591bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
1592bf215546Sopenharmony_ci    vn_encode_uint64_t(enc, &val->duration);
1593bf215546Sopenharmony_ci}
1594bf215546Sopenharmony_ci
1595bf215546Sopenharmony_ci/* struct VkPipelineCreationFeedbackCreateInfo chain */
1596bf215546Sopenharmony_ci
1597bf215546Sopenharmony_cistatic inline size_t
1598bf215546Sopenharmony_civn_sizeof_VkPipelineCreationFeedbackCreateInfo_pnext(const void *val)
1599bf215546Sopenharmony_ci{
1600bf215546Sopenharmony_ci    /* no known/supported struct */
1601bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1602bf215546Sopenharmony_ci}
1603bf215546Sopenharmony_ci
1604bf215546Sopenharmony_cistatic inline size_t
1605bf215546Sopenharmony_civn_sizeof_VkPipelineCreationFeedbackCreateInfo_self(const VkPipelineCreationFeedbackCreateInfo *val)
1606bf215546Sopenharmony_ci{
1607bf215546Sopenharmony_ci    size_t size = 0;
1608bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1609bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pPipelineCreationFeedback);
1610bf215546Sopenharmony_ci    if (val->pPipelineCreationFeedback)
1611bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineCreationFeedback(val->pPipelineCreationFeedback);
1612bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->pipelineStageCreationFeedbackCount);
1613bf215546Sopenharmony_ci    if (val->pPipelineStageCreationFeedbacks) {
1614bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->pipelineStageCreationFeedbackCount);
1615bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->pipelineStageCreationFeedbackCount; i++)
1616bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineCreationFeedback(&val->pPipelineStageCreationFeedbacks[i]);
1617bf215546Sopenharmony_ci    } else {
1618bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
1619bf215546Sopenharmony_ci    }
1620bf215546Sopenharmony_ci    return size;
1621bf215546Sopenharmony_ci}
1622bf215546Sopenharmony_ci
1623bf215546Sopenharmony_cistatic inline size_t
1624bf215546Sopenharmony_civn_sizeof_VkPipelineCreationFeedbackCreateInfo(const VkPipelineCreationFeedbackCreateInfo *val)
1625bf215546Sopenharmony_ci{
1626bf215546Sopenharmony_ci    size_t size = 0;
1627bf215546Sopenharmony_ci
1628bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1629bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineCreationFeedbackCreateInfo_pnext(val->pNext);
1630bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineCreationFeedbackCreateInfo_self(val);
1631bf215546Sopenharmony_ci
1632bf215546Sopenharmony_ci    return size;
1633bf215546Sopenharmony_ci}
1634bf215546Sopenharmony_ci
1635bf215546Sopenharmony_cistatic inline void
1636bf215546Sopenharmony_civn_encode_VkPipelineCreationFeedbackCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1637bf215546Sopenharmony_ci{
1638bf215546Sopenharmony_ci    /* no known/supported struct */
1639bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1640bf215546Sopenharmony_ci}
1641bf215546Sopenharmony_ci
1642bf215546Sopenharmony_cistatic inline void
1643bf215546Sopenharmony_civn_encode_VkPipelineCreationFeedbackCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineCreationFeedbackCreateInfo *val)
1644bf215546Sopenharmony_ci{
1645bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1646bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pPipelineCreationFeedback))
1647bf215546Sopenharmony_ci        vn_encode_VkPipelineCreationFeedback(enc, val->pPipelineCreationFeedback);
1648bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->pipelineStageCreationFeedbackCount);
1649bf215546Sopenharmony_ci    if (val->pPipelineStageCreationFeedbacks) {
1650bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->pipelineStageCreationFeedbackCount);
1651bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->pipelineStageCreationFeedbackCount; i++)
1652bf215546Sopenharmony_ci            vn_encode_VkPipelineCreationFeedback(enc, &val->pPipelineStageCreationFeedbacks[i]);
1653bf215546Sopenharmony_ci    } else {
1654bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
1655bf215546Sopenharmony_ci    }
1656bf215546Sopenharmony_ci}
1657bf215546Sopenharmony_ci
1658bf215546Sopenharmony_cistatic inline void
1659bf215546Sopenharmony_civn_encode_VkPipelineCreationFeedbackCreateInfo(struct vn_cs_encoder *enc, const VkPipelineCreationFeedbackCreateInfo *val)
1660bf215546Sopenharmony_ci{
1661bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO);
1662bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO });
1663bf215546Sopenharmony_ci    vn_encode_VkPipelineCreationFeedbackCreateInfo_pnext(enc, val->pNext);
1664bf215546Sopenharmony_ci    vn_encode_VkPipelineCreationFeedbackCreateInfo_self(enc, val);
1665bf215546Sopenharmony_ci}
1666bf215546Sopenharmony_ci
1667bf215546Sopenharmony_ci/* struct VkPipelineRenderingCreateInfo chain */
1668bf215546Sopenharmony_ci
1669bf215546Sopenharmony_cistatic inline size_t
1670bf215546Sopenharmony_civn_sizeof_VkPipelineRenderingCreateInfo_pnext(const void *val)
1671bf215546Sopenharmony_ci{
1672bf215546Sopenharmony_ci    /* no known/supported struct */
1673bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1674bf215546Sopenharmony_ci}
1675bf215546Sopenharmony_ci
1676bf215546Sopenharmony_cistatic inline size_t
1677bf215546Sopenharmony_civn_sizeof_VkPipelineRenderingCreateInfo_self(const VkPipelineRenderingCreateInfo *val)
1678bf215546Sopenharmony_ci{
1679bf215546Sopenharmony_ci    size_t size = 0;
1680bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1681bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->viewMask);
1682bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->colorAttachmentCount);
1683bf215546Sopenharmony_ci    if (val->pColorAttachmentFormats) {
1684bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->colorAttachmentCount);
1685bf215546Sopenharmony_ci        size += vn_sizeof_VkFormat_array(val->pColorAttachmentFormats, val->colorAttachmentCount);
1686bf215546Sopenharmony_ci    } else {
1687bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
1688bf215546Sopenharmony_ci    }
1689bf215546Sopenharmony_ci    size += vn_sizeof_VkFormat(&val->depthAttachmentFormat);
1690bf215546Sopenharmony_ci    size += vn_sizeof_VkFormat(&val->stencilAttachmentFormat);
1691bf215546Sopenharmony_ci    return size;
1692bf215546Sopenharmony_ci}
1693bf215546Sopenharmony_ci
1694bf215546Sopenharmony_cistatic inline size_t
1695bf215546Sopenharmony_civn_sizeof_VkPipelineRenderingCreateInfo(const VkPipelineRenderingCreateInfo *val)
1696bf215546Sopenharmony_ci{
1697bf215546Sopenharmony_ci    size_t size = 0;
1698bf215546Sopenharmony_ci
1699bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1700bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRenderingCreateInfo_pnext(val->pNext);
1701bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineRenderingCreateInfo_self(val);
1702bf215546Sopenharmony_ci
1703bf215546Sopenharmony_ci    return size;
1704bf215546Sopenharmony_ci}
1705bf215546Sopenharmony_ci
1706bf215546Sopenharmony_cistatic inline void
1707bf215546Sopenharmony_civn_encode_VkPipelineRenderingCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1708bf215546Sopenharmony_ci{
1709bf215546Sopenharmony_ci    /* no known/supported struct */
1710bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1711bf215546Sopenharmony_ci}
1712bf215546Sopenharmony_ci
1713bf215546Sopenharmony_cistatic inline void
1714bf215546Sopenharmony_civn_encode_VkPipelineRenderingCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineRenderingCreateInfo *val)
1715bf215546Sopenharmony_ci{
1716bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1717bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->viewMask);
1718bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->colorAttachmentCount);
1719bf215546Sopenharmony_ci    if (val->pColorAttachmentFormats) {
1720bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->colorAttachmentCount);
1721bf215546Sopenharmony_ci        vn_encode_VkFormat_array(enc, val->pColorAttachmentFormats, val->colorAttachmentCount);
1722bf215546Sopenharmony_ci    } else {
1723bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
1724bf215546Sopenharmony_ci    }
1725bf215546Sopenharmony_ci    vn_encode_VkFormat(enc, &val->depthAttachmentFormat);
1726bf215546Sopenharmony_ci    vn_encode_VkFormat(enc, &val->stencilAttachmentFormat);
1727bf215546Sopenharmony_ci}
1728bf215546Sopenharmony_ci
1729bf215546Sopenharmony_cistatic inline void
1730bf215546Sopenharmony_civn_encode_VkPipelineRenderingCreateInfo(struct vn_cs_encoder *enc, const VkPipelineRenderingCreateInfo *val)
1731bf215546Sopenharmony_ci{
1732bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO);
1733bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO });
1734bf215546Sopenharmony_ci    vn_encode_VkPipelineRenderingCreateInfo_pnext(enc, val->pNext);
1735bf215546Sopenharmony_ci    vn_encode_VkPipelineRenderingCreateInfo_self(enc, val);
1736bf215546Sopenharmony_ci}
1737bf215546Sopenharmony_ci
1738bf215546Sopenharmony_ci/* struct VkGraphicsPipelineCreateInfo chain */
1739bf215546Sopenharmony_ci
1740bf215546Sopenharmony_cistatic inline size_t
1741bf215546Sopenharmony_civn_sizeof_VkGraphicsPipelineCreateInfo_pnext(const void *val)
1742bf215546Sopenharmony_ci{
1743bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
1744bf215546Sopenharmony_ci    size_t size = 0;
1745bf215546Sopenharmony_ci
1746bf215546Sopenharmony_ci    while (pnext) {
1747bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
1748bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO:
1749bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(193 /* VK_EXT_pipeline_creation_feedback */))
1750bf215546Sopenharmony_ci                break;
1751bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
1752bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
1753bf215546Sopenharmony_ci            size += vn_sizeof_VkGraphicsPipelineCreateInfo_pnext(pnext->pNext);
1754bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineCreationFeedbackCreateInfo_self((const VkPipelineCreationFeedbackCreateInfo *)pnext);
1755bf215546Sopenharmony_ci            return size;
1756bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO:
1757bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(45 /* VK_KHR_dynamic_rendering */))
1758bf215546Sopenharmony_ci                break;
1759bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
1760bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
1761bf215546Sopenharmony_ci            size += vn_sizeof_VkGraphicsPipelineCreateInfo_pnext(pnext->pNext);
1762bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineRenderingCreateInfo_self((const VkPipelineRenderingCreateInfo *)pnext);
1763bf215546Sopenharmony_ci            return size;
1764bf215546Sopenharmony_ci        default:
1765bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
1766bf215546Sopenharmony_ci            break;
1767bf215546Sopenharmony_ci        }
1768bf215546Sopenharmony_ci        pnext = pnext->pNext;
1769bf215546Sopenharmony_ci    }
1770bf215546Sopenharmony_ci
1771bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1772bf215546Sopenharmony_ci}
1773bf215546Sopenharmony_ci
1774bf215546Sopenharmony_cistatic inline size_t
1775bf215546Sopenharmony_civn_sizeof_VkGraphicsPipelineCreateInfo_self(const VkGraphicsPipelineCreateInfo *val)
1776bf215546Sopenharmony_ci{
1777bf215546Sopenharmony_ci    size_t size = 0;
1778bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1779bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
1780bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->stageCount);
1781bf215546Sopenharmony_ci    if (val->pStages) {
1782bf215546Sopenharmony_ci        size += vn_sizeof_array_size(val->stageCount);
1783bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->stageCount; i++)
1784bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineShaderStageCreateInfo(&val->pStages[i]);
1785bf215546Sopenharmony_ci    } else {
1786bf215546Sopenharmony_ci        size += vn_sizeof_array_size(0);
1787bf215546Sopenharmony_ci    }
1788bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pVertexInputState);
1789bf215546Sopenharmony_ci    if (val->pVertexInputState)
1790bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineVertexInputStateCreateInfo(val->pVertexInputState);
1791bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pInputAssemblyState);
1792bf215546Sopenharmony_ci    if (val->pInputAssemblyState)
1793bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineInputAssemblyStateCreateInfo(val->pInputAssemblyState);
1794bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pTessellationState);
1795bf215546Sopenharmony_ci    if (val->pTessellationState)
1796bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineTessellationStateCreateInfo(val->pTessellationState);
1797bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pViewportState);
1798bf215546Sopenharmony_ci    if (val->pViewportState)
1799bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineViewportStateCreateInfo(val->pViewportState);
1800bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pRasterizationState);
1801bf215546Sopenharmony_ci    if (val->pRasterizationState)
1802bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineRasterizationStateCreateInfo(val->pRasterizationState);
1803bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pMultisampleState);
1804bf215546Sopenharmony_ci    if (val->pMultisampleState)
1805bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineMultisampleStateCreateInfo(val->pMultisampleState);
1806bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pDepthStencilState);
1807bf215546Sopenharmony_ci    if (val->pDepthStencilState)
1808bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineDepthStencilStateCreateInfo(val->pDepthStencilState);
1809bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pColorBlendState);
1810bf215546Sopenharmony_ci    if (val->pColorBlendState)
1811bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineColorBlendStateCreateInfo(val->pColorBlendState);
1812bf215546Sopenharmony_ci    size += vn_sizeof_simple_pointer(val->pDynamicState);
1813bf215546Sopenharmony_ci    if (val->pDynamicState)
1814bf215546Sopenharmony_ci        size += vn_sizeof_VkPipelineDynamicStateCreateInfo(val->pDynamicState);
1815bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineLayout(&val->layout);
1816bf215546Sopenharmony_ci    size += vn_sizeof_VkRenderPass(&val->renderPass);
1817bf215546Sopenharmony_ci    size += vn_sizeof_uint32_t(&val->subpass);
1818bf215546Sopenharmony_ci    size += vn_sizeof_VkPipeline(&val->basePipelineHandle);
1819bf215546Sopenharmony_ci    size += vn_sizeof_int32_t(&val->basePipelineIndex);
1820bf215546Sopenharmony_ci    return size;
1821bf215546Sopenharmony_ci}
1822bf215546Sopenharmony_ci
1823bf215546Sopenharmony_cistatic inline size_t
1824bf215546Sopenharmony_civn_sizeof_VkGraphicsPipelineCreateInfo(const VkGraphicsPipelineCreateInfo *val)
1825bf215546Sopenharmony_ci{
1826bf215546Sopenharmony_ci    size_t size = 0;
1827bf215546Sopenharmony_ci
1828bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1829bf215546Sopenharmony_ci    size += vn_sizeof_VkGraphicsPipelineCreateInfo_pnext(val->pNext);
1830bf215546Sopenharmony_ci    size += vn_sizeof_VkGraphicsPipelineCreateInfo_self(val);
1831bf215546Sopenharmony_ci
1832bf215546Sopenharmony_ci    return size;
1833bf215546Sopenharmony_ci}
1834bf215546Sopenharmony_ci
1835bf215546Sopenharmony_cistatic inline void
1836bf215546Sopenharmony_civn_encode_VkGraphicsPipelineCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1837bf215546Sopenharmony_ci{
1838bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
1839bf215546Sopenharmony_ci
1840bf215546Sopenharmony_ci    while (pnext) {
1841bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
1842bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO:
1843bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(193 /* VK_EXT_pipeline_creation_feedback */))
1844bf215546Sopenharmony_ci                break;
1845bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
1846bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
1847bf215546Sopenharmony_ci            vn_encode_VkGraphicsPipelineCreateInfo_pnext(enc, pnext->pNext);
1848bf215546Sopenharmony_ci            vn_encode_VkPipelineCreationFeedbackCreateInfo_self(enc, (const VkPipelineCreationFeedbackCreateInfo *)pnext);
1849bf215546Sopenharmony_ci            return;
1850bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO:
1851bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(45 /* VK_KHR_dynamic_rendering */))
1852bf215546Sopenharmony_ci                break;
1853bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
1854bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
1855bf215546Sopenharmony_ci            vn_encode_VkGraphicsPipelineCreateInfo_pnext(enc, pnext->pNext);
1856bf215546Sopenharmony_ci            vn_encode_VkPipelineRenderingCreateInfo_self(enc, (const VkPipelineRenderingCreateInfo *)pnext);
1857bf215546Sopenharmony_ci            return;
1858bf215546Sopenharmony_ci        default:
1859bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
1860bf215546Sopenharmony_ci            break;
1861bf215546Sopenharmony_ci        }
1862bf215546Sopenharmony_ci        pnext = pnext->pNext;
1863bf215546Sopenharmony_ci    }
1864bf215546Sopenharmony_ci
1865bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1866bf215546Sopenharmony_ci}
1867bf215546Sopenharmony_ci
1868bf215546Sopenharmony_cistatic inline void
1869bf215546Sopenharmony_civn_encode_VkGraphicsPipelineCreateInfo_self(struct vn_cs_encoder *enc, const VkGraphicsPipelineCreateInfo *val)
1870bf215546Sopenharmony_ci{
1871bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1872bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
1873bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->stageCount);
1874bf215546Sopenharmony_ci    if (val->pStages) {
1875bf215546Sopenharmony_ci        vn_encode_array_size(enc, val->stageCount);
1876bf215546Sopenharmony_ci        for (uint32_t i = 0; i < val->stageCount; i++)
1877bf215546Sopenharmony_ci            vn_encode_VkPipelineShaderStageCreateInfo(enc, &val->pStages[i]);
1878bf215546Sopenharmony_ci    } else {
1879bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
1880bf215546Sopenharmony_ci    }
1881bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pVertexInputState))
1882bf215546Sopenharmony_ci        vn_encode_VkPipelineVertexInputStateCreateInfo(enc, val->pVertexInputState);
1883bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pInputAssemblyState))
1884bf215546Sopenharmony_ci        vn_encode_VkPipelineInputAssemblyStateCreateInfo(enc, val->pInputAssemblyState);
1885bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pTessellationState))
1886bf215546Sopenharmony_ci        vn_encode_VkPipelineTessellationStateCreateInfo(enc, val->pTessellationState);
1887bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pViewportState))
1888bf215546Sopenharmony_ci        vn_encode_VkPipelineViewportStateCreateInfo(enc, val->pViewportState);
1889bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pRasterizationState))
1890bf215546Sopenharmony_ci        vn_encode_VkPipelineRasterizationStateCreateInfo(enc, val->pRasterizationState);
1891bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pMultisampleState))
1892bf215546Sopenharmony_ci        vn_encode_VkPipelineMultisampleStateCreateInfo(enc, val->pMultisampleState);
1893bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pDepthStencilState))
1894bf215546Sopenharmony_ci        vn_encode_VkPipelineDepthStencilStateCreateInfo(enc, val->pDepthStencilState);
1895bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pColorBlendState))
1896bf215546Sopenharmony_ci        vn_encode_VkPipelineColorBlendStateCreateInfo(enc, val->pColorBlendState);
1897bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, val->pDynamicState))
1898bf215546Sopenharmony_ci        vn_encode_VkPipelineDynamicStateCreateInfo(enc, val->pDynamicState);
1899bf215546Sopenharmony_ci    vn_encode_VkPipelineLayout(enc, &val->layout);
1900bf215546Sopenharmony_ci    vn_encode_VkRenderPass(enc, &val->renderPass);
1901bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &val->subpass);
1902bf215546Sopenharmony_ci    vn_encode_VkPipeline(enc, &val->basePipelineHandle);
1903bf215546Sopenharmony_ci    vn_encode_int32_t(enc, &val->basePipelineIndex);
1904bf215546Sopenharmony_ci}
1905bf215546Sopenharmony_ci
1906bf215546Sopenharmony_cistatic inline void
1907bf215546Sopenharmony_civn_encode_VkGraphicsPipelineCreateInfo(struct vn_cs_encoder *enc, const VkGraphicsPipelineCreateInfo *val)
1908bf215546Sopenharmony_ci{
1909bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO);
1910bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO });
1911bf215546Sopenharmony_ci    vn_encode_VkGraphicsPipelineCreateInfo_pnext(enc, val->pNext);
1912bf215546Sopenharmony_ci    vn_encode_VkGraphicsPipelineCreateInfo_self(enc, val);
1913bf215546Sopenharmony_ci}
1914bf215546Sopenharmony_ci
1915bf215546Sopenharmony_ci/* struct VkComputePipelineCreateInfo chain */
1916bf215546Sopenharmony_ci
1917bf215546Sopenharmony_cistatic inline size_t
1918bf215546Sopenharmony_civn_sizeof_VkComputePipelineCreateInfo_pnext(const void *val)
1919bf215546Sopenharmony_ci{
1920bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
1921bf215546Sopenharmony_ci    size_t size = 0;
1922bf215546Sopenharmony_ci
1923bf215546Sopenharmony_ci    while (pnext) {
1924bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
1925bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO:
1926bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(193 /* VK_EXT_pipeline_creation_feedback */))
1927bf215546Sopenharmony_ci                break;
1928bf215546Sopenharmony_ci            size += vn_sizeof_simple_pointer(pnext);
1929bf215546Sopenharmony_ci            size += vn_sizeof_VkStructureType(&pnext->sType);
1930bf215546Sopenharmony_ci            size += vn_sizeof_VkComputePipelineCreateInfo_pnext(pnext->pNext);
1931bf215546Sopenharmony_ci            size += vn_sizeof_VkPipelineCreationFeedbackCreateInfo_self((const VkPipelineCreationFeedbackCreateInfo *)pnext);
1932bf215546Sopenharmony_ci            return size;
1933bf215546Sopenharmony_ci        default:
1934bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
1935bf215546Sopenharmony_ci            break;
1936bf215546Sopenharmony_ci        }
1937bf215546Sopenharmony_ci        pnext = pnext->pNext;
1938bf215546Sopenharmony_ci    }
1939bf215546Sopenharmony_ci
1940bf215546Sopenharmony_ci    return vn_sizeof_simple_pointer(NULL);
1941bf215546Sopenharmony_ci}
1942bf215546Sopenharmony_ci
1943bf215546Sopenharmony_cistatic inline size_t
1944bf215546Sopenharmony_civn_sizeof_VkComputePipelineCreateInfo_self(const VkComputePipelineCreateInfo *val)
1945bf215546Sopenharmony_ci{
1946bf215546Sopenharmony_ci    size_t size = 0;
1947bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1948bf215546Sopenharmony_ci    size += vn_sizeof_VkFlags(&val->flags);
1949bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineShaderStageCreateInfo(&val->stage);
1950bf215546Sopenharmony_ci    size += vn_sizeof_VkPipelineLayout(&val->layout);
1951bf215546Sopenharmony_ci    size += vn_sizeof_VkPipeline(&val->basePipelineHandle);
1952bf215546Sopenharmony_ci    size += vn_sizeof_int32_t(&val->basePipelineIndex);
1953bf215546Sopenharmony_ci    return size;
1954bf215546Sopenharmony_ci}
1955bf215546Sopenharmony_ci
1956bf215546Sopenharmony_cistatic inline size_t
1957bf215546Sopenharmony_civn_sizeof_VkComputePipelineCreateInfo(const VkComputePipelineCreateInfo *val)
1958bf215546Sopenharmony_ci{
1959bf215546Sopenharmony_ci    size_t size = 0;
1960bf215546Sopenharmony_ci
1961bf215546Sopenharmony_ci    size += vn_sizeof_VkStructureType(&val->sType);
1962bf215546Sopenharmony_ci    size += vn_sizeof_VkComputePipelineCreateInfo_pnext(val->pNext);
1963bf215546Sopenharmony_ci    size += vn_sizeof_VkComputePipelineCreateInfo_self(val);
1964bf215546Sopenharmony_ci
1965bf215546Sopenharmony_ci    return size;
1966bf215546Sopenharmony_ci}
1967bf215546Sopenharmony_ci
1968bf215546Sopenharmony_cistatic inline void
1969bf215546Sopenharmony_civn_encode_VkComputePipelineCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
1970bf215546Sopenharmony_ci{
1971bf215546Sopenharmony_ci    const VkBaseInStructure *pnext = val;
1972bf215546Sopenharmony_ci
1973bf215546Sopenharmony_ci    while (pnext) {
1974bf215546Sopenharmony_ci        switch ((int32_t)pnext->sType) {
1975bf215546Sopenharmony_ci        case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO:
1976bf215546Sopenharmony_ci            if (!vn_cs_renderer_protocol_has_extension(193 /* VK_EXT_pipeline_creation_feedback */))
1977bf215546Sopenharmony_ci                break;
1978bf215546Sopenharmony_ci            vn_encode_simple_pointer(enc, pnext);
1979bf215546Sopenharmony_ci            vn_encode_VkStructureType(enc, &pnext->sType);
1980bf215546Sopenharmony_ci            vn_encode_VkComputePipelineCreateInfo_pnext(enc, pnext->pNext);
1981bf215546Sopenharmony_ci            vn_encode_VkPipelineCreationFeedbackCreateInfo_self(enc, (const VkPipelineCreationFeedbackCreateInfo *)pnext);
1982bf215546Sopenharmony_ci            return;
1983bf215546Sopenharmony_ci        default:
1984bf215546Sopenharmony_ci            /* ignore unknown/unsupported struct */
1985bf215546Sopenharmony_ci            break;
1986bf215546Sopenharmony_ci        }
1987bf215546Sopenharmony_ci        pnext = pnext->pNext;
1988bf215546Sopenharmony_ci    }
1989bf215546Sopenharmony_ci
1990bf215546Sopenharmony_ci    vn_encode_simple_pointer(enc, NULL);
1991bf215546Sopenharmony_ci}
1992bf215546Sopenharmony_ci
1993bf215546Sopenharmony_cistatic inline void
1994bf215546Sopenharmony_civn_encode_VkComputePipelineCreateInfo_self(struct vn_cs_encoder *enc, const VkComputePipelineCreateInfo *val)
1995bf215546Sopenharmony_ci{
1996bf215546Sopenharmony_ci    /* skip val->{sType,pNext} */
1997bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &val->flags);
1998bf215546Sopenharmony_ci    vn_encode_VkPipelineShaderStageCreateInfo(enc, &val->stage);
1999bf215546Sopenharmony_ci    vn_encode_VkPipelineLayout(enc, &val->layout);
2000bf215546Sopenharmony_ci    vn_encode_VkPipeline(enc, &val->basePipelineHandle);
2001bf215546Sopenharmony_ci    vn_encode_int32_t(enc, &val->basePipelineIndex);
2002bf215546Sopenharmony_ci}
2003bf215546Sopenharmony_ci
2004bf215546Sopenharmony_cistatic inline void
2005bf215546Sopenharmony_civn_encode_VkComputePipelineCreateInfo(struct vn_cs_encoder *enc, const VkComputePipelineCreateInfo *val)
2006bf215546Sopenharmony_ci{
2007bf215546Sopenharmony_ci    assert(val->sType == VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO);
2008bf215546Sopenharmony_ci    vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO });
2009bf215546Sopenharmony_ci    vn_encode_VkComputePipelineCreateInfo_pnext(enc, val->pNext);
2010bf215546Sopenharmony_ci    vn_encode_VkComputePipelineCreateInfo_self(enc, val);
2011bf215546Sopenharmony_ci}
2012bf215546Sopenharmony_ci
2013bf215546Sopenharmony_cistatic inline size_t vn_sizeof_vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2014bf215546Sopenharmony_ci{
2015bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateGraphicsPipelines_EXT;
2016bf215546Sopenharmony_ci    const VkFlags cmd_flags = 0;
2017bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
2018bf215546Sopenharmony_ci
2019bf215546Sopenharmony_ci    cmd_size += vn_sizeof_VkDevice(&device);
2020bf215546Sopenharmony_ci    cmd_size += vn_sizeof_VkPipelineCache(&pipelineCache);
2021bf215546Sopenharmony_ci    cmd_size += vn_sizeof_uint32_t(&createInfoCount);
2022bf215546Sopenharmony_ci    if (pCreateInfos) {
2023bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(createInfoCount);
2024bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2025bf215546Sopenharmony_ci            cmd_size += vn_sizeof_VkGraphicsPipelineCreateInfo(&pCreateInfos[i]);
2026bf215546Sopenharmony_ci    } else {
2027bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(0);
2028bf215546Sopenharmony_ci    }
2029bf215546Sopenharmony_ci    cmd_size += vn_sizeof_simple_pointer(pAllocator);
2030bf215546Sopenharmony_ci    if (pAllocator)
2031bf215546Sopenharmony_ci        assert(false);
2032bf215546Sopenharmony_ci    if (pPipelines) {
2033bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(createInfoCount);
2034bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2035bf215546Sopenharmony_ci            cmd_size += vn_sizeof_VkPipeline(&pPipelines[i]);
2036bf215546Sopenharmony_ci    } else {
2037bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(0);
2038bf215546Sopenharmony_ci    }
2039bf215546Sopenharmony_ci
2040bf215546Sopenharmony_ci    return cmd_size;
2041bf215546Sopenharmony_ci}
2042bf215546Sopenharmony_ci
2043bf215546Sopenharmony_cistatic inline void vn_encode_vkCreateGraphicsPipelines(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2044bf215546Sopenharmony_ci{
2045bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateGraphicsPipelines_EXT;
2046bf215546Sopenharmony_ci
2047bf215546Sopenharmony_ci    vn_encode_VkCommandTypeEXT(enc, &cmd_type);
2048bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &cmd_flags);
2049bf215546Sopenharmony_ci
2050bf215546Sopenharmony_ci    vn_encode_VkDevice(enc, &device);
2051bf215546Sopenharmony_ci    vn_encode_VkPipelineCache(enc, &pipelineCache);
2052bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &createInfoCount);
2053bf215546Sopenharmony_ci    if (pCreateInfos) {
2054bf215546Sopenharmony_ci        vn_encode_array_size(enc, createInfoCount);
2055bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2056bf215546Sopenharmony_ci            vn_encode_VkGraphicsPipelineCreateInfo(enc, &pCreateInfos[i]);
2057bf215546Sopenharmony_ci    } else {
2058bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
2059bf215546Sopenharmony_ci    }
2060bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, pAllocator))
2061bf215546Sopenharmony_ci        assert(false);
2062bf215546Sopenharmony_ci    if (pPipelines) {
2063bf215546Sopenharmony_ci        vn_encode_array_size(enc, createInfoCount);
2064bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2065bf215546Sopenharmony_ci            vn_encode_VkPipeline(enc, &pPipelines[i]);
2066bf215546Sopenharmony_ci    } else {
2067bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
2068bf215546Sopenharmony_ci    }
2069bf215546Sopenharmony_ci}
2070bf215546Sopenharmony_ci
2071bf215546Sopenharmony_cistatic inline size_t vn_sizeof_vkCreateGraphicsPipelines_reply(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2072bf215546Sopenharmony_ci{
2073bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateGraphicsPipelines_EXT;
2074bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
2075bf215546Sopenharmony_ci
2076bf215546Sopenharmony_ci    VkResult ret;
2077bf215546Sopenharmony_ci    cmd_size += vn_sizeof_VkResult(&ret);
2078bf215546Sopenharmony_ci    /* skip device */
2079bf215546Sopenharmony_ci    /* skip pipelineCache */
2080bf215546Sopenharmony_ci    /* skip createInfoCount */
2081bf215546Sopenharmony_ci    /* skip pCreateInfos */
2082bf215546Sopenharmony_ci    /* skip pAllocator */
2083bf215546Sopenharmony_ci    if (pPipelines) {
2084bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(createInfoCount);
2085bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2086bf215546Sopenharmony_ci            cmd_size += vn_sizeof_VkPipeline(&pPipelines[i]);
2087bf215546Sopenharmony_ci    } else {
2088bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(0);
2089bf215546Sopenharmony_ci    }
2090bf215546Sopenharmony_ci
2091bf215546Sopenharmony_ci    return cmd_size;
2092bf215546Sopenharmony_ci}
2093bf215546Sopenharmony_ci
2094bf215546Sopenharmony_cistatic inline VkResult vn_decode_vkCreateGraphicsPipelines_reply(struct vn_cs_decoder *dec, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2095bf215546Sopenharmony_ci{
2096bf215546Sopenharmony_ci    VkCommandTypeEXT command_type;
2097bf215546Sopenharmony_ci    vn_decode_VkCommandTypeEXT(dec, &command_type);
2098bf215546Sopenharmony_ci    assert(command_type == VK_COMMAND_TYPE_vkCreateGraphicsPipelines_EXT);
2099bf215546Sopenharmony_ci
2100bf215546Sopenharmony_ci    VkResult ret;
2101bf215546Sopenharmony_ci    vn_decode_VkResult(dec, &ret);
2102bf215546Sopenharmony_ci    /* skip device */
2103bf215546Sopenharmony_ci    /* skip pipelineCache */
2104bf215546Sopenharmony_ci    /* skip createInfoCount */
2105bf215546Sopenharmony_ci    /* skip pCreateInfos */
2106bf215546Sopenharmony_ci    /* skip pAllocator */
2107bf215546Sopenharmony_ci    if (vn_peek_array_size(dec)) {
2108bf215546Sopenharmony_ci        const uint32_t iter_count = vn_decode_array_size(dec, createInfoCount);
2109bf215546Sopenharmony_ci        for (uint32_t i = 0; i < iter_count; i++)
2110bf215546Sopenharmony_ci            vn_decode_VkPipeline(dec, &pPipelines[i]);
2111bf215546Sopenharmony_ci    } else {
2112bf215546Sopenharmony_ci        vn_decode_array_size_unchecked(dec);
2113bf215546Sopenharmony_ci        pPipelines = NULL;
2114bf215546Sopenharmony_ci    }
2115bf215546Sopenharmony_ci
2116bf215546Sopenharmony_ci    return ret;
2117bf215546Sopenharmony_ci}
2118bf215546Sopenharmony_ci
2119bf215546Sopenharmony_cistatic inline size_t vn_sizeof_vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2120bf215546Sopenharmony_ci{
2121bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateComputePipelines_EXT;
2122bf215546Sopenharmony_ci    const VkFlags cmd_flags = 0;
2123bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
2124bf215546Sopenharmony_ci
2125bf215546Sopenharmony_ci    cmd_size += vn_sizeof_VkDevice(&device);
2126bf215546Sopenharmony_ci    cmd_size += vn_sizeof_VkPipelineCache(&pipelineCache);
2127bf215546Sopenharmony_ci    cmd_size += vn_sizeof_uint32_t(&createInfoCount);
2128bf215546Sopenharmony_ci    if (pCreateInfos) {
2129bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(createInfoCount);
2130bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2131bf215546Sopenharmony_ci            cmd_size += vn_sizeof_VkComputePipelineCreateInfo(&pCreateInfos[i]);
2132bf215546Sopenharmony_ci    } else {
2133bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(0);
2134bf215546Sopenharmony_ci    }
2135bf215546Sopenharmony_ci    cmd_size += vn_sizeof_simple_pointer(pAllocator);
2136bf215546Sopenharmony_ci    if (pAllocator)
2137bf215546Sopenharmony_ci        assert(false);
2138bf215546Sopenharmony_ci    if (pPipelines) {
2139bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(createInfoCount);
2140bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2141bf215546Sopenharmony_ci            cmd_size += vn_sizeof_VkPipeline(&pPipelines[i]);
2142bf215546Sopenharmony_ci    } else {
2143bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(0);
2144bf215546Sopenharmony_ci    }
2145bf215546Sopenharmony_ci
2146bf215546Sopenharmony_ci    return cmd_size;
2147bf215546Sopenharmony_ci}
2148bf215546Sopenharmony_ci
2149bf215546Sopenharmony_cistatic inline void vn_encode_vkCreateComputePipelines(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2150bf215546Sopenharmony_ci{
2151bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateComputePipelines_EXT;
2152bf215546Sopenharmony_ci
2153bf215546Sopenharmony_ci    vn_encode_VkCommandTypeEXT(enc, &cmd_type);
2154bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &cmd_flags);
2155bf215546Sopenharmony_ci
2156bf215546Sopenharmony_ci    vn_encode_VkDevice(enc, &device);
2157bf215546Sopenharmony_ci    vn_encode_VkPipelineCache(enc, &pipelineCache);
2158bf215546Sopenharmony_ci    vn_encode_uint32_t(enc, &createInfoCount);
2159bf215546Sopenharmony_ci    if (pCreateInfos) {
2160bf215546Sopenharmony_ci        vn_encode_array_size(enc, createInfoCount);
2161bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2162bf215546Sopenharmony_ci            vn_encode_VkComputePipelineCreateInfo(enc, &pCreateInfos[i]);
2163bf215546Sopenharmony_ci    } else {
2164bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
2165bf215546Sopenharmony_ci    }
2166bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, pAllocator))
2167bf215546Sopenharmony_ci        assert(false);
2168bf215546Sopenharmony_ci    if (pPipelines) {
2169bf215546Sopenharmony_ci        vn_encode_array_size(enc, createInfoCount);
2170bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2171bf215546Sopenharmony_ci            vn_encode_VkPipeline(enc, &pPipelines[i]);
2172bf215546Sopenharmony_ci    } else {
2173bf215546Sopenharmony_ci        vn_encode_array_size(enc, 0);
2174bf215546Sopenharmony_ci    }
2175bf215546Sopenharmony_ci}
2176bf215546Sopenharmony_ci
2177bf215546Sopenharmony_cistatic inline size_t vn_sizeof_vkCreateComputePipelines_reply(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2178bf215546Sopenharmony_ci{
2179bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateComputePipelines_EXT;
2180bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
2181bf215546Sopenharmony_ci
2182bf215546Sopenharmony_ci    VkResult ret;
2183bf215546Sopenharmony_ci    cmd_size += vn_sizeof_VkResult(&ret);
2184bf215546Sopenharmony_ci    /* skip device */
2185bf215546Sopenharmony_ci    /* skip pipelineCache */
2186bf215546Sopenharmony_ci    /* skip createInfoCount */
2187bf215546Sopenharmony_ci    /* skip pCreateInfos */
2188bf215546Sopenharmony_ci    /* skip pAllocator */
2189bf215546Sopenharmony_ci    if (pPipelines) {
2190bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(createInfoCount);
2191bf215546Sopenharmony_ci        for (uint32_t i = 0; i < createInfoCount; i++)
2192bf215546Sopenharmony_ci            cmd_size += vn_sizeof_VkPipeline(&pPipelines[i]);
2193bf215546Sopenharmony_ci    } else {
2194bf215546Sopenharmony_ci        cmd_size += vn_sizeof_array_size(0);
2195bf215546Sopenharmony_ci    }
2196bf215546Sopenharmony_ci
2197bf215546Sopenharmony_ci    return cmd_size;
2198bf215546Sopenharmony_ci}
2199bf215546Sopenharmony_ci
2200bf215546Sopenharmony_cistatic inline VkResult vn_decode_vkCreateComputePipelines_reply(struct vn_cs_decoder *dec, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2201bf215546Sopenharmony_ci{
2202bf215546Sopenharmony_ci    VkCommandTypeEXT command_type;
2203bf215546Sopenharmony_ci    vn_decode_VkCommandTypeEXT(dec, &command_type);
2204bf215546Sopenharmony_ci    assert(command_type == VK_COMMAND_TYPE_vkCreateComputePipelines_EXT);
2205bf215546Sopenharmony_ci
2206bf215546Sopenharmony_ci    VkResult ret;
2207bf215546Sopenharmony_ci    vn_decode_VkResult(dec, &ret);
2208bf215546Sopenharmony_ci    /* skip device */
2209bf215546Sopenharmony_ci    /* skip pipelineCache */
2210bf215546Sopenharmony_ci    /* skip createInfoCount */
2211bf215546Sopenharmony_ci    /* skip pCreateInfos */
2212bf215546Sopenharmony_ci    /* skip pAllocator */
2213bf215546Sopenharmony_ci    if (vn_peek_array_size(dec)) {
2214bf215546Sopenharmony_ci        const uint32_t iter_count = vn_decode_array_size(dec, createInfoCount);
2215bf215546Sopenharmony_ci        for (uint32_t i = 0; i < iter_count; i++)
2216bf215546Sopenharmony_ci            vn_decode_VkPipeline(dec, &pPipelines[i]);
2217bf215546Sopenharmony_ci    } else {
2218bf215546Sopenharmony_ci        vn_decode_array_size_unchecked(dec);
2219bf215546Sopenharmony_ci        pPipelines = NULL;
2220bf215546Sopenharmony_ci    }
2221bf215546Sopenharmony_ci
2222bf215546Sopenharmony_ci    return ret;
2223bf215546Sopenharmony_ci}
2224bf215546Sopenharmony_ci
2225bf215546Sopenharmony_cistatic inline size_t vn_sizeof_vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
2226bf215546Sopenharmony_ci{
2227bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyPipeline_EXT;
2228bf215546Sopenharmony_ci    const VkFlags cmd_flags = 0;
2229bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
2230bf215546Sopenharmony_ci
2231bf215546Sopenharmony_ci    cmd_size += vn_sizeof_VkDevice(&device);
2232bf215546Sopenharmony_ci    cmd_size += vn_sizeof_VkPipeline(&pipeline);
2233bf215546Sopenharmony_ci    cmd_size += vn_sizeof_simple_pointer(pAllocator);
2234bf215546Sopenharmony_ci    if (pAllocator)
2235bf215546Sopenharmony_ci        assert(false);
2236bf215546Sopenharmony_ci
2237bf215546Sopenharmony_ci    return cmd_size;
2238bf215546Sopenharmony_ci}
2239bf215546Sopenharmony_ci
2240bf215546Sopenharmony_cistatic inline void vn_encode_vkDestroyPipeline(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
2241bf215546Sopenharmony_ci{
2242bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyPipeline_EXT;
2243bf215546Sopenharmony_ci
2244bf215546Sopenharmony_ci    vn_encode_VkCommandTypeEXT(enc, &cmd_type);
2245bf215546Sopenharmony_ci    vn_encode_VkFlags(enc, &cmd_flags);
2246bf215546Sopenharmony_ci
2247bf215546Sopenharmony_ci    vn_encode_VkDevice(enc, &device);
2248bf215546Sopenharmony_ci    vn_encode_VkPipeline(enc, &pipeline);
2249bf215546Sopenharmony_ci    if (vn_encode_simple_pointer(enc, pAllocator))
2250bf215546Sopenharmony_ci        assert(false);
2251bf215546Sopenharmony_ci}
2252bf215546Sopenharmony_ci
2253bf215546Sopenharmony_cistatic inline size_t vn_sizeof_vkDestroyPipeline_reply(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
2254bf215546Sopenharmony_ci{
2255bf215546Sopenharmony_ci    const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyPipeline_EXT;
2256bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
2257bf215546Sopenharmony_ci
2258bf215546Sopenharmony_ci    /* skip device */
2259bf215546Sopenharmony_ci    /* skip pipeline */
2260bf215546Sopenharmony_ci    /* skip pAllocator */
2261bf215546Sopenharmony_ci
2262bf215546Sopenharmony_ci    return cmd_size;
2263bf215546Sopenharmony_ci}
2264bf215546Sopenharmony_ci
2265bf215546Sopenharmony_cistatic inline void vn_decode_vkDestroyPipeline_reply(struct vn_cs_decoder *dec, VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
2266bf215546Sopenharmony_ci{
2267bf215546Sopenharmony_ci    VkCommandTypeEXT command_type;
2268bf215546Sopenharmony_ci    vn_decode_VkCommandTypeEXT(dec, &command_type);
2269bf215546Sopenharmony_ci    assert(command_type == VK_COMMAND_TYPE_vkDestroyPipeline_EXT);
2270bf215546Sopenharmony_ci
2271bf215546Sopenharmony_ci    /* skip device */
2272bf215546Sopenharmony_ci    /* skip pipeline */
2273bf215546Sopenharmony_ci    /* skip pAllocator */
2274bf215546Sopenharmony_ci}
2275bf215546Sopenharmony_ci
2276bf215546Sopenharmony_cistatic inline void vn_submit_vkCreateGraphicsPipelines(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, struct vn_instance_submit_command *submit)
2277bf215546Sopenharmony_ci{
2278bf215546Sopenharmony_ci    uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
2279bf215546Sopenharmony_ci    void *cmd_data = local_cmd_data;
2280bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_vkCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
2281bf215546Sopenharmony_ci    if (cmd_size > sizeof(local_cmd_data)) {
2282bf215546Sopenharmony_ci        cmd_data = malloc(cmd_size);
2283bf215546Sopenharmony_ci        if (!cmd_data)
2284bf215546Sopenharmony_ci            cmd_size = 0;
2285bf215546Sopenharmony_ci    }
2286bf215546Sopenharmony_ci    const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkCreateGraphicsPipelines_reply(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines) : 0;
2287bf215546Sopenharmony_ci
2288bf215546Sopenharmony_ci    struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
2289bf215546Sopenharmony_ci    if (cmd_size) {
2290bf215546Sopenharmony_ci        vn_encode_vkCreateGraphicsPipelines(enc, cmd_flags, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
2291bf215546Sopenharmony_ci        vn_instance_submit_command(vn_instance, submit);
2292bf215546Sopenharmony_ci        if (cmd_data != local_cmd_data)
2293bf215546Sopenharmony_ci            free(cmd_data);
2294bf215546Sopenharmony_ci    }
2295bf215546Sopenharmony_ci}
2296bf215546Sopenharmony_ci
2297bf215546Sopenharmony_cistatic inline void vn_submit_vkCreateComputePipelines(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, struct vn_instance_submit_command *submit)
2298bf215546Sopenharmony_ci{
2299bf215546Sopenharmony_ci    uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
2300bf215546Sopenharmony_ci    void *cmd_data = local_cmd_data;
2301bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_vkCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
2302bf215546Sopenharmony_ci    if (cmd_size > sizeof(local_cmd_data)) {
2303bf215546Sopenharmony_ci        cmd_data = malloc(cmd_size);
2304bf215546Sopenharmony_ci        if (!cmd_data)
2305bf215546Sopenharmony_ci            cmd_size = 0;
2306bf215546Sopenharmony_ci    }
2307bf215546Sopenharmony_ci    const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkCreateComputePipelines_reply(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines) : 0;
2308bf215546Sopenharmony_ci
2309bf215546Sopenharmony_ci    struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
2310bf215546Sopenharmony_ci    if (cmd_size) {
2311bf215546Sopenharmony_ci        vn_encode_vkCreateComputePipelines(enc, cmd_flags, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
2312bf215546Sopenharmony_ci        vn_instance_submit_command(vn_instance, submit);
2313bf215546Sopenharmony_ci        if (cmd_data != local_cmd_data)
2314bf215546Sopenharmony_ci            free(cmd_data);
2315bf215546Sopenharmony_ci    }
2316bf215546Sopenharmony_ci}
2317bf215546Sopenharmony_ci
2318bf215546Sopenharmony_cistatic inline void vn_submit_vkDestroyPipeline(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator, struct vn_instance_submit_command *submit)
2319bf215546Sopenharmony_ci{
2320bf215546Sopenharmony_ci    uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
2321bf215546Sopenharmony_ci    void *cmd_data = local_cmd_data;
2322bf215546Sopenharmony_ci    size_t cmd_size = vn_sizeof_vkDestroyPipeline(device, pipeline, pAllocator);
2323bf215546Sopenharmony_ci    if (cmd_size > sizeof(local_cmd_data)) {
2324bf215546Sopenharmony_ci        cmd_data = malloc(cmd_size);
2325bf215546Sopenharmony_ci        if (!cmd_data)
2326bf215546Sopenharmony_ci            cmd_size = 0;
2327bf215546Sopenharmony_ci    }
2328bf215546Sopenharmony_ci    const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkDestroyPipeline_reply(device, pipeline, pAllocator) : 0;
2329bf215546Sopenharmony_ci
2330bf215546Sopenharmony_ci    struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
2331bf215546Sopenharmony_ci    if (cmd_size) {
2332bf215546Sopenharmony_ci        vn_encode_vkDestroyPipeline(enc, cmd_flags, device, pipeline, pAllocator);
2333bf215546Sopenharmony_ci        vn_instance_submit_command(vn_instance, submit);
2334bf215546Sopenharmony_ci        if (cmd_data != local_cmd_data)
2335bf215546Sopenharmony_ci            free(cmd_data);
2336bf215546Sopenharmony_ci    }
2337bf215546Sopenharmony_ci}
2338bf215546Sopenharmony_ci
2339bf215546Sopenharmony_cistatic inline VkResult vn_call_vkCreateGraphicsPipelines(struct vn_instance *vn_instance, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2340bf215546Sopenharmony_ci{
2341bf215546Sopenharmony_ci    VN_TRACE_FUNC();
2342bf215546Sopenharmony_ci
2343bf215546Sopenharmony_ci    struct vn_instance_submit_command submit;
2344bf215546Sopenharmony_ci    vn_submit_vkCreateGraphicsPipelines(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &submit);
2345bf215546Sopenharmony_ci    struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
2346bf215546Sopenharmony_ci    if (dec) {
2347bf215546Sopenharmony_ci        const VkResult ret = vn_decode_vkCreateGraphicsPipelines_reply(dec, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
2348bf215546Sopenharmony_ci        vn_instance_free_command_reply(vn_instance, &submit);
2349bf215546Sopenharmony_ci        return ret;
2350bf215546Sopenharmony_ci    } else {
2351bf215546Sopenharmony_ci        return VK_ERROR_OUT_OF_HOST_MEMORY;
2352bf215546Sopenharmony_ci    }
2353bf215546Sopenharmony_ci}
2354bf215546Sopenharmony_ci
2355bf215546Sopenharmony_cistatic inline void vn_async_vkCreateGraphicsPipelines(struct vn_instance *vn_instance, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2356bf215546Sopenharmony_ci{
2357bf215546Sopenharmony_ci    struct vn_instance_submit_command submit;
2358bf215546Sopenharmony_ci    vn_submit_vkCreateGraphicsPipelines(vn_instance, 0, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &submit);
2359bf215546Sopenharmony_ci}
2360bf215546Sopenharmony_ci
2361bf215546Sopenharmony_cistatic inline VkResult vn_call_vkCreateComputePipelines(struct vn_instance *vn_instance, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2362bf215546Sopenharmony_ci{
2363bf215546Sopenharmony_ci    VN_TRACE_FUNC();
2364bf215546Sopenharmony_ci
2365bf215546Sopenharmony_ci    struct vn_instance_submit_command submit;
2366bf215546Sopenharmony_ci    vn_submit_vkCreateComputePipelines(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &submit);
2367bf215546Sopenharmony_ci    struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
2368bf215546Sopenharmony_ci    if (dec) {
2369bf215546Sopenharmony_ci        const VkResult ret = vn_decode_vkCreateComputePipelines_reply(dec, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
2370bf215546Sopenharmony_ci        vn_instance_free_command_reply(vn_instance, &submit);
2371bf215546Sopenharmony_ci        return ret;
2372bf215546Sopenharmony_ci    } else {
2373bf215546Sopenharmony_ci        return VK_ERROR_OUT_OF_HOST_MEMORY;
2374bf215546Sopenharmony_ci    }
2375bf215546Sopenharmony_ci}
2376bf215546Sopenharmony_ci
2377bf215546Sopenharmony_cistatic inline void vn_async_vkCreateComputePipelines(struct vn_instance *vn_instance, VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
2378bf215546Sopenharmony_ci{
2379bf215546Sopenharmony_ci    struct vn_instance_submit_command submit;
2380bf215546Sopenharmony_ci    vn_submit_vkCreateComputePipelines(vn_instance, 0, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &submit);
2381bf215546Sopenharmony_ci}
2382bf215546Sopenharmony_ci
2383bf215546Sopenharmony_cistatic inline void vn_call_vkDestroyPipeline(struct vn_instance *vn_instance, VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
2384bf215546Sopenharmony_ci{
2385bf215546Sopenharmony_ci    VN_TRACE_FUNC();
2386bf215546Sopenharmony_ci
2387bf215546Sopenharmony_ci    struct vn_instance_submit_command submit;
2388bf215546Sopenharmony_ci    vn_submit_vkDestroyPipeline(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pipeline, pAllocator, &submit);
2389bf215546Sopenharmony_ci    struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
2390bf215546Sopenharmony_ci    if (dec) {
2391bf215546Sopenharmony_ci        vn_decode_vkDestroyPipeline_reply(dec, device, pipeline, pAllocator);
2392bf215546Sopenharmony_ci        vn_instance_free_command_reply(vn_instance, &submit);
2393bf215546Sopenharmony_ci    }
2394bf215546Sopenharmony_ci}
2395bf215546Sopenharmony_ci
2396bf215546Sopenharmony_cistatic inline void vn_async_vkDestroyPipeline(struct vn_instance *vn_instance, VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
2397bf215546Sopenharmony_ci{
2398bf215546Sopenharmony_ci    struct vn_instance_submit_command submit;
2399bf215546Sopenharmony_ci    vn_submit_vkDestroyPipeline(vn_instance, 0, device, pipeline, pAllocator, &submit);
2400bf215546Sopenharmony_ci}
2401bf215546Sopenharmony_ci
2402bf215546Sopenharmony_ci#endif /* VN_PROTOCOL_DRIVER_PIPELINE_H */
2403