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_SAMPLER_H
9 #define VN_PROTOCOL_DRIVER_SAMPLER_H
10 
11 #include "vn_instance.h"
12 #include "vn_protocol_driver_structs.h"
13 
14 /* struct VkSamplerReductionModeCreateInfo chain */
15 
16 static inline size_t
vn_sizeof_VkSamplerReductionModeCreateInfo_pnext(const void * val)17 vn_sizeof_VkSamplerReductionModeCreateInfo_pnext(const void *val)
18 {
19     /* no known/supported struct */
20     return vn_sizeof_simple_pointer(NULL);
21 }
22 
23 static inline size_t
vn_sizeof_VkSamplerReductionModeCreateInfo_self(const VkSamplerReductionModeCreateInfo * val)24 vn_sizeof_VkSamplerReductionModeCreateInfo_self(const VkSamplerReductionModeCreateInfo *val)
25 {
26     size_t size = 0;
27     /* skip val->{sType,pNext} */
28     size += vn_sizeof_VkSamplerReductionMode(&val->reductionMode);
29     return size;
30 }
31 
32 static inline size_t
vn_sizeof_VkSamplerReductionModeCreateInfo(const VkSamplerReductionModeCreateInfo * val)33 vn_sizeof_VkSamplerReductionModeCreateInfo(const VkSamplerReductionModeCreateInfo *val)
34 {
35     size_t size = 0;
36 
37     size += vn_sizeof_VkStructureType(&val->sType);
38     size += vn_sizeof_VkSamplerReductionModeCreateInfo_pnext(val->pNext);
39     size += vn_sizeof_VkSamplerReductionModeCreateInfo_self(val);
40 
41     return size;
42 }
43 
44 static inline void
vn_encode_VkSamplerReductionModeCreateInfo_pnext(struct vn_cs_encoder * enc,const void * val)45 vn_encode_VkSamplerReductionModeCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
46 {
47     /* no known/supported struct */
48     vn_encode_simple_pointer(enc, NULL);
49 }
50 
51 static inline void
vn_encode_VkSamplerReductionModeCreateInfo_self(struct vn_cs_encoder * enc,const VkSamplerReductionModeCreateInfo * val)52 vn_encode_VkSamplerReductionModeCreateInfo_self(struct vn_cs_encoder *enc, const VkSamplerReductionModeCreateInfo *val)
53 {
54     /* skip val->{sType,pNext} */
55     vn_encode_VkSamplerReductionMode(enc, &val->reductionMode);
56 }
57 
58 static inline void
vn_encode_VkSamplerReductionModeCreateInfo(struct vn_cs_encoder * enc,const VkSamplerReductionModeCreateInfo * val)59 vn_encode_VkSamplerReductionModeCreateInfo(struct vn_cs_encoder *enc, const VkSamplerReductionModeCreateInfo *val)
60 {
61     assert(val->sType == VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO);
62     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO });
63     vn_encode_VkSamplerReductionModeCreateInfo_pnext(enc, val->pNext);
64     vn_encode_VkSamplerReductionModeCreateInfo_self(enc, val);
65 }
66 
67 /* struct VkSamplerCreateInfo chain */
68 
69 static inline size_t
vn_sizeof_VkSamplerCreateInfo_pnext(const void * val)70 vn_sizeof_VkSamplerCreateInfo_pnext(const void *val)
71 {
72     const VkBaseInStructure *pnext = val;
73     size_t size = 0;
74 
75     while (pnext) {
76         switch ((int32_t)pnext->sType) {
77         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
78             size += vn_sizeof_simple_pointer(pnext);
79             size += vn_sizeof_VkStructureType(&pnext->sType);
80             size += vn_sizeof_VkSamplerCreateInfo_pnext(pnext->pNext);
81             size += vn_sizeof_VkSamplerYcbcrConversionInfo_self((const VkSamplerYcbcrConversionInfo *)pnext);
82             return size;
83         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
84             size += vn_sizeof_simple_pointer(pnext);
85             size += vn_sizeof_VkStructureType(&pnext->sType);
86             size += vn_sizeof_VkSamplerCreateInfo_pnext(pnext->pNext);
87             size += vn_sizeof_VkSamplerReductionModeCreateInfo_self((const VkSamplerReductionModeCreateInfo *)pnext);
88             return size;
89         default:
90             /* ignore unknown/unsupported struct */
91             break;
92         }
93         pnext = pnext->pNext;
94     }
95 
96     return vn_sizeof_simple_pointer(NULL);
97 }
98 
99 static inline size_t
vn_sizeof_VkSamplerCreateInfo_self(const VkSamplerCreateInfo * val)100 vn_sizeof_VkSamplerCreateInfo_self(const VkSamplerCreateInfo *val)
101 {
102     size_t size = 0;
103     /* skip val->{sType,pNext} */
104     size += vn_sizeof_VkFlags(&val->flags);
105     size += vn_sizeof_VkFilter(&val->magFilter);
106     size += vn_sizeof_VkFilter(&val->minFilter);
107     size += vn_sizeof_VkSamplerMipmapMode(&val->mipmapMode);
108     size += vn_sizeof_VkSamplerAddressMode(&val->addressModeU);
109     size += vn_sizeof_VkSamplerAddressMode(&val->addressModeV);
110     size += vn_sizeof_VkSamplerAddressMode(&val->addressModeW);
111     size += vn_sizeof_float(&val->mipLodBias);
112     size += vn_sizeof_VkBool32(&val->anisotropyEnable);
113     size += vn_sizeof_float(&val->maxAnisotropy);
114     size += vn_sizeof_VkBool32(&val->compareEnable);
115     size += vn_sizeof_VkCompareOp(&val->compareOp);
116     size += vn_sizeof_float(&val->minLod);
117     size += vn_sizeof_float(&val->maxLod);
118     size += vn_sizeof_VkBorderColor(&val->borderColor);
119     size += vn_sizeof_VkBool32(&val->unnormalizedCoordinates);
120     return size;
121 }
122 
123 static inline size_t
vn_sizeof_VkSamplerCreateInfo(const VkSamplerCreateInfo * val)124 vn_sizeof_VkSamplerCreateInfo(const VkSamplerCreateInfo *val)
125 {
126     size_t size = 0;
127 
128     size += vn_sizeof_VkStructureType(&val->sType);
129     size += vn_sizeof_VkSamplerCreateInfo_pnext(val->pNext);
130     size += vn_sizeof_VkSamplerCreateInfo_self(val);
131 
132     return size;
133 }
134 
135 static inline void
vn_encode_VkSamplerCreateInfo_pnext(struct vn_cs_encoder * enc,const void * val)136 vn_encode_VkSamplerCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
137 {
138     const VkBaseInStructure *pnext = val;
139 
140     while (pnext) {
141         switch ((int32_t)pnext->sType) {
142         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
143             vn_encode_simple_pointer(enc, pnext);
144             vn_encode_VkStructureType(enc, &pnext->sType);
145             vn_encode_VkSamplerCreateInfo_pnext(enc, pnext->pNext);
146             vn_encode_VkSamplerYcbcrConversionInfo_self(enc, (const VkSamplerYcbcrConversionInfo *)pnext);
147             return;
148         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
149             vn_encode_simple_pointer(enc, pnext);
150             vn_encode_VkStructureType(enc, &pnext->sType);
151             vn_encode_VkSamplerCreateInfo_pnext(enc, pnext->pNext);
152             vn_encode_VkSamplerReductionModeCreateInfo_self(enc, (const VkSamplerReductionModeCreateInfo *)pnext);
153             return;
154         default:
155             /* ignore unknown/unsupported struct */
156             break;
157         }
158         pnext = pnext->pNext;
159     }
160 
161     vn_encode_simple_pointer(enc, NULL);
162 }
163 
164 static inline void
vn_encode_VkSamplerCreateInfo_self(struct vn_cs_encoder * enc,const VkSamplerCreateInfo * val)165 vn_encode_VkSamplerCreateInfo_self(struct vn_cs_encoder *enc, const VkSamplerCreateInfo *val)
166 {
167     /* skip val->{sType,pNext} */
168     vn_encode_VkFlags(enc, &val->flags);
169     vn_encode_VkFilter(enc, &val->magFilter);
170     vn_encode_VkFilter(enc, &val->minFilter);
171     vn_encode_VkSamplerMipmapMode(enc, &val->mipmapMode);
172     vn_encode_VkSamplerAddressMode(enc, &val->addressModeU);
173     vn_encode_VkSamplerAddressMode(enc, &val->addressModeV);
174     vn_encode_VkSamplerAddressMode(enc, &val->addressModeW);
175     vn_encode_float(enc, &val->mipLodBias);
176     vn_encode_VkBool32(enc, &val->anisotropyEnable);
177     vn_encode_float(enc, &val->maxAnisotropy);
178     vn_encode_VkBool32(enc, &val->compareEnable);
179     vn_encode_VkCompareOp(enc, &val->compareOp);
180     vn_encode_float(enc, &val->minLod);
181     vn_encode_float(enc, &val->maxLod);
182     vn_encode_VkBorderColor(enc, &val->borderColor);
183     vn_encode_VkBool32(enc, &val->unnormalizedCoordinates);
184 }
185 
186 static inline void
vn_encode_VkSamplerCreateInfo(struct vn_cs_encoder * enc,const VkSamplerCreateInfo * val)187 vn_encode_VkSamplerCreateInfo(struct vn_cs_encoder *enc, const VkSamplerCreateInfo *val)
188 {
189     assert(val->sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO);
190     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO });
191     vn_encode_VkSamplerCreateInfo_pnext(enc, val->pNext);
192     vn_encode_VkSamplerCreateInfo_self(enc, val);
193 }
194 
vn_sizeof_vkCreateSampler(VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)195 static inline size_t vn_sizeof_vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
196 {
197     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateSampler_EXT;
198     const VkFlags cmd_flags = 0;
199     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
200 
201     cmd_size += vn_sizeof_VkDevice(&device);
202     cmd_size += vn_sizeof_simple_pointer(pCreateInfo);
203     if (pCreateInfo)
204         cmd_size += vn_sizeof_VkSamplerCreateInfo(pCreateInfo);
205     cmd_size += vn_sizeof_simple_pointer(pAllocator);
206     if (pAllocator)
207         assert(false);
208     cmd_size += vn_sizeof_simple_pointer(pSampler);
209     if (pSampler)
210         cmd_size += vn_sizeof_VkSampler(pSampler);
211 
212     return cmd_size;
213 }
214 
vn_encode_vkCreateSampler(struct vn_cs_encoder * enc,VkCommandFlagsEXT cmd_flags,VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)215 static inline void vn_encode_vkCreateSampler(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
216 {
217     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateSampler_EXT;
218 
219     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
220     vn_encode_VkFlags(enc, &cmd_flags);
221 
222     vn_encode_VkDevice(enc, &device);
223     if (vn_encode_simple_pointer(enc, pCreateInfo))
224         vn_encode_VkSamplerCreateInfo(enc, pCreateInfo);
225     if (vn_encode_simple_pointer(enc, pAllocator))
226         assert(false);
227     if (vn_encode_simple_pointer(enc, pSampler))
228         vn_encode_VkSampler(enc, pSampler);
229 }
230 
vn_sizeof_vkCreateSampler_reply(VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)231 static inline size_t vn_sizeof_vkCreateSampler_reply(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
232 {
233     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateSampler_EXT;
234     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
235 
236     VkResult ret;
237     cmd_size += vn_sizeof_VkResult(&ret);
238     /* skip device */
239     /* skip pCreateInfo */
240     /* skip pAllocator */
241     cmd_size += vn_sizeof_simple_pointer(pSampler);
242     if (pSampler)
243         cmd_size += vn_sizeof_VkSampler(pSampler);
244 
245     return cmd_size;
246 }
247 
vn_decode_vkCreateSampler_reply(struct vn_cs_decoder * dec,VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)248 static inline VkResult vn_decode_vkCreateSampler_reply(struct vn_cs_decoder *dec, VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
249 {
250     VkCommandTypeEXT command_type;
251     vn_decode_VkCommandTypeEXT(dec, &command_type);
252     assert(command_type == VK_COMMAND_TYPE_vkCreateSampler_EXT);
253 
254     VkResult ret;
255     vn_decode_VkResult(dec, &ret);
256     /* skip device */
257     /* skip pCreateInfo */
258     /* skip pAllocator */
259     if (vn_decode_simple_pointer(dec)) {
260         vn_decode_VkSampler(dec, pSampler);
261     } else {
262         pSampler = NULL;
263     }
264 
265     return ret;
266 }
267 
vn_sizeof_vkDestroySampler(VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)268 static inline size_t vn_sizeof_vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
269 {
270     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroySampler_EXT;
271     const VkFlags cmd_flags = 0;
272     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
273 
274     cmd_size += vn_sizeof_VkDevice(&device);
275     cmd_size += vn_sizeof_VkSampler(&sampler);
276     cmd_size += vn_sizeof_simple_pointer(pAllocator);
277     if (pAllocator)
278         assert(false);
279 
280     return cmd_size;
281 }
282 
vn_encode_vkDestroySampler(struct vn_cs_encoder * enc,VkCommandFlagsEXT cmd_flags,VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)283 static inline void vn_encode_vkDestroySampler(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
284 {
285     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroySampler_EXT;
286 
287     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
288     vn_encode_VkFlags(enc, &cmd_flags);
289 
290     vn_encode_VkDevice(enc, &device);
291     vn_encode_VkSampler(enc, &sampler);
292     if (vn_encode_simple_pointer(enc, pAllocator))
293         assert(false);
294 }
295 
vn_sizeof_vkDestroySampler_reply(VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)296 static inline size_t vn_sizeof_vkDestroySampler_reply(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
297 {
298     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroySampler_EXT;
299     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
300 
301     /* skip device */
302     /* skip sampler */
303     /* skip pAllocator */
304 
305     return cmd_size;
306 }
307 
vn_decode_vkDestroySampler_reply(struct vn_cs_decoder * dec,VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)308 static inline void vn_decode_vkDestroySampler_reply(struct vn_cs_decoder *dec, VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
309 {
310     VkCommandTypeEXT command_type;
311     vn_decode_VkCommandTypeEXT(dec, &command_type);
312     assert(command_type == VK_COMMAND_TYPE_vkDestroySampler_EXT);
313 
314     /* skip device */
315     /* skip sampler */
316     /* skip pAllocator */
317 }
318 
vn_submit_vkCreateSampler(struct vn_instance * vn_instance,VkCommandFlagsEXT cmd_flags,VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler,struct vn_instance_submit_command * submit)319 static inline void vn_submit_vkCreateSampler(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler, struct vn_instance_submit_command *submit)
320 {
321     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
322     void *cmd_data = local_cmd_data;
323     size_t cmd_size = vn_sizeof_vkCreateSampler(device, pCreateInfo, pAllocator, pSampler);
324     if (cmd_size > sizeof(local_cmd_data)) {
325         cmd_data = malloc(cmd_size);
326         if (!cmd_data)
327             cmd_size = 0;
328     }
329     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkCreateSampler_reply(device, pCreateInfo, pAllocator, pSampler) : 0;
330 
331     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
332     if (cmd_size) {
333         vn_encode_vkCreateSampler(enc, cmd_flags, device, pCreateInfo, pAllocator, pSampler);
334         vn_instance_submit_command(vn_instance, submit);
335         if (cmd_data != local_cmd_data)
336             free(cmd_data);
337     }
338 }
339 
vn_submit_vkDestroySampler(struct vn_instance * vn_instance,VkCommandFlagsEXT cmd_flags,VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator,struct vn_instance_submit_command * submit)340 static inline void vn_submit_vkDestroySampler(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator, struct vn_instance_submit_command *submit)
341 {
342     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
343     void *cmd_data = local_cmd_data;
344     size_t cmd_size = vn_sizeof_vkDestroySampler(device, sampler, pAllocator);
345     if (cmd_size > sizeof(local_cmd_data)) {
346         cmd_data = malloc(cmd_size);
347         if (!cmd_data)
348             cmd_size = 0;
349     }
350     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkDestroySampler_reply(device, sampler, pAllocator) : 0;
351 
352     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
353     if (cmd_size) {
354         vn_encode_vkDestroySampler(enc, cmd_flags, device, sampler, pAllocator);
355         vn_instance_submit_command(vn_instance, submit);
356         if (cmd_data != local_cmd_data)
357             free(cmd_data);
358     }
359 }
360 
vn_call_vkCreateSampler(struct vn_instance * vn_instance,VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)361 static inline VkResult vn_call_vkCreateSampler(struct vn_instance *vn_instance, VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
362 {
363     VN_TRACE_FUNC();
364 
365     struct vn_instance_submit_command submit;
366     vn_submit_vkCreateSampler(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pCreateInfo, pAllocator, pSampler, &submit);
367     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
368     if (dec) {
369         const VkResult ret = vn_decode_vkCreateSampler_reply(dec, device, pCreateInfo, pAllocator, pSampler);
370         vn_instance_free_command_reply(vn_instance, &submit);
371         return ret;
372     } else {
373         return VK_ERROR_OUT_OF_HOST_MEMORY;
374     }
375 }
376 
vn_async_vkCreateSampler(struct vn_instance * vn_instance,VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)377 static inline void vn_async_vkCreateSampler(struct vn_instance *vn_instance, VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
378 {
379     struct vn_instance_submit_command submit;
380     vn_submit_vkCreateSampler(vn_instance, 0, device, pCreateInfo, pAllocator, pSampler, &submit);
381 }
382 
vn_call_vkDestroySampler(struct vn_instance * vn_instance,VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)383 static inline void vn_call_vkDestroySampler(struct vn_instance *vn_instance, VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
384 {
385     VN_TRACE_FUNC();
386 
387     struct vn_instance_submit_command submit;
388     vn_submit_vkDestroySampler(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, sampler, pAllocator, &submit);
389     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
390     if (dec) {
391         vn_decode_vkDestroySampler_reply(dec, device, sampler, pAllocator);
392         vn_instance_free_command_reply(vn_instance, &submit);
393     }
394 }
395 
vn_async_vkDestroySampler(struct vn_instance * vn_instance,VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)396 static inline void vn_async_vkDestroySampler(struct vn_instance *vn_instance, VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
397 {
398     struct vn_instance_submit_command submit;
399     vn_submit_vkDestroySampler(vn_instance, 0, device, sampler, pAllocator, &submit);
400 }
401 
402 #endif /* VN_PROTOCOL_DRIVER_SAMPLER_H */
403