xref: /aosp_15_r20/external/virglrenderer/src/venus/venus-protocol/vn_protocol_renderer_util.h (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1 /* This file is generated by venus-protocol.  See vn_protocol_renderer.h. */
2 
3 /*
4  * Copyright 2022 Google LLC
5  * Copyright 2022 Collabora Ltd.
6  * SPDX-License-Identifier: MIT
7  */
8 
9 #ifndef VN_PROTOCOL_RENDERER_UTIL_H
10 #define VN_PROTOCOL_RENDERER_UTIL_H
11 
12 #include "vn_protocol_renderer_info.h"
13 
14 struct vn_physical_device_proc_table {
15    PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT GetPhysicalDeviceCalibrateableTimeDomainsEXT;
16    PFN_vkGetPhysicalDeviceToolProperties GetPhysicalDeviceToolProperties;
17 };
18 
19 struct vn_device_proc_table {
20    PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
21    PFN_vkAllocateDescriptorSets AllocateDescriptorSets;
22    PFN_vkAllocateMemory AllocateMemory;
23    PFN_vkBeginCommandBuffer BeginCommandBuffer;
24    PFN_vkBindBufferMemory BindBufferMemory;
25    PFN_vkBindBufferMemory2 BindBufferMemory2;
26    PFN_vkBindImageMemory BindImageMemory;
27    PFN_vkBindImageMemory2 BindImageMemory2;
28    PFN_vkCmdBeginConditionalRenderingEXT CmdBeginConditionalRenderingEXT;
29    PFN_vkCmdBeginQuery CmdBeginQuery;
30    PFN_vkCmdBeginQueryIndexedEXT CmdBeginQueryIndexedEXT;
31    PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
32    PFN_vkCmdBeginRenderPass2 CmdBeginRenderPass2;
33    PFN_vkCmdBeginRendering CmdBeginRendering;
34    PFN_vkCmdBeginTransformFeedbackEXT CmdBeginTransformFeedbackEXT;
35    PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
36    PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
37    PFN_vkCmdBindPipeline CmdBindPipeline;
38    PFN_vkCmdBindTransformFeedbackBuffersEXT CmdBindTransformFeedbackBuffersEXT;
39    PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
40    PFN_vkCmdBindVertexBuffers2 CmdBindVertexBuffers2;
41    PFN_vkCmdBlitImage CmdBlitImage;
42    PFN_vkCmdBlitImage2 CmdBlitImage2;
43    PFN_vkCmdClearAttachments CmdClearAttachments;
44    PFN_vkCmdClearColorImage CmdClearColorImage;
45    PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
46    PFN_vkCmdCopyBuffer CmdCopyBuffer;
47    PFN_vkCmdCopyBuffer2 CmdCopyBuffer2;
48    PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
49    PFN_vkCmdCopyBufferToImage2 CmdCopyBufferToImage2;
50    PFN_vkCmdCopyImage CmdCopyImage;
51    PFN_vkCmdCopyImage2 CmdCopyImage2;
52    PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
53    PFN_vkCmdCopyImageToBuffer2 CmdCopyImageToBuffer2;
54    PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
55    PFN_vkCmdDispatch CmdDispatch;
56    PFN_vkCmdDispatchBase CmdDispatchBase;
57    PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
58    PFN_vkCmdDraw CmdDraw;
59    PFN_vkCmdDrawIndexed CmdDrawIndexed;
60    PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
61    PFN_vkCmdDrawIndexedIndirectCount CmdDrawIndexedIndirectCount;
62    PFN_vkCmdDrawIndirect CmdDrawIndirect;
63    PFN_vkCmdDrawIndirectByteCountEXT CmdDrawIndirectByteCountEXT;
64    PFN_vkCmdDrawIndirectCount CmdDrawIndirectCount;
65    PFN_vkCmdDrawMultiEXT CmdDrawMultiEXT;
66    PFN_vkCmdDrawMultiIndexedEXT CmdDrawMultiIndexedEXT;
67    PFN_vkCmdEndConditionalRenderingEXT CmdEndConditionalRenderingEXT;
68    PFN_vkCmdEndQuery CmdEndQuery;
69    PFN_vkCmdEndQueryIndexedEXT CmdEndQueryIndexedEXT;
70    PFN_vkCmdEndRenderPass CmdEndRenderPass;
71    PFN_vkCmdEndRenderPass2 CmdEndRenderPass2;
72    PFN_vkCmdEndRendering CmdEndRendering;
73    PFN_vkCmdEndTransformFeedbackEXT CmdEndTransformFeedbackEXT;
74    PFN_vkCmdExecuteCommands CmdExecuteCommands;
75    PFN_vkCmdFillBuffer CmdFillBuffer;
76    PFN_vkCmdNextSubpass CmdNextSubpass;
77    PFN_vkCmdNextSubpass2 CmdNextSubpass2;
78    PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
79    PFN_vkCmdPipelineBarrier2 CmdPipelineBarrier2;
80    PFN_vkCmdPushConstants CmdPushConstants;
81    PFN_vkCmdPushDescriptorSetKHR CmdPushDescriptorSetKHR;
82    PFN_vkCmdPushDescriptorSetWithTemplateKHR CmdPushDescriptorSetWithTemplateKHR;
83    PFN_vkCmdResetEvent CmdResetEvent;
84    PFN_vkCmdResetEvent2 CmdResetEvent2;
85    PFN_vkCmdResetQueryPool CmdResetQueryPool;
86    PFN_vkCmdResolveImage CmdResolveImage;
87    PFN_vkCmdResolveImage2 CmdResolveImage2;
88    PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
89    PFN_vkCmdSetCullMode CmdSetCullMode;
90    PFN_vkCmdSetDepthBias CmdSetDepthBias;
91    PFN_vkCmdSetDepthBiasEnable CmdSetDepthBiasEnable;
92    PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
93    PFN_vkCmdSetDepthBoundsTestEnable CmdSetDepthBoundsTestEnable;
94    PFN_vkCmdSetDepthCompareOp CmdSetDepthCompareOp;
95    PFN_vkCmdSetDepthTestEnable CmdSetDepthTestEnable;
96    PFN_vkCmdSetDepthWriteEnable CmdSetDepthWriteEnable;
97    PFN_vkCmdSetDeviceMask CmdSetDeviceMask;
98    PFN_vkCmdSetEvent CmdSetEvent;
99    PFN_vkCmdSetEvent2 CmdSetEvent2;
100    PFN_vkCmdSetFrontFace CmdSetFrontFace;
101    PFN_vkCmdSetLineStippleEXT CmdSetLineStippleEXT;
102    PFN_vkCmdSetLineWidth CmdSetLineWidth;
103    PFN_vkCmdSetLogicOpEXT CmdSetLogicOpEXT;
104    PFN_vkCmdSetPatchControlPointsEXT CmdSetPatchControlPointsEXT;
105    PFN_vkCmdSetPrimitiveRestartEnable CmdSetPrimitiveRestartEnable;
106    PFN_vkCmdSetPrimitiveTopology CmdSetPrimitiveTopology;
107    PFN_vkCmdSetRasterizerDiscardEnable CmdSetRasterizerDiscardEnable;
108    PFN_vkCmdSetScissor CmdSetScissor;
109    PFN_vkCmdSetScissorWithCount CmdSetScissorWithCount;
110    PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
111    PFN_vkCmdSetStencilOp CmdSetStencilOp;
112    PFN_vkCmdSetStencilReference CmdSetStencilReference;
113    PFN_vkCmdSetStencilTestEnable CmdSetStencilTestEnable;
114    PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
115    PFN_vkCmdSetViewport CmdSetViewport;
116    PFN_vkCmdSetViewportWithCount CmdSetViewportWithCount;
117    PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
118    PFN_vkCmdWaitEvents CmdWaitEvents;
119    PFN_vkCmdWaitEvents2 CmdWaitEvents2;
120    PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
121    PFN_vkCmdWriteTimestamp2 CmdWriteTimestamp2;
122    PFN_vkCreateBuffer CreateBuffer;
123    PFN_vkCreateBufferView CreateBufferView;
124    PFN_vkCreateCommandPool CreateCommandPool;
125    PFN_vkCreateComputePipelines CreateComputePipelines;
126    PFN_vkCreateDescriptorPool CreateDescriptorPool;
127    PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
128    PFN_vkCreateDescriptorUpdateTemplate CreateDescriptorUpdateTemplate;
129    PFN_vkCreateEvent CreateEvent;
130    PFN_vkCreateFence CreateFence;
131    PFN_vkCreateFramebuffer CreateFramebuffer;
132    PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
133    PFN_vkCreateImage CreateImage;
134    PFN_vkCreateImageView CreateImageView;
135    PFN_vkCreatePipelineCache CreatePipelineCache;
136    PFN_vkCreatePipelineLayout CreatePipelineLayout;
137    PFN_vkCreatePrivateDataSlot CreatePrivateDataSlot;
138    PFN_vkCreateQueryPool CreateQueryPool;
139    PFN_vkCreateRenderPass CreateRenderPass;
140    PFN_vkCreateRenderPass2 CreateRenderPass2;
141    PFN_vkCreateSampler CreateSampler;
142    PFN_vkCreateSamplerYcbcrConversion CreateSamplerYcbcrConversion;
143    PFN_vkCreateSemaphore CreateSemaphore;
144    PFN_vkCreateShaderModule CreateShaderModule;
145    PFN_vkDestroyBuffer DestroyBuffer;
146    PFN_vkDestroyBufferView DestroyBufferView;
147    PFN_vkDestroyCommandPool DestroyCommandPool;
148    PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
149    PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
150    PFN_vkDestroyDescriptorUpdateTemplate DestroyDescriptorUpdateTemplate;
151    PFN_vkDestroyDevice DestroyDevice;
152    PFN_vkDestroyEvent DestroyEvent;
153    PFN_vkDestroyFence DestroyFence;
154    PFN_vkDestroyFramebuffer DestroyFramebuffer;
155    PFN_vkDestroyImage DestroyImage;
156    PFN_vkDestroyImageView DestroyImageView;
157    PFN_vkDestroyPipeline DestroyPipeline;
158    PFN_vkDestroyPipelineCache DestroyPipelineCache;
159    PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
160    PFN_vkDestroyPrivateDataSlot DestroyPrivateDataSlot;
161    PFN_vkDestroyQueryPool DestroyQueryPool;
162    PFN_vkDestroyRenderPass DestroyRenderPass;
163    PFN_vkDestroySampler DestroySampler;
164    PFN_vkDestroySamplerYcbcrConversion DestroySamplerYcbcrConversion;
165    PFN_vkDestroySemaphore DestroySemaphore;
166    PFN_vkDestroyShaderModule DestroyShaderModule;
167    PFN_vkDeviceWaitIdle DeviceWaitIdle;
168    PFN_vkEndCommandBuffer EndCommandBuffer;
169    PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
170    PFN_vkFreeCommandBuffers FreeCommandBuffers;
171    PFN_vkFreeDescriptorSets FreeDescriptorSets;
172    PFN_vkFreeMemory FreeMemory;
173    PFN_vkGetBufferDeviceAddress GetBufferDeviceAddress;
174    PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
175    PFN_vkGetBufferMemoryRequirements2 GetBufferMemoryRequirements2;
176    PFN_vkGetBufferOpaqueCaptureAddress GetBufferOpaqueCaptureAddress;
177    PFN_vkGetCalibratedTimestampsEXT GetCalibratedTimestampsEXT;
178    PFN_vkGetDescriptorSetLayoutSupport GetDescriptorSetLayoutSupport;
179    PFN_vkGetDeviceBufferMemoryRequirements GetDeviceBufferMemoryRequirements;
180    PFN_vkGetDeviceGroupPeerMemoryFeatures GetDeviceGroupPeerMemoryFeatures;
181    PFN_vkGetDeviceImageMemoryRequirements GetDeviceImageMemoryRequirements;
182    PFN_vkGetDeviceImageSparseMemoryRequirements GetDeviceImageSparseMemoryRequirements;
183    PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
184    PFN_vkGetDeviceMemoryOpaqueCaptureAddress GetDeviceMemoryOpaqueCaptureAddress;
185    PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
186    PFN_vkGetDeviceQueue GetDeviceQueue;
187    PFN_vkGetDeviceQueue2 GetDeviceQueue2;
188    PFN_vkGetEventStatus GetEventStatus;
189    PFN_vkGetFenceFdKHR GetFenceFdKHR;
190    PFN_vkGetFenceStatus GetFenceStatus;
191    PFN_vkGetImageDrmFormatModifierPropertiesEXT GetImageDrmFormatModifierPropertiesEXT;
192    PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
193    PFN_vkGetImageMemoryRequirements2 GetImageMemoryRequirements2;
194    PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
195    PFN_vkGetImageSparseMemoryRequirements2 GetImageSparseMemoryRequirements2;
196    PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
197    PFN_vkGetMemoryFdKHR GetMemoryFdKHR;
198    PFN_vkGetMemoryFdPropertiesKHR GetMemoryFdPropertiesKHR;
199    PFN_vkGetPipelineCacheData GetPipelineCacheData;
200    PFN_vkGetPrivateData GetPrivateData;
201    PFN_vkGetQueryPoolResults GetQueryPoolResults;
202    PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
203    PFN_vkGetSemaphoreCounterValue GetSemaphoreCounterValue;
204    PFN_vkGetSemaphoreFdKHR GetSemaphoreFdKHR;
205    PFN_vkImportFenceFdKHR ImportFenceFdKHR;
206    PFN_vkImportSemaphoreFdKHR ImportSemaphoreFdKHR;
207    PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
208    PFN_vkMapMemory MapMemory;
209    PFN_vkMergePipelineCaches MergePipelineCaches;
210    PFN_vkQueueBindSparse QueueBindSparse;
211    PFN_vkQueueSubmit QueueSubmit;
212    PFN_vkQueueSubmit2 QueueSubmit2;
213    PFN_vkQueueWaitIdle QueueWaitIdle;
214    PFN_vkResetCommandBuffer ResetCommandBuffer;
215    PFN_vkResetCommandPool ResetCommandPool;
216    PFN_vkResetDescriptorPool ResetDescriptorPool;
217    PFN_vkResetEvent ResetEvent;
218    PFN_vkResetFences ResetFences;
219    PFN_vkResetQueryPool ResetQueryPool;
220    PFN_vkSetEvent SetEvent;
221    PFN_vkSetPrivateData SetPrivateData;
222    PFN_vkSignalSemaphore SignalSemaphore;
223    PFN_vkTrimCommandPool TrimCommandPool;
224    PFN_vkUnmapMemory UnmapMemory;
225    PFN_vkUpdateDescriptorSetWithTemplate UpdateDescriptorSetWithTemplate;
226    PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
227    PFN_vkWaitForFences WaitForFences;
228    PFN_vkWaitSemaphores WaitSemaphores;
229 };
230 
231 static inline void
vn_util_init_physical_device_proc_table(VkInstance instance,struct vn_physical_device_proc_table * proc_table)232 vn_util_init_physical_device_proc_table(VkInstance instance,
233                                         struct vn_physical_device_proc_table *proc_table)
234 {
235 #define VN_GIPA(instance, cmd) (PFN_ ## cmd)vkGetInstanceProcAddr(instance, #cmd)
236    proc_table->GetPhysicalDeviceCalibrateableTimeDomainsEXT = VN_GIPA(instance, vkGetPhysicalDeviceCalibrateableTimeDomainsEXT);
237    proc_table->GetPhysicalDeviceToolProperties = VN_GIPA(instance, vkGetPhysicalDeviceToolProperties);
238    if (!proc_table->GetPhysicalDeviceToolProperties)
239       proc_table->GetPhysicalDeviceToolProperties = VN_GIPA(instance, vkGetPhysicalDeviceToolPropertiesEXT);
240 #undef VN_GIPA
241 }
242 
243 
244 static inline void
vn_util_init_device_proc_table(VkDevice dev,uint32_t api_version,const struct vn_info_extension_table * ext_table,struct vn_device_proc_table * proc_table)245 vn_util_init_device_proc_table(VkDevice dev,
246                                uint32_t api_version,
247                                const struct vn_info_extension_table *ext_table,
248                                struct vn_device_proc_table *proc_table)
249 {
250 #define VN_GDPA(dev, cmd) (PFN_ ## cmd)vkGetDeviceProcAddr(dev, #cmd)
251    proc_table->AllocateCommandBuffers = VN_GDPA(dev, vkAllocateCommandBuffers);
252    proc_table->AllocateDescriptorSets = VN_GDPA(dev, vkAllocateDescriptorSets);
253    proc_table->AllocateMemory = VN_GDPA(dev, vkAllocateMemory);
254    proc_table->BeginCommandBuffer = VN_GDPA(dev, vkBeginCommandBuffer);
255    proc_table->BindBufferMemory = VN_GDPA(dev, vkBindBufferMemory);
256    proc_table->BindBufferMemory2 =
257       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkBindBufferMemory2) :
258       ext_table->KHR_bind_memory2 ? VN_GDPA(dev, vkBindBufferMemory2KHR) :
259       NULL;
260    proc_table->BindImageMemory = VN_GDPA(dev, vkBindImageMemory);
261    proc_table->BindImageMemory2 =
262       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkBindImageMemory2) :
263       ext_table->KHR_bind_memory2 ? VN_GDPA(dev, vkBindImageMemory2KHR) :
264       NULL;
265    proc_table->CmdBeginConditionalRenderingEXT =
266       ext_table->EXT_conditional_rendering ? VN_GDPA(dev, vkCmdBeginConditionalRenderingEXT) :
267       NULL;
268    proc_table->CmdBeginQuery = VN_GDPA(dev, vkCmdBeginQuery);
269    proc_table->CmdBeginQueryIndexedEXT =
270       ext_table->EXT_transform_feedback ? VN_GDPA(dev, vkCmdBeginQueryIndexedEXT) :
271       NULL;
272    proc_table->CmdBeginRenderPass = VN_GDPA(dev, vkCmdBeginRenderPass);
273    proc_table->CmdBeginRenderPass2 =
274       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkCmdBeginRenderPass2) :
275       ext_table->KHR_create_renderpass2 ? VN_GDPA(dev, vkCmdBeginRenderPass2KHR) :
276       NULL;
277    proc_table->CmdBeginRendering =
278       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdBeginRendering) :
279       ext_table->KHR_dynamic_rendering ? VN_GDPA(dev, vkCmdBeginRenderingKHR) :
280       NULL;
281    proc_table->CmdBeginTransformFeedbackEXT =
282       ext_table->EXT_transform_feedback ? VN_GDPA(dev, vkCmdBeginTransformFeedbackEXT) :
283       NULL;
284    proc_table->CmdBindDescriptorSets = VN_GDPA(dev, vkCmdBindDescriptorSets);
285    proc_table->CmdBindIndexBuffer = VN_GDPA(dev, vkCmdBindIndexBuffer);
286    proc_table->CmdBindPipeline = VN_GDPA(dev, vkCmdBindPipeline);
287    proc_table->CmdBindTransformFeedbackBuffersEXT =
288       ext_table->EXT_transform_feedback ? VN_GDPA(dev, vkCmdBindTransformFeedbackBuffersEXT) :
289       NULL;
290    proc_table->CmdBindVertexBuffers = VN_GDPA(dev, vkCmdBindVertexBuffers);
291    proc_table->CmdBindVertexBuffers2 =
292       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdBindVertexBuffers2) :
293       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdBindVertexBuffers2EXT) :
294       NULL;
295    proc_table->CmdBlitImage = VN_GDPA(dev, vkCmdBlitImage);
296    proc_table->CmdBlitImage2 =
297       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdBlitImage2) :
298       ext_table->KHR_copy_commands2 ? VN_GDPA(dev, vkCmdBlitImage2KHR) :
299       NULL;
300    proc_table->CmdClearAttachments = VN_GDPA(dev, vkCmdClearAttachments);
301    proc_table->CmdClearColorImage = VN_GDPA(dev, vkCmdClearColorImage);
302    proc_table->CmdClearDepthStencilImage = VN_GDPA(dev, vkCmdClearDepthStencilImage);
303    proc_table->CmdCopyBuffer = VN_GDPA(dev, vkCmdCopyBuffer);
304    proc_table->CmdCopyBuffer2 =
305       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdCopyBuffer2) :
306       ext_table->KHR_copy_commands2 ? VN_GDPA(dev, vkCmdCopyBuffer2KHR) :
307       NULL;
308    proc_table->CmdCopyBufferToImage = VN_GDPA(dev, vkCmdCopyBufferToImage);
309    proc_table->CmdCopyBufferToImage2 =
310       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdCopyBufferToImage2) :
311       ext_table->KHR_copy_commands2 ? VN_GDPA(dev, vkCmdCopyBufferToImage2KHR) :
312       NULL;
313    proc_table->CmdCopyImage = VN_GDPA(dev, vkCmdCopyImage);
314    proc_table->CmdCopyImage2 =
315       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdCopyImage2) :
316       ext_table->KHR_copy_commands2 ? VN_GDPA(dev, vkCmdCopyImage2KHR) :
317       NULL;
318    proc_table->CmdCopyImageToBuffer = VN_GDPA(dev, vkCmdCopyImageToBuffer);
319    proc_table->CmdCopyImageToBuffer2 =
320       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdCopyImageToBuffer2) :
321       ext_table->KHR_copy_commands2 ? VN_GDPA(dev, vkCmdCopyImageToBuffer2KHR) :
322       NULL;
323    proc_table->CmdCopyQueryPoolResults = VN_GDPA(dev, vkCmdCopyQueryPoolResults);
324    proc_table->CmdDispatch = VN_GDPA(dev, vkCmdDispatch);
325    proc_table->CmdDispatchBase =
326       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkCmdDispatchBase) :
327       ext_table->KHR_device_group ? VN_GDPA(dev, vkCmdDispatchBaseKHR) :
328       NULL;
329    proc_table->CmdDispatchIndirect = VN_GDPA(dev, vkCmdDispatchIndirect);
330    proc_table->CmdDraw = VN_GDPA(dev, vkCmdDraw);
331    proc_table->CmdDrawIndexed = VN_GDPA(dev, vkCmdDrawIndexed);
332    proc_table->CmdDrawIndexedIndirect = VN_GDPA(dev, vkCmdDrawIndexedIndirect);
333    proc_table->CmdDrawIndexedIndirectCount =
334       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkCmdDrawIndexedIndirectCount) :
335       ext_table->KHR_draw_indirect_count ? VN_GDPA(dev, vkCmdDrawIndexedIndirectCountKHR) :
336       NULL;
337    proc_table->CmdDrawIndirect = VN_GDPA(dev, vkCmdDrawIndirect);
338    proc_table->CmdDrawIndirectByteCountEXT =
339       ext_table->EXT_transform_feedback ? VN_GDPA(dev, vkCmdDrawIndirectByteCountEXT) :
340       NULL;
341    proc_table->CmdDrawIndirectCount =
342       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkCmdDrawIndirectCount) :
343       ext_table->KHR_draw_indirect_count ? VN_GDPA(dev, vkCmdDrawIndirectCountKHR) :
344       NULL;
345    proc_table->CmdDrawMultiEXT =
346       ext_table->EXT_multi_draw ? VN_GDPA(dev, vkCmdDrawMultiEXT) :
347       NULL;
348    proc_table->CmdDrawMultiIndexedEXT =
349       ext_table->EXT_multi_draw ? VN_GDPA(dev, vkCmdDrawMultiIndexedEXT) :
350       NULL;
351    proc_table->CmdEndConditionalRenderingEXT =
352       ext_table->EXT_conditional_rendering ? VN_GDPA(dev, vkCmdEndConditionalRenderingEXT) :
353       NULL;
354    proc_table->CmdEndQuery = VN_GDPA(dev, vkCmdEndQuery);
355    proc_table->CmdEndQueryIndexedEXT =
356       ext_table->EXT_transform_feedback ? VN_GDPA(dev, vkCmdEndQueryIndexedEXT) :
357       NULL;
358    proc_table->CmdEndRenderPass = VN_GDPA(dev, vkCmdEndRenderPass);
359    proc_table->CmdEndRenderPass2 =
360       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkCmdEndRenderPass2) :
361       ext_table->KHR_create_renderpass2 ? VN_GDPA(dev, vkCmdEndRenderPass2KHR) :
362       NULL;
363    proc_table->CmdEndRendering =
364       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdEndRendering) :
365       ext_table->KHR_dynamic_rendering ? VN_GDPA(dev, vkCmdEndRenderingKHR) :
366       NULL;
367    proc_table->CmdEndTransformFeedbackEXT =
368       ext_table->EXT_transform_feedback ? VN_GDPA(dev, vkCmdEndTransformFeedbackEXT) :
369       NULL;
370    proc_table->CmdExecuteCommands = VN_GDPA(dev, vkCmdExecuteCommands);
371    proc_table->CmdFillBuffer = VN_GDPA(dev, vkCmdFillBuffer);
372    proc_table->CmdNextSubpass = VN_GDPA(dev, vkCmdNextSubpass);
373    proc_table->CmdNextSubpass2 =
374       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkCmdNextSubpass2) :
375       ext_table->KHR_create_renderpass2 ? VN_GDPA(dev, vkCmdNextSubpass2KHR) :
376       NULL;
377    proc_table->CmdPipelineBarrier = VN_GDPA(dev, vkCmdPipelineBarrier);
378    proc_table->CmdPipelineBarrier2 =
379       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdPipelineBarrier2) :
380       ext_table->KHR_synchronization2 ? VN_GDPA(dev, vkCmdPipelineBarrier2KHR) :
381       NULL;
382    proc_table->CmdPushConstants = VN_GDPA(dev, vkCmdPushConstants);
383    proc_table->CmdPushDescriptorSetKHR =
384       ext_table->KHR_push_descriptor ? VN_GDPA(dev, vkCmdPushDescriptorSetKHR) :
385       NULL;
386    proc_table->CmdPushDescriptorSetWithTemplateKHR =
387       ext_table->KHR_push_descriptor ? VN_GDPA(dev, vkCmdPushDescriptorSetWithTemplateKHR) :
388       NULL;
389    proc_table->CmdResetEvent = VN_GDPA(dev, vkCmdResetEvent);
390    proc_table->CmdResetEvent2 =
391       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdResetEvent2) :
392       ext_table->KHR_synchronization2 ? VN_GDPA(dev, vkCmdResetEvent2KHR) :
393       NULL;
394    proc_table->CmdResetQueryPool = VN_GDPA(dev, vkCmdResetQueryPool);
395    proc_table->CmdResolveImage = VN_GDPA(dev, vkCmdResolveImage);
396    proc_table->CmdResolveImage2 =
397       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdResolveImage2) :
398       ext_table->KHR_copy_commands2 ? VN_GDPA(dev, vkCmdResolveImage2KHR) :
399       NULL;
400    proc_table->CmdSetBlendConstants = VN_GDPA(dev, vkCmdSetBlendConstants);
401    proc_table->CmdSetCullMode =
402       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetCullMode) :
403       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetCullModeEXT) :
404       NULL;
405    proc_table->CmdSetDepthBias = VN_GDPA(dev, vkCmdSetDepthBias);
406    proc_table->CmdSetDepthBiasEnable =
407       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetDepthBiasEnable) :
408       ext_table->EXT_extended_dynamic_state2 ? VN_GDPA(dev, vkCmdSetDepthBiasEnableEXT) :
409       NULL;
410    proc_table->CmdSetDepthBounds = VN_GDPA(dev, vkCmdSetDepthBounds);
411    proc_table->CmdSetDepthBoundsTestEnable =
412       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetDepthBoundsTestEnable) :
413       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetDepthBoundsTestEnableEXT) :
414       NULL;
415    proc_table->CmdSetDepthCompareOp =
416       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetDepthCompareOp) :
417       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetDepthCompareOpEXT) :
418       NULL;
419    proc_table->CmdSetDepthTestEnable =
420       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetDepthTestEnable) :
421       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetDepthTestEnableEXT) :
422       NULL;
423    proc_table->CmdSetDepthWriteEnable =
424       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetDepthWriteEnable) :
425       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetDepthWriteEnableEXT) :
426       NULL;
427    proc_table->CmdSetDeviceMask =
428       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkCmdSetDeviceMask) :
429       ext_table->KHR_device_group ? VN_GDPA(dev, vkCmdSetDeviceMaskKHR) :
430       NULL;
431    proc_table->CmdSetEvent = VN_GDPA(dev, vkCmdSetEvent);
432    proc_table->CmdSetEvent2 =
433       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetEvent2) :
434       ext_table->KHR_synchronization2 ? VN_GDPA(dev, vkCmdSetEvent2KHR) :
435       NULL;
436    proc_table->CmdSetFrontFace =
437       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetFrontFace) :
438       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetFrontFaceEXT) :
439       NULL;
440    proc_table->CmdSetLineStippleEXT =
441       ext_table->EXT_line_rasterization ? VN_GDPA(dev, vkCmdSetLineStippleEXT) :
442       NULL;
443    proc_table->CmdSetLineWidth = VN_GDPA(dev, vkCmdSetLineWidth);
444    proc_table->CmdSetLogicOpEXT =
445       ext_table->EXT_extended_dynamic_state2 ? VN_GDPA(dev, vkCmdSetLogicOpEXT) :
446       NULL;
447    proc_table->CmdSetPatchControlPointsEXT =
448       ext_table->EXT_extended_dynamic_state2 ? VN_GDPA(dev, vkCmdSetPatchControlPointsEXT) :
449       NULL;
450    proc_table->CmdSetPrimitiveRestartEnable =
451       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetPrimitiveRestartEnable) :
452       ext_table->EXT_extended_dynamic_state2 ? VN_GDPA(dev, vkCmdSetPrimitiveRestartEnableEXT) :
453       NULL;
454    proc_table->CmdSetPrimitiveTopology =
455       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetPrimitiveTopology) :
456       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetPrimitiveTopologyEXT) :
457       NULL;
458    proc_table->CmdSetRasterizerDiscardEnable =
459       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetRasterizerDiscardEnable) :
460       ext_table->EXT_extended_dynamic_state2 ? VN_GDPA(dev, vkCmdSetRasterizerDiscardEnableEXT) :
461       NULL;
462    proc_table->CmdSetScissor = VN_GDPA(dev, vkCmdSetScissor);
463    proc_table->CmdSetScissorWithCount =
464       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetScissorWithCount) :
465       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetScissorWithCountEXT) :
466       NULL;
467    proc_table->CmdSetStencilCompareMask = VN_GDPA(dev, vkCmdSetStencilCompareMask);
468    proc_table->CmdSetStencilOp =
469       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetStencilOp) :
470       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetStencilOpEXT) :
471       NULL;
472    proc_table->CmdSetStencilReference = VN_GDPA(dev, vkCmdSetStencilReference);
473    proc_table->CmdSetStencilTestEnable =
474       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetStencilTestEnable) :
475       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetStencilTestEnableEXT) :
476       NULL;
477    proc_table->CmdSetStencilWriteMask = VN_GDPA(dev, vkCmdSetStencilWriteMask);
478    proc_table->CmdSetViewport = VN_GDPA(dev, vkCmdSetViewport);
479    proc_table->CmdSetViewportWithCount =
480       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdSetViewportWithCount) :
481       ext_table->EXT_extended_dynamic_state ? VN_GDPA(dev, vkCmdSetViewportWithCountEXT) :
482       NULL;
483    proc_table->CmdUpdateBuffer = VN_GDPA(dev, vkCmdUpdateBuffer);
484    proc_table->CmdWaitEvents = VN_GDPA(dev, vkCmdWaitEvents);
485    proc_table->CmdWaitEvents2 =
486       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdWaitEvents2) :
487       ext_table->KHR_synchronization2 ? VN_GDPA(dev, vkCmdWaitEvents2KHR) :
488       NULL;
489    proc_table->CmdWriteTimestamp = VN_GDPA(dev, vkCmdWriteTimestamp);
490    proc_table->CmdWriteTimestamp2 =
491       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCmdWriteTimestamp2) :
492       ext_table->KHR_synchronization2 ? VN_GDPA(dev, vkCmdWriteTimestamp2KHR) :
493       NULL;
494    proc_table->CreateBuffer = VN_GDPA(dev, vkCreateBuffer);
495    proc_table->CreateBufferView = VN_GDPA(dev, vkCreateBufferView);
496    proc_table->CreateCommandPool = VN_GDPA(dev, vkCreateCommandPool);
497    proc_table->CreateComputePipelines = VN_GDPA(dev, vkCreateComputePipelines);
498    proc_table->CreateDescriptorPool = VN_GDPA(dev, vkCreateDescriptorPool);
499    proc_table->CreateDescriptorSetLayout = VN_GDPA(dev, vkCreateDescriptorSetLayout);
500    proc_table->CreateDescriptorUpdateTemplate =
501       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkCreateDescriptorUpdateTemplate) :
502       ext_table->KHR_descriptor_update_template ? VN_GDPA(dev, vkCreateDescriptorUpdateTemplateKHR) :
503       NULL;
504    proc_table->CreateEvent = VN_GDPA(dev, vkCreateEvent);
505    proc_table->CreateFence = VN_GDPA(dev, vkCreateFence);
506    proc_table->CreateFramebuffer = VN_GDPA(dev, vkCreateFramebuffer);
507    proc_table->CreateGraphicsPipelines = VN_GDPA(dev, vkCreateGraphicsPipelines);
508    proc_table->CreateImage = VN_GDPA(dev, vkCreateImage);
509    proc_table->CreateImageView = VN_GDPA(dev, vkCreateImageView);
510    proc_table->CreatePipelineCache = VN_GDPA(dev, vkCreatePipelineCache);
511    proc_table->CreatePipelineLayout = VN_GDPA(dev, vkCreatePipelineLayout);
512    proc_table->CreatePrivateDataSlot =
513       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkCreatePrivateDataSlot) :
514       ext_table->EXT_private_data ? VN_GDPA(dev, vkCreatePrivateDataSlotEXT) :
515       NULL;
516    proc_table->CreateQueryPool = VN_GDPA(dev, vkCreateQueryPool);
517    proc_table->CreateRenderPass = VN_GDPA(dev, vkCreateRenderPass);
518    proc_table->CreateRenderPass2 =
519       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkCreateRenderPass2) :
520       ext_table->KHR_create_renderpass2 ? VN_GDPA(dev, vkCreateRenderPass2KHR) :
521       NULL;
522    proc_table->CreateSampler = VN_GDPA(dev, vkCreateSampler);
523    proc_table->CreateSamplerYcbcrConversion =
524       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkCreateSamplerYcbcrConversion) :
525       ext_table->KHR_sampler_ycbcr_conversion ? VN_GDPA(dev, vkCreateSamplerYcbcrConversionKHR) :
526       NULL;
527    proc_table->CreateSemaphore = VN_GDPA(dev, vkCreateSemaphore);
528    proc_table->CreateShaderModule = VN_GDPA(dev, vkCreateShaderModule);
529    proc_table->DestroyBuffer = VN_GDPA(dev, vkDestroyBuffer);
530    proc_table->DestroyBufferView = VN_GDPA(dev, vkDestroyBufferView);
531    proc_table->DestroyCommandPool = VN_GDPA(dev, vkDestroyCommandPool);
532    proc_table->DestroyDescriptorPool = VN_GDPA(dev, vkDestroyDescriptorPool);
533    proc_table->DestroyDescriptorSetLayout = VN_GDPA(dev, vkDestroyDescriptorSetLayout);
534    proc_table->DestroyDescriptorUpdateTemplate =
535       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkDestroyDescriptorUpdateTemplate) :
536       ext_table->KHR_descriptor_update_template ? VN_GDPA(dev, vkDestroyDescriptorUpdateTemplateKHR) :
537       NULL;
538    proc_table->DestroyDevice = VN_GDPA(dev, vkDestroyDevice);
539    proc_table->DestroyEvent = VN_GDPA(dev, vkDestroyEvent);
540    proc_table->DestroyFence = VN_GDPA(dev, vkDestroyFence);
541    proc_table->DestroyFramebuffer = VN_GDPA(dev, vkDestroyFramebuffer);
542    proc_table->DestroyImage = VN_GDPA(dev, vkDestroyImage);
543    proc_table->DestroyImageView = VN_GDPA(dev, vkDestroyImageView);
544    proc_table->DestroyPipeline = VN_GDPA(dev, vkDestroyPipeline);
545    proc_table->DestroyPipelineCache = VN_GDPA(dev, vkDestroyPipelineCache);
546    proc_table->DestroyPipelineLayout = VN_GDPA(dev, vkDestroyPipelineLayout);
547    proc_table->DestroyPrivateDataSlot =
548       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkDestroyPrivateDataSlot) :
549       ext_table->EXT_private_data ? VN_GDPA(dev, vkDestroyPrivateDataSlotEXT) :
550       NULL;
551    proc_table->DestroyQueryPool = VN_GDPA(dev, vkDestroyQueryPool);
552    proc_table->DestroyRenderPass = VN_GDPA(dev, vkDestroyRenderPass);
553    proc_table->DestroySampler = VN_GDPA(dev, vkDestroySampler);
554    proc_table->DestroySamplerYcbcrConversion =
555       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkDestroySamplerYcbcrConversion) :
556       ext_table->KHR_sampler_ycbcr_conversion ? VN_GDPA(dev, vkDestroySamplerYcbcrConversionKHR) :
557       NULL;
558    proc_table->DestroySemaphore = VN_GDPA(dev, vkDestroySemaphore);
559    proc_table->DestroyShaderModule = VN_GDPA(dev, vkDestroyShaderModule);
560    proc_table->DeviceWaitIdle = VN_GDPA(dev, vkDeviceWaitIdle);
561    proc_table->EndCommandBuffer = VN_GDPA(dev, vkEndCommandBuffer);
562    proc_table->FlushMappedMemoryRanges = VN_GDPA(dev, vkFlushMappedMemoryRanges);
563    proc_table->FreeCommandBuffers = VN_GDPA(dev, vkFreeCommandBuffers);
564    proc_table->FreeDescriptorSets = VN_GDPA(dev, vkFreeDescriptorSets);
565    proc_table->FreeMemory = VN_GDPA(dev, vkFreeMemory);
566    proc_table->GetBufferDeviceAddress =
567       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkGetBufferDeviceAddress) :
568       ext_table->KHR_buffer_device_address ? VN_GDPA(dev, vkGetBufferDeviceAddressKHR) :
569       NULL;
570    proc_table->GetBufferMemoryRequirements = VN_GDPA(dev, vkGetBufferMemoryRequirements);
571    proc_table->GetBufferMemoryRequirements2 =
572       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkGetBufferMemoryRequirements2) :
573       ext_table->KHR_get_memory_requirements2 ? VN_GDPA(dev, vkGetBufferMemoryRequirements2KHR) :
574       NULL;
575    proc_table->GetBufferOpaqueCaptureAddress =
576       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkGetBufferOpaqueCaptureAddress) :
577       ext_table->KHR_buffer_device_address ? VN_GDPA(dev, vkGetBufferOpaqueCaptureAddressKHR) :
578       NULL;
579    proc_table->GetCalibratedTimestampsEXT =
580       ext_table->EXT_calibrated_timestamps ? VN_GDPA(dev, vkGetCalibratedTimestampsEXT) :
581       NULL;
582    proc_table->GetDescriptorSetLayoutSupport =
583       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkGetDescriptorSetLayoutSupport) :
584       ext_table->KHR_maintenance3 ? VN_GDPA(dev, vkGetDescriptorSetLayoutSupportKHR) :
585       NULL;
586    proc_table->GetDeviceBufferMemoryRequirements =
587       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkGetDeviceBufferMemoryRequirements) :
588       ext_table->KHR_maintenance4 ? VN_GDPA(dev, vkGetDeviceBufferMemoryRequirementsKHR) :
589       NULL;
590    proc_table->GetDeviceGroupPeerMemoryFeatures =
591       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkGetDeviceGroupPeerMemoryFeatures) :
592       ext_table->KHR_device_group ? VN_GDPA(dev, vkGetDeviceGroupPeerMemoryFeaturesKHR) :
593       NULL;
594    proc_table->GetDeviceImageMemoryRequirements =
595       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkGetDeviceImageMemoryRequirements) :
596       ext_table->KHR_maintenance4 ? VN_GDPA(dev, vkGetDeviceImageMemoryRequirementsKHR) :
597       NULL;
598    proc_table->GetDeviceImageSparseMemoryRequirements =
599       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkGetDeviceImageSparseMemoryRequirements) :
600       ext_table->KHR_maintenance4 ? VN_GDPA(dev, vkGetDeviceImageSparseMemoryRequirementsKHR) :
601       NULL;
602    proc_table->GetDeviceMemoryCommitment = VN_GDPA(dev, vkGetDeviceMemoryCommitment);
603    proc_table->GetDeviceMemoryOpaqueCaptureAddress =
604       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkGetDeviceMemoryOpaqueCaptureAddress) :
605       ext_table->KHR_buffer_device_address ? VN_GDPA(dev, vkGetDeviceMemoryOpaqueCaptureAddressKHR) :
606       NULL;
607    proc_table->GetDeviceProcAddr = VN_GDPA(dev, vkGetDeviceProcAddr);
608    proc_table->GetDeviceQueue = VN_GDPA(dev, vkGetDeviceQueue);
609    proc_table->GetDeviceQueue2 =
610       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkGetDeviceQueue2) :
611       NULL;
612    proc_table->GetEventStatus = VN_GDPA(dev, vkGetEventStatus);
613    proc_table->GetFenceFdKHR =
614       ext_table->KHR_external_fence_fd ? VN_GDPA(dev, vkGetFenceFdKHR) :
615       NULL;
616    proc_table->GetFenceStatus = VN_GDPA(dev, vkGetFenceStatus);
617    proc_table->GetImageDrmFormatModifierPropertiesEXT =
618       ext_table->EXT_image_drm_format_modifier ? VN_GDPA(dev, vkGetImageDrmFormatModifierPropertiesEXT) :
619       NULL;
620    proc_table->GetImageMemoryRequirements = VN_GDPA(dev, vkGetImageMemoryRequirements);
621    proc_table->GetImageMemoryRequirements2 =
622       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkGetImageMemoryRequirements2) :
623       ext_table->KHR_get_memory_requirements2 ? VN_GDPA(dev, vkGetImageMemoryRequirements2KHR) :
624       NULL;
625    proc_table->GetImageSparseMemoryRequirements = VN_GDPA(dev, vkGetImageSparseMemoryRequirements);
626    proc_table->GetImageSparseMemoryRequirements2 =
627       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkGetImageSparseMemoryRequirements2) :
628       ext_table->KHR_get_memory_requirements2 ? VN_GDPA(dev, vkGetImageSparseMemoryRequirements2KHR) :
629       NULL;
630    proc_table->GetImageSubresourceLayout = VN_GDPA(dev, vkGetImageSubresourceLayout);
631    proc_table->GetMemoryFdKHR =
632       ext_table->KHR_external_memory_fd ? VN_GDPA(dev, vkGetMemoryFdKHR) :
633       NULL;
634    proc_table->GetMemoryFdPropertiesKHR =
635       ext_table->KHR_external_memory_fd ? VN_GDPA(dev, vkGetMemoryFdPropertiesKHR) :
636       NULL;
637    proc_table->GetPipelineCacheData = VN_GDPA(dev, vkGetPipelineCacheData);
638    proc_table->GetPrivateData =
639       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkGetPrivateData) :
640       ext_table->EXT_private_data ? VN_GDPA(dev, vkGetPrivateDataEXT) :
641       NULL;
642    proc_table->GetQueryPoolResults = VN_GDPA(dev, vkGetQueryPoolResults);
643    proc_table->GetRenderAreaGranularity = VN_GDPA(dev, vkGetRenderAreaGranularity);
644    proc_table->GetSemaphoreCounterValue =
645       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkGetSemaphoreCounterValue) :
646       ext_table->KHR_timeline_semaphore ? VN_GDPA(dev, vkGetSemaphoreCounterValueKHR) :
647       NULL;
648    proc_table->GetSemaphoreFdKHR =
649       ext_table->KHR_external_semaphore_fd ? VN_GDPA(dev, vkGetSemaphoreFdKHR) :
650       NULL;
651    proc_table->ImportFenceFdKHR =
652       ext_table->KHR_external_fence_fd ? VN_GDPA(dev, vkImportFenceFdKHR) :
653       NULL;
654    proc_table->ImportSemaphoreFdKHR =
655       ext_table->KHR_external_semaphore_fd ? VN_GDPA(dev, vkImportSemaphoreFdKHR) :
656       NULL;
657    proc_table->InvalidateMappedMemoryRanges = VN_GDPA(dev, vkInvalidateMappedMemoryRanges);
658    proc_table->MapMemory = VN_GDPA(dev, vkMapMemory);
659    proc_table->MergePipelineCaches = VN_GDPA(dev, vkMergePipelineCaches);
660    proc_table->QueueBindSparse = VN_GDPA(dev, vkQueueBindSparse);
661    proc_table->QueueSubmit = VN_GDPA(dev, vkQueueSubmit);
662    proc_table->QueueSubmit2 =
663       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkQueueSubmit2) :
664       ext_table->KHR_synchronization2 ? VN_GDPA(dev, vkQueueSubmit2KHR) :
665       NULL;
666    proc_table->QueueWaitIdle = VN_GDPA(dev, vkQueueWaitIdle);
667    proc_table->ResetCommandBuffer = VN_GDPA(dev, vkResetCommandBuffer);
668    proc_table->ResetCommandPool = VN_GDPA(dev, vkResetCommandPool);
669    proc_table->ResetDescriptorPool = VN_GDPA(dev, vkResetDescriptorPool);
670    proc_table->ResetEvent = VN_GDPA(dev, vkResetEvent);
671    proc_table->ResetFences = VN_GDPA(dev, vkResetFences);
672    proc_table->ResetQueryPool =
673       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkResetQueryPool) :
674       ext_table->EXT_host_query_reset ? VN_GDPA(dev, vkResetQueryPoolEXT) :
675       NULL;
676    proc_table->SetEvent = VN_GDPA(dev, vkSetEvent);
677    proc_table->SetPrivateData =
678       api_version >= VK_API_VERSION_1_3 ? VN_GDPA(dev, vkSetPrivateData) :
679       ext_table->EXT_private_data ? VN_GDPA(dev, vkSetPrivateDataEXT) :
680       NULL;
681    proc_table->SignalSemaphore =
682       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkSignalSemaphore) :
683       ext_table->KHR_timeline_semaphore ? VN_GDPA(dev, vkSignalSemaphoreKHR) :
684       NULL;
685    proc_table->TrimCommandPool =
686       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkTrimCommandPool) :
687       ext_table->KHR_maintenance1 ? VN_GDPA(dev, vkTrimCommandPoolKHR) :
688       NULL;
689    proc_table->UnmapMemory = VN_GDPA(dev, vkUnmapMemory);
690    proc_table->UpdateDescriptorSetWithTemplate =
691       api_version >= VK_API_VERSION_1_1 ? VN_GDPA(dev, vkUpdateDescriptorSetWithTemplate) :
692       ext_table->KHR_descriptor_update_template ? VN_GDPA(dev, vkUpdateDescriptorSetWithTemplateKHR) :
693       NULL;
694    proc_table->UpdateDescriptorSets = VN_GDPA(dev, vkUpdateDescriptorSets);
695    proc_table->WaitForFences = VN_GDPA(dev, vkWaitForFences);
696    proc_table->WaitSemaphores =
697       api_version >= VK_API_VERSION_1_2 ? VN_GDPA(dev, vkWaitSemaphores) :
698       ext_table->KHR_timeline_semaphore ? VN_GDPA(dev, vkWaitSemaphoresKHR) :
699       NULL;
700 #undef VN_GDPA
701 }
702 
703 #endif /* VN_PROTOCOL_RENDERER_UTIL_H */
704