1 /* This file is generated by venus-protocol. See vn_protocol_driver.h. */
2
3 /*
4 * Copyright 2020 Google LLC
5 * SPDX-License-Identifier: MIT
6 */
7
8 #ifndef VN_PROTOCOL_DRIVER_PIPELINE_LAYOUT_H
9 #define VN_PROTOCOL_DRIVER_PIPELINE_LAYOUT_H
10
11 #include "vn_instance.h"
12 #include "vn_protocol_driver_structs.h"
13
14 /* struct VkPushConstantRange */
15
16 static inline size_t
vn_sizeof_VkPushConstantRange(const VkPushConstantRange * val)17 vn_sizeof_VkPushConstantRange(const VkPushConstantRange *val)
18 {
19 size_t size = 0;
20 size += vn_sizeof_VkFlags(&val->stageFlags);
21 size += vn_sizeof_uint32_t(&val->offset);
22 size += vn_sizeof_uint32_t(&val->size);
23 return size;
24 }
25
26 static inline void
vn_encode_VkPushConstantRange(struct vn_cs_encoder * enc,const VkPushConstantRange * val)27 vn_encode_VkPushConstantRange(struct vn_cs_encoder *enc, const VkPushConstantRange *val)
28 {
29 vn_encode_VkFlags(enc, &val->stageFlags);
30 vn_encode_uint32_t(enc, &val->offset);
31 vn_encode_uint32_t(enc, &val->size);
32 }
33
34 /* struct VkPipelineLayoutCreateInfo chain */
35
36 static inline size_t
vn_sizeof_VkPipelineLayoutCreateInfo_pnext(const void * val)37 vn_sizeof_VkPipelineLayoutCreateInfo_pnext(const void *val)
38 {
39 /* no known/supported struct */
40 return vn_sizeof_simple_pointer(NULL);
41 }
42
43 static inline size_t
vn_sizeof_VkPipelineLayoutCreateInfo_self(const VkPipelineLayoutCreateInfo * val)44 vn_sizeof_VkPipelineLayoutCreateInfo_self(const VkPipelineLayoutCreateInfo *val)
45 {
46 size_t size = 0;
47 /* skip val->{sType,pNext} */
48 size += vn_sizeof_VkFlags(&val->flags);
49 size += vn_sizeof_uint32_t(&val->setLayoutCount);
50 if (val->pSetLayouts) {
51 size += vn_sizeof_array_size(val->setLayoutCount);
52 for (uint32_t i = 0; i < val->setLayoutCount; i++)
53 size += vn_sizeof_VkDescriptorSetLayout(&val->pSetLayouts[i]);
54 } else {
55 size += vn_sizeof_array_size(0);
56 }
57 size += vn_sizeof_uint32_t(&val->pushConstantRangeCount);
58 if (val->pPushConstantRanges) {
59 size += vn_sizeof_array_size(val->pushConstantRangeCount);
60 for (uint32_t i = 0; i < val->pushConstantRangeCount; i++)
61 size += vn_sizeof_VkPushConstantRange(&val->pPushConstantRanges[i]);
62 } else {
63 size += vn_sizeof_array_size(0);
64 }
65 return size;
66 }
67
68 static inline size_t
vn_sizeof_VkPipelineLayoutCreateInfo(const VkPipelineLayoutCreateInfo * val)69 vn_sizeof_VkPipelineLayoutCreateInfo(const VkPipelineLayoutCreateInfo *val)
70 {
71 size_t size = 0;
72
73 size += vn_sizeof_VkStructureType(&val->sType);
74 size += vn_sizeof_VkPipelineLayoutCreateInfo_pnext(val->pNext);
75 size += vn_sizeof_VkPipelineLayoutCreateInfo_self(val);
76
77 return size;
78 }
79
80 static inline void
vn_encode_VkPipelineLayoutCreateInfo_pnext(struct vn_cs_encoder * enc,const void * val)81 vn_encode_VkPipelineLayoutCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
82 {
83 /* no known/supported struct */
84 vn_encode_simple_pointer(enc, NULL);
85 }
86
87 static inline void
vn_encode_VkPipelineLayoutCreateInfo_self(struct vn_cs_encoder * enc,const VkPipelineLayoutCreateInfo * val)88 vn_encode_VkPipelineLayoutCreateInfo_self(struct vn_cs_encoder *enc, const VkPipelineLayoutCreateInfo *val)
89 {
90 /* skip val->{sType,pNext} */
91 vn_encode_VkFlags(enc, &val->flags);
92 vn_encode_uint32_t(enc, &val->setLayoutCount);
93 if (val->pSetLayouts) {
94 vn_encode_array_size(enc, val->setLayoutCount);
95 for (uint32_t i = 0; i < val->setLayoutCount; i++)
96 vn_encode_VkDescriptorSetLayout(enc, &val->pSetLayouts[i]);
97 } else {
98 vn_encode_array_size(enc, 0);
99 }
100 vn_encode_uint32_t(enc, &val->pushConstantRangeCount);
101 if (val->pPushConstantRanges) {
102 vn_encode_array_size(enc, val->pushConstantRangeCount);
103 for (uint32_t i = 0; i < val->pushConstantRangeCount; i++)
104 vn_encode_VkPushConstantRange(enc, &val->pPushConstantRanges[i]);
105 } else {
106 vn_encode_array_size(enc, 0);
107 }
108 }
109
110 static inline void
vn_encode_VkPipelineLayoutCreateInfo(struct vn_cs_encoder * enc,const VkPipelineLayoutCreateInfo * val)111 vn_encode_VkPipelineLayoutCreateInfo(struct vn_cs_encoder *enc, const VkPipelineLayoutCreateInfo *val)
112 {
113 assert(val->sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO);
114 vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO });
115 vn_encode_VkPipelineLayoutCreateInfo_pnext(enc, val->pNext);
116 vn_encode_VkPipelineLayoutCreateInfo_self(enc, val);
117 }
118
vn_sizeof_vkCreatePipelineLayout(VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)119 static inline size_t vn_sizeof_vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
120 {
121 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreatePipelineLayout_EXT;
122 const VkFlags cmd_flags = 0;
123 size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
124
125 cmd_size += vn_sizeof_VkDevice(&device);
126 cmd_size += vn_sizeof_simple_pointer(pCreateInfo);
127 if (pCreateInfo)
128 cmd_size += vn_sizeof_VkPipelineLayoutCreateInfo(pCreateInfo);
129 cmd_size += vn_sizeof_simple_pointer(pAllocator);
130 if (pAllocator)
131 assert(false);
132 cmd_size += vn_sizeof_simple_pointer(pPipelineLayout);
133 if (pPipelineLayout)
134 cmd_size += vn_sizeof_VkPipelineLayout(pPipelineLayout);
135
136 return cmd_size;
137 }
138
vn_encode_vkCreatePipelineLayout(struct vn_cs_encoder * enc,VkCommandFlagsEXT cmd_flags,VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)139 static inline void vn_encode_vkCreatePipelineLayout(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
140 {
141 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreatePipelineLayout_EXT;
142
143 vn_encode_VkCommandTypeEXT(enc, &cmd_type);
144 vn_encode_VkFlags(enc, &cmd_flags);
145
146 vn_encode_VkDevice(enc, &device);
147 if (vn_encode_simple_pointer(enc, pCreateInfo))
148 vn_encode_VkPipelineLayoutCreateInfo(enc, pCreateInfo);
149 if (vn_encode_simple_pointer(enc, pAllocator))
150 assert(false);
151 if (vn_encode_simple_pointer(enc, pPipelineLayout))
152 vn_encode_VkPipelineLayout(enc, pPipelineLayout);
153 }
154
vn_sizeof_vkCreatePipelineLayout_reply(VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)155 static inline size_t vn_sizeof_vkCreatePipelineLayout_reply(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
156 {
157 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreatePipelineLayout_EXT;
158 size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
159
160 VkResult ret;
161 cmd_size += vn_sizeof_VkResult(&ret);
162 /* skip device */
163 /* skip pCreateInfo */
164 /* skip pAllocator */
165 cmd_size += vn_sizeof_simple_pointer(pPipelineLayout);
166 if (pPipelineLayout)
167 cmd_size += vn_sizeof_VkPipelineLayout(pPipelineLayout);
168
169 return cmd_size;
170 }
171
vn_decode_vkCreatePipelineLayout_reply(struct vn_cs_decoder * dec,VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)172 static inline VkResult vn_decode_vkCreatePipelineLayout_reply(struct vn_cs_decoder *dec, VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
173 {
174 VkCommandTypeEXT command_type;
175 vn_decode_VkCommandTypeEXT(dec, &command_type);
176 assert(command_type == VK_COMMAND_TYPE_vkCreatePipelineLayout_EXT);
177
178 VkResult ret;
179 vn_decode_VkResult(dec, &ret);
180 /* skip device */
181 /* skip pCreateInfo */
182 /* skip pAllocator */
183 if (vn_decode_simple_pointer(dec)) {
184 vn_decode_VkPipelineLayout(dec, pPipelineLayout);
185 } else {
186 pPipelineLayout = NULL;
187 }
188
189 return ret;
190 }
191
vn_sizeof_vkDestroyPipelineLayout(VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)192 static inline size_t vn_sizeof_vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
193 {
194 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyPipelineLayout_EXT;
195 const VkFlags cmd_flags = 0;
196 size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
197
198 cmd_size += vn_sizeof_VkDevice(&device);
199 cmd_size += vn_sizeof_VkPipelineLayout(&pipelineLayout);
200 cmd_size += vn_sizeof_simple_pointer(pAllocator);
201 if (pAllocator)
202 assert(false);
203
204 return cmd_size;
205 }
206
vn_encode_vkDestroyPipelineLayout(struct vn_cs_encoder * enc,VkCommandFlagsEXT cmd_flags,VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)207 static inline void vn_encode_vkDestroyPipelineLayout(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
208 {
209 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyPipelineLayout_EXT;
210
211 vn_encode_VkCommandTypeEXT(enc, &cmd_type);
212 vn_encode_VkFlags(enc, &cmd_flags);
213
214 vn_encode_VkDevice(enc, &device);
215 vn_encode_VkPipelineLayout(enc, &pipelineLayout);
216 if (vn_encode_simple_pointer(enc, pAllocator))
217 assert(false);
218 }
219
vn_sizeof_vkDestroyPipelineLayout_reply(VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)220 static inline size_t vn_sizeof_vkDestroyPipelineLayout_reply(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
221 {
222 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyPipelineLayout_EXT;
223 size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
224
225 /* skip device */
226 /* skip pipelineLayout */
227 /* skip pAllocator */
228
229 return cmd_size;
230 }
231
vn_decode_vkDestroyPipelineLayout_reply(struct vn_cs_decoder * dec,VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)232 static inline void vn_decode_vkDestroyPipelineLayout_reply(struct vn_cs_decoder *dec, VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
233 {
234 VkCommandTypeEXT command_type;
235 vn_decode_VkCommandTypeEXT(dec, &command_type);
236 assert(command_type == VK_COMMAND_TYPE_vkDestroyPipelineLayout_EXT);
237
238 /* skip device */
239 /* skip pipelineLayout */
240 /* skip pAllocator */
241 }
242
vn_submit_vkCreatePipelineLayout(struct vn_instance * vn_instance,VkCommandFlagsEXT cmd_flags,VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout,struct vn_instance_submit_command * submit)243 static inline void vn_submit_vkCreatePipelineLayout(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout, struct vn_instance_submit_command *submit)
244 {
245 uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
246 void *cmd_data = local_cmd_data;
247 size_t cmd_size = vn_sizeof_vkCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
248 if (cmd_size > sizeof(local_cmd_data)) {
249 cmd_data = malloc(cmd_size);
250 if (!cmd_data)
251 cmd_size = 0;
252 }
253 const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkCreatePipelineLayout_reply(device, pCreateInfo, pAllocator, pPipelineLayout) : 0;
254
255 struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
256 if (cmd_size) {
257 vn_encode_vkCreatePipelineLayout(enc, cmd_flags, device, pCreateInfo, pAllocator, pPipelineLayout);
258 vn_instance_submit_command(vn_instance, submit);
259 if (cmd_data != local_cmd_data)
260 free(cmd_data);
261 }
262 }
263
vn_submit_vkDestroyPipelineLayout(struct vn_instance * vn_instance,VkCommandFlagsEXT cmd_flags,VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator,struct vn_instance_submit_command * submit)264 static inline void vn_submit_vkDestroyPipelineLayout(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator, struct vn_instance_submit_command *submit)
265 {
266 uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
267 void *cmd_data = local_cmd_data;
268 size_t cmd_size = vn_sizeof_vkDestroyPipelineLayout(device, pipelineLayout, pAllocator);
269 if (cmd_size > sizeof(local_cmd_data)) {
270 cmd_data = malloc(cmd_size);
271 if (!cmd_data)
272 cmd_size = 0;
273 }
274 const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkDestroyPipelineLayout_reply(device, pipelineLayout, pAllocator) : 0;
275
276 struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
277 if (cmd_size) {
278 vn_encode_vkDestroyPipelineLayout(enc, cmd_flags, device, pipelineLayout, pAllocator);
279 vn_instance_submit_command(vn_instance, submit);
280 if (cmd_data != local_cmd_data)
281 free(cmd_data);
282 }
283 }
284
vn_call_vkCreatePipelineLayout(struct vn_instance * vn_instance,VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)285 static inline VkResult vn_call_vkCreatePipelineLayout(struct vn_instance *vn_instance, VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
286 {
287 VN_TRACE_FUNC();
288
289 struct vn_instance_submit_command submit;
290 vn_submit_vkCreatePipelineLayout(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pCreateInfo, pAllocator, pPipelineLayout, &submit);
291 struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
292 if (dec) {
293 const VkResult ret = vn_decode_vkCreatePipelineLayout_reply(dec, device, pCreateInfo, pAllocator, pPipelineLayout);
294 vn_instance_free_command_reply(vn_instance, &submit);
295 return ret;
296 } else {
297 return VK_ERROR_OUT_OF_HOST_MEMORY;
298 }
299 }
300
vn_async_vkCreatePipelineLayout(struct vn_instance * vn_instance,VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)301 static inline void vn_async_vkCreatePipelineLayout(struct vn_instance *vn_instance, VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
302 {
303 struct vn_instance_submit_command submit;
304 vn_submit_vkCreatePipelineLayout(vn_instance, 0, device, pCreateInfo, pAllocator, pPipelineLayout, &submit);
305 }
306
vn_call_vkDestroyPipelineLayout(struct vn_instance * vn_instance,VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)307 static inline void vn_call_vkDestroyPipelineLayout(struct vn_instance *vn_instance, VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
308 {
309 VN_TRACE_FUNC();
310
311 struct vn_instance_submit_command submit;
312 vn_submit_vkDestroyPipelineLayout(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pipelineLayout, pAllocator, &submit);
313 struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
314 if (dec) {
315 vn_decode_vkDestroyPipelineLayout_reply(dec, device, pipelineLayout, pAllocator);
316 vn_instance_free_command_reply(vn_instance, &submit);
317 }
318 }
319
vn_async_vkDestroyPipelineLayout(struct vn_instance * vn_instance,VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)320 static inline void vn_async_vkDestroyPipelineLayout(struct vn_instance *vn_instance, VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
321 {
322 struct vn_instance_submit_command submit;
323 vn_submit_vkDestroyPipelineLayout(vn_instance, 0, device, pipelineLayout, pAllocator, &submit);
324 }
325
326 #endif /* VN_PROTOCOL_DRIVER_PIPELINE_LAYOUT_H */
327