15db71995Sopenharmony_ci/*
25db71995Sopenharmony_ci *
35db71995Sopenharmony_ci * Copyright (c) 2015-2021 The Khronos Group Inc.
45db71995Sopenharmony_ci * Copyright (c) 2015-2021 Valve Corporation
55db71995Sopenharmony_ci * Copyright (c) 2015-2021 LunarG, Inc.
65db71995Sopenharmony_ci *
75db71995Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
85db71995Sopenharmony_ci * you may not use this file except in compliance with the License.
95db71995Sopenharmony_ci * You may obtain a copy of the License at
105db71995Sopenharmony_ci *
115db71995Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
125db71995Sopenharmony_ci *
135db71995Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
145db71995Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
155db71995Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
165db71995Sopenharmony_ci * See the License for the specific language governing permissions and
175db71995Sopenharmony_ci * limitations under the License.
185db71995Sopenharmony_ci *
195db71995Sopenharmony_ci * Author: Jon Ashburn <jon@lunarg.com>
205db71995Sopenharmony_ci * Author: Charles Giessen <charles@lunarg.com>
215db71995Sopenharmony_ci */
225db71995Sopenharmony_ci
235db71995Sopenharmony_ci#include "gpa_helper.h"
245db71995Sopenharmony_ci
255db71995Sopenharmony_ci#include <string.h>
265db71995Sopenharmony_ci
275db71995Sopenharmony_ci#include "loader.h"
285db71995Sopenharmony_ci#include "debug_utils.h"
295db71995Sopenharmony_ci#include "unknown_function_handling.h"
305db71995Sopenharmony_ci#include "wsi.h"
315db71995Sopenharmony_ci
325db71995Sopenharmony_civoid *trampoline_get_proc_addr(struct loader_instance *inst, const char *funcName) {
335db71995Sopenharmony_ci    // Don't include or check global functions
345db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetInstanceProcAddr")) return vkGetInstanceProcAddr;
355db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyInstance")) return vkDestroyInstance;
365db71995Sopenharmony_ci    if (!strcmp(funcName, "vkEnumeratePhysicalDevices")) return vkEnumeratePhysicalDevices;
375db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures")) return vkGetPhysicalDeviceFeatures;
385db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties")) return vkGetPhysicalDeviceFormatProperties;
395db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties")) return vkGetPhysicalDeviceImageFormatProperties;
405db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties")) return vkGetPhysicalDeviceSparseImageFormatProperties;
415db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceProperties")) return vkGetPhysicalDeviceProperties;
425db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties")) return vkGetPhysicalDeviceQueueFamilyProperties;
435db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties")) return vkGetPhysicalDeviceMemoryProperties;
445db71995Sopenharmony_ci    if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties")) return vkEnumerateDeviceLayerProperties;
455db71995Sopenharmony_ci    if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties")) return vkEnumerateDeviceExtensionProperties;
465db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateDevice")) return vkCreateDevice;
475db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceProcAddr")) return vkGetDeviceProcAddr;
485db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyDevice")) return vkDestroyDevice;
495db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceQueue")) return vkGetDeviceQueue;
505db71995Sopenharmony_ci    if (!strcmp(funcName, "vkQueueSubmit")) return vkQueueSubmit;
515db71995Sopenharmony_ci    if (!strcmp(funcName, "vkQueueWaitIdle")) return vkQueueWaitIdle;
525db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDeviceWaitIdle")) return vkDeviceWaitIdle;
535db71995Sopenharmony_ci    if (!strcmp(funcName, "vkAllocateMemory")) return vkAllocateMemory;
545db71995Sopenharmony_ci    if (!strcmp(funcName, "vkFreeMemory")) return vkFreeMemory;
555db71995Sopenharmony_ci    if (!strcmp(funcName, "vkMapMemory")) return vkMapMemory;
565db71995Sopenharmony_ci    if (!strcmp(funcName, "vkUnmapMemory")) return vkUnmapMemory;
575db71995Sopenharmony_ci    if (!strcmp(funcName, "vkFlushMappedMemoryRanges")) return vkFlushMappedMemoryRanges;
585db71995Sopenharmony_ci    if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges")) return vkInvalidateMappedMemoryRanges;
595db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceMemoryCommitment")) return vkGetDeviceMemoryCommitment;
605db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements")) return vkGetImageSparseMemoryRequirements;
615db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetImageMemoryRequirements")) return vkGetImageMemoryRequirements;
625db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetBufferMemoryRequirements")) return vkGetBufferMemoryRequirements;
635db71995Sopenharmony_ci    if (!strcmp(funcName, "vkBindImageMemory")) return vkBindImageMemory;
645db71995Sopenharmony_ci    if (!strcmp(funcName, "vkBindBufferMemory")) return vkBindBufferMemory;
655db71995Sopenharmony_ci    if (!strcmp(funcName, "vkQueueBindSparse")) return vkQueueBindSparse;
665db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateFence")) return vkCreateFence;
675db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyFence")) return vkDestroyFence;
685db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetFenceStatus")) return vkGetFenceStatus;
695db71995Sopenharmony_ci    if (!strcmp(funcName, "vkResetFences")) return vkResetFences;
705db71995Sopenharmony_ci    if (!strcmp(funcName, "vkWaitForFences")) return vkWaitForFences;
715db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateSemaphore")) return vkCreateSemaphore;
725db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroySemaphore")) return vkDestroySemaphore;
735db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateEvent")) return vkCreateEvent;
745db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyEvent")) return vkDestroyEvent;
755db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetEventStatus")) return vkGetEventStatus;
765db71995Sopenharmony_ci    if (!strcmp(funcName, "vkSetEvent")) return vkSetEvent;
775db71995Sopenharmony_ci    if (!strcmp(funcName, "vkResetEvent")) return vkResetEvent;
785db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateQueryPool")) return vkCreateQueryPool;
795db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyQueryPool")) return vkDestroyQueryPool;
805db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetQueryPoolResults")) return vkGetQueryPoolResults;
815db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateBuffer")) return vkCreateBuffer;
825db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyBuffer")) return vkDestroyBuffer;
835db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateBufferView")) return vkCreateBufferView;
845db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyBufferView")) return vkDestroyBufferView;
855db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateImage")) return vkCreateImage;
865db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyImage")) return vkDestroyImage;
875db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetImageSubresourceLayout")) return vkGetImageSubresourceLayout;
885db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateImageView")) return vkCreateImageView;
895db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyImageView")) return vkDestroyImageView;
905db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateShaderModule")) return vkCreateShaderModule;
915db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyShaderModule")) return vkDestroyShaderModule;
925db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreatePipelineCache")) return vkCreatePipelineCache;
935db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyPipelineCache")) return vkDestroyPipelineCache;
945db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPipelineCacheData")) return vkGetPipelineCacheData;
955db71995Sopenharmony_ci    if (!strcmp(funcName, "vkMergePipelineCaches")) return vkMergePipelineCaches;
965db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateGraphicsPipelines")) return vkCreateGraphicsPipelines;
975db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateComputePipelines")) return vkCreateComputePipelines;
985db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyPipeline")) return vkDestroyPipeline;
995db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreatePipelineLayout")) return vkCreatePipelineLayout;
1005db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyPipelineLayout")) return vkDestroyPipelineLayout;
1015db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateSampler")) return vkCreateSampler;
1025db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroySampler")) return vkDestroySampler;
1035db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateDescriptorSetLayout")) return vkCreateDescriptorSetLayout;
1045db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyDescriptorSetLayout")) return vkDestroyDescriptorSetLayout;
1055db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateDescriptorPool")) return vkCreateDescriptorPool;
1065db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyDescriptorPool")) return vkDestroyDescriptorPool;
1075db71995Sopenharmony_ci    if (!strcmp(funcName, "vkResetDescriptorPool")) return vkResetDescriptorPool;
1085db71995Sopenharmony_ci    if (!strcmp(funcName, "vkAllocateDescriptorSets")) return vkAllocateDescriptorSets;
1095db71995Sopenharmony_ci    if (!strcmp(funcName, "vkFreeDescriptorSets")) return vkFreeDescriptorSets;
1105db71995Sopenharmony_ci    if (!strcmp(funcName, "vkUpdateDescriptorSets")) return vkUpdateDescriptorSets;
1115db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateFramebuffer")) return vkCreateFramebuffer;
1125db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyFramebuffer")) return vkDestroyFramebuffer;
1135db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateRenderPass")) return vkCreateRenderPass;
1145db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyRenderPass")) return vkDestroyRenderPass;
1155db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetRenderAreaGranularity")) return vkGetRenderAreaGranularity;
1165db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateCommandPool")) return vkCreateCommandPool;
1175db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyCommandPool")) return vkDestroyCommandPool;
1185db71995Sopenharmony_ci    if (!strcmp(funcName, "vkResetCommandPool")) return vkResetCommandPool;
1195db71995Sopenharmony_ci    if (!strcmp(funcName, "vkAllocateCommandBuffers")) return vkAllocateCommandBuffers;
1205db71995Sopenharmony_ci    if (!strcmp(funcName, "vkFreeCommandBuffers")) return vkFreeCommandBuffers;
1215db71995Sopenharmony_ci    if (!strcmp(funcName, "vkBeginCommandBuffer")) return vkBeginCommandBuffer;
1225db71995Sopenharmony_ci    if (!strcmp(funcName, "vkEndCommandBuffer")) return vkEndCommandBuffer;
1235db71995Sopenharmony_ci    if (!strcmp(funcName, "vkResetCommandBuffer")) return vkResetCommandBuffer;
1245db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBindPipeline")) return vkCmdBindPipeline;
1255db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBindDescriptorSets")) return vkCmdBindDescriptorSets;
1265db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBindVertexBuffers")) return vkCmdBindVertexBuffers;
1275db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBindIndexBuffer")) return vkCmdBindIndexBuffer;
1285db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetViewport")) return vkCmdSetViewport;
1295db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetScissor")) return vkCmdSetScissor;
1305db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetLineWidth")) return vkCmdSetLineWidth;
1315db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetDepthBias")) return vkCmdSetDepthBias;
1325db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetBlendConstants")) return vkCmdSetBlendConstants;
1335db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetDepthBounds")) return vkCmdSetDepthBounds;
1345db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetStencilCompareMask")) return vkCmdSetStencilCompareMask;
1355db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetStencilWriteMask")) return vkCmdSetStencilWriteMask;
1365db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetStencilReference")) return vkCmdSetStencilReference;
1375db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDraw")) return vkCmdDraw;
1385db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDrawIndexed")) return vkCmdDrawIndexed;
1395db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDrawIndirect")) return vkCmdDrawIndirect;
1405db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDrawIndexedIndirect")) return vkCmdDrawIndexedIndirect;
1415db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDispatch")) return vkCmdDispatch;
1425db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDispatchIndirect")) return vkCmdDispatchIndirect;
1435db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyBuffer")) return vkCmdCopyBuffer;
1445db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyImage")) return vkCmdCopyImage;
1455db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBlitImage")) return vkCmdBlitImage;
1465db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyBufferToImage")) return vkCmdCopyBufferToImage;
1475db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyImageToBuffer")) return vkCmdCopyImageToBuffer;
1485db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdUpdateBuffer")) return vkCmdUpdateBuffer;
1495db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdFillBuffer")) return vkCmdFillBuffer;
1505db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdClearColorImage")) return vkCmdClearColorImage;
1515db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdClearDepthStencilImage")) return vkCmdClearDepthStencilImage;
1525db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdClearAttachments")) return vkCmdClearAttachments;
1535db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdResolveImage")) return vkCmdResolveImage;
1545db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetEvent")) return vkCmdSetEvent;
1555db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdResetEvent")) return vkCmdResetEvent;
1565db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdWaitEvents")) return vkCmdWaitEvents;
1575db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdPipelineBarrier")) return vkCmdPipelineBarrier;
1585db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBeginQuery")) return vkCmdBeginQuery;
1595db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdEndQuery")) return vkCmdEndQuery;
1605db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdResetQueryPool")) return vkCmdResetQueryPool;
1615db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdWriteTimestamp")) return vkCmdWriteTimestamp;
1625db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyQueryPoolResults")) return vkCmdCopyQueryPoolResults;
1635db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdPushConstants")) return vkCmdPushConstants;
1645db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBeginRenderPass")) return vkCmdBeginRenderPass;
1655db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdNextSubpass")) return vkCmdNextSubpass;
1665db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdEndRenderPass")) return vkCmdEndRenderPass;
1675db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdExecuteCommands")) return vkCmdExecuteCommands;
1685db71995Sopenharmony_ci
1695db71995Sopenharmony_ci    // Core 1.1 functions
1705db71995Sopenharmony_ci    if (!strcmp(funcName, "vkEnumeratePhysicalDeviceGroups")) return vkEnumeratePhysicalDeviceGroups;
1715db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures2")) return vkGetPhysicalDeviceFeatures2;
1725db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceProperties2")) return vkGetPhysicalDeviceProperties2;
1735db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties2")) return vkGetPhysicalDeviceFormatProperties2;
1745db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties2")) return vkGetPhysicalDeviceImageFormatProperties2;
1755db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties2")) return vkGetPhysicalDeviceQueueFamilyProperties2;
1765db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties2")) return vkGetPhysicalDeviceMemoryProperties2;
1775db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties2"))
1785db71995Sopenharmony_ci        return vkGetPhysicalDeviceSparseImageFormatProperties2;
1795db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceExternalBufferProperties")) return vkGetPhysicalDeviceExternalBufferProperties;
1805db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceExternalSemaphoreProperties")) return vkGetPhysicalDeviceExternalSemaphoreProperties;
1815db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceExternalFenceProperties")) return vkGetPhysicalDeviceExternalFenceProperties;
1825db71995Sopenharmony_ci    if (!strcmp(funcName, "vkBindBufferMemory2")) return vkBindBufferMemory2;
1835db71995Sopenharmony_ci    if (!strcmp(funcName, "vkBindImageMemory2")) return vkBindImageMemory2;
1845db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceGroupPeerMemoryFeatures")) return vkGetDeviceGroupPeerMemoryFeatures;
1855db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetDeviceMask")) return vkCmdSetDeviceMask;
1865db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDispatchBase")) return vkCmdDispatchBase;
1875db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetImageMemoryRequirements2")) return vkGetImageMemoryRequirements2;
1885db71995Sopenharmony_ci    if (!strcmp(funcName, "vkTrimCommandPool")) return vkTrimCommandPool;
1895db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceQueue2")) return vkGetDeviceQueue2;
1905db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateSamplerYcbcrConversion")) return vkCreateSamplerYcbcrConversion;
1915db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroySamplerYcbcrConversion")) return vkDestroySamplerYcbcrConversion;
1925db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDescriptorSetLayoutSupport")) return vkGetDescriptorSetLayoutSupport;
1935db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateDescriptorUpdateTemplate")) return vkCreateDescriptorUpdateTemplate;
1945db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyDescriptorUpdateTemplate")) return vkDestroyDescriptorUpdateTemplate;
1955db71995Sopenharmony_ci    if (!strcmp(funcName, "vkUpdateDescriptorSetWithTemplate")) return vkUpdateDescriptorSetWithTemplate;
1965db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements2")) return vkGetImageSparseMemoryRequirements2;
1975db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetBufferMemoryRequirements2")) return vkGetBufferMemoryRequirements2;
1985db71995Sopenharmony_ci
1995db71995Sopenharmony_ci    // Core 1.2 functions
2005db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreateRenderPass2")) return vkCreateRenderPass2;
2015db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBeginRenderPass2")) return vkCmdBeginRenderPass2;
2025db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdNextSubpass2")) return vkCmdNextSubpass2;
2035db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdEndRenderPass2")) return vkCmdEndRenderPass2;
2045db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDrawIndirectCount")) return vkCmdDrawIndirectCount;
2055db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdDrawIndexedIndirectCount")) return vkCmdDrawIndexedIndirectCount;
2065db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetSemaphoreCounterValue")) return vkGetSemaphoreCounterValue;
2075db71995Sopenharmony_ci    if (!strcmp(funcName, "vkWaitSemaphores")) return vkWaitSemaphores;
2085db71995Sopenharmony_ci    if (!strcmp(funcName, "vkSignalSemaphore")) return vkSignalSemaphore;
2095db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetBufferDeviceAddress")) return vkGetBufferDeviceAddress;
2105db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetBufferOpaqueCaptureAddress")) return vkGetBufferOpaqueCaptureAddress;
2115db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceMemoryOpaqueCaptureAddress")) return vkGetDeviceMemoryOpaqueCaptureAddress;
2125db71995Sopenharmony_ci    if (!strcmp(funcName, "vkResetQueryPool")) return vkResetQueryPool;
2135db71995Sopenharmony_ci
2145db71995Sopenharmony_ci    // Core 1.3 functions
2155db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPhysicalDeviceToolProperties")) return vkGetPhysicalDeviceToolProperties;
2165db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCreatePrivateDataSlot")) return vkCreatePrivateDataSlot;
2175db71995Sopenharmony_ci    if (!strcmp(funcName, "vkDestroyPrivateDataSlot")) return vkDestroyPrivateDataSlot;
2185db71995Sopenharmony_ci    if (!strcmp(funcName, "vkSetPrivateData")) return vkSetPrivateData;
2195db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetPrivateData")) return vkGetPrivateData;
2205db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetEvent2")) return vkCmdSetEvent2;
2215db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdResetEvent2")) return vkCmdResetEvent2;
2225db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdWaitEvents2")) return vkCmdWaitEvents2;
2235db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdPipelineBarrier2")) return vkCmdPipelineBarrier2;
2245db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdWriteTimestamp2")) return vkCmdWriteTimestamp2;
2255db71995Sopenharmony_ci    if (!strcmp(funcName, "vkQueueSubmit2")) return vkQueueSubmit2;
2265db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyBuffer2")) return vkCmdCopyBuffer2;
2275db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyImage2")) return vkCmdCopyImage2;
2285db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyBufferToImage2")) return vkCmdCopyBufferToImage2;
2295db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdCopyImageToBuffer2")) return vkCmdCopyImageToBuffer2;
2305db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBlitImage2")) return vkCmdBlitImage2;
2315db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdResolveImage2")) return vkCmdResolveImage2;
2325db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBeginRendering")) return vkCmdBeginRendering;
2335db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdEndRendering")) return vkCmdEndRendering;
2345db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetCullMode")) return vkCmdSetCullMode;
2355db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetFrontFace")) return vkCmdSetFrontFace;
2365db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetPrimitiveTopology")) return vkCmdSetPrimitiveTopology;
2375db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetViewportWithCount")) return vkCmdSetViewportWithCount;
2385db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetScissorWithCount")) return vkCmdSetScissorWithCount;
2395db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdBindVertexBuffers2")) return vkCmdBindVertexBuffers2;
2405db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetDepthTestEnable")) return vkCmdSetDepthTestEnable;
2415db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetDepthWriteEnable")) return vkCmdSetDepthWriteEnable;
2425db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetDepthCompareOp")) return vkCmdSetDepthCompareOp;
2435db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetDepthBoundsTestEnable")) return vkCmdSetDepthBoundsTestEnable;
2445db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetStencilTestEnable")) return vkCmdSetStencilTestEnable;
2455db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetStencilOp")) return vkCmdSetStencilOp;
2465db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetRasterizerDiscardEnable")) return vkCmdSetRasterizerDiscardEnable;
2475db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetDepthBiasEnable")) return vkCmdSetDepthBiasEnable;
2485db71995Sopenharmony_ci    if (!strcmp(funcName, "vkCmdSetPrimitiveRestartEnable")) return vkCmdSetPrimitiveRestartEnable;
2495db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceBufferMemoryRequirements")) return vkGetDeviceBufferMemoryRequirements;
2505db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceImageMemoryRequirements")) return vkGetDeviceImageMemoryRequirements;
2515db71995Sopenharmony_ci    if (!strcmp(funcName, "vkGetDeviceImageSparseMemoryRequirements")) return vkGetDeviceImageSparseMemoryRequirements;
2525db71995Sopenharmony_ci
2535db71995Sopenharmony_ci    // Instance extensions
2545db71995Sopenharmony_ci    void *addr;
2555db71995Sopenharmony_ci    if (debug_extensions_InstanceGpa(inst, funcName, &addr)) return addr;
2565db71995Sopenharmony_ci
2575db71995Sopenharmony_ci    if (wsi_swapchain_instance_gpa(inst, funcName, &addr)) return addr;
2585db71995Sopenharmony_ci
2595db71995Sopenharmony_ci    if (extension_instance_gpa(inst, funcName, &addr)) return addr;
2605db71995Sopenharmony_ci
2615db71995Sopenharmony_ci    // Unknown physical device extensions
2625db71995Sopenharmony_ci    addr = loader_phys_dev_ext_gpa_tramp(inst, funcName);
2635db71995Sopenharmony_ci    if (NULL != addr) return addr;
2645db71995Sopenharmony_ci
2655db71995Sopenharmony_ci    // Unknown device extensions
2665db71995Sopenharmony_ci    addr = loader_dev_ext_gpa_tramp(inst, funcName);
2675db71995Sopenharmony_ci    return addr;
2685db71995Sopenharmony_ci}
2695db71995Sopenharmony_ci
2705db71995Sopenharmony_civoid *globalGetProcAddr(const char *name) {
2715db71995Sopenharmony_ci    if (!name || name[0] != 'v' || name[1] != 'k') return NULL;
2725db71995Sopenharmony_ci
2735db71995Sopenharmony_ci    name += 2;
2745db71995Sopenharmony_ci    if (!strcmp(name, "CreateInstance")) return vkCreateInstance;
2755db71995Sopenharmony_ci    if (!strcmp(name, "EnumerateInstanceExtensionProperties")) return vkEnumerateInstanceExtensionProperties;
2765db71995Sopenharmony_ci    if (!strcmp(name, "EnumerateInstanceLayerProperties")) return vkEnumerateInstanceLayerProperties;
2775db71995Sopenharmony_ci    if (!strcmp(name, "EnumerateInstanceVersion")) return vkEnumerateInstanceVersion;
2785db71995Sopenharmony_ci
2795db71995Sopenharmony_ci    return NULL;
2805db71995Sopenharmony_ci}
281