Files
UnrealEngine/Engine/Source/Runtime/VulkanRHI/Private/VulkanLoader.h
2025-05-18 13:04:45 +08:00

265 lines
16 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "VulkanPlatform.h"
#include "VulkanThirdParty.h"
// List all instance Vulkan entry points used by Unreal that need to be loaded manually
#define ENUM_VK_ENTRYPOINTS_INSTANCE(EnumMacro) \
EnumMacro(PFN_vkDestroyInstance, vkDestroyInstance) \
EnumMacro(PFN_vkEnumeratePhysicalDevices, vkEnumeratePhysicalDevices) \
EnumMacro(PFN_vkGetPhysicalDeviceFeatures, vkGetPhysicalDeviceFeatures) \
EnumMacro(PFN_vkGetPhysicalDeviceFormatProperties, vkGetPhysicalDeviceFormatProperties) \
EnumMacro(PFN_vkGetPhysicalDeviceFormatProperties2, vkGetPhysicalDeviceFormatProperties2) \
EnumMacro(PFN_vkGetPhysicalDeviceImageFormatProperties, vkGetPhysicalDeviceImageFormatProperties) \
EnumMacro(PFN_vkGetPhysicalDeviceImageFormatProperties2, vkGetPhysicalDeviceImageFormatProperties2) \
EnumMacro(PFN_vkGetPhysicalDeviceProperties, vkGetPhysicalDeviceProperties) \
EnumMacro(PFN_vkGetPhysicalDeviceQueueFamilyProperties, vkGetPhysicalDeviceQueueFamilyProperties) \
EnumMacro(PFN_vkGetPhysicalDeviceQueueFamilyProperties2, vkGetPhysicalDeviceQueueFamilyProperties2) \
EnumMacro(PFN_vkGetPhysicalDeviceMemoryProperties, vkGetPhysicalDeviceMemoryProperties) \
EnumMacro(PFN_vkGetPhysicalDeviceProperties2, vkGetPhysicalDeviceProperties2) \
EnumMacro(PFN_vkGetPhysicalDeviceFeatures2, vkGetPhysicalDeviceFeatures2) \
EnumMacro(PFN_vkGetPhysicalDeviceMemoryProperties2, vkGetPhysicalDeviceMemoryProperties2) \
EnumMacro(PFN_vkCreateDevice, vkCreateDevice) \
EnumMacro(PFN_vkDestroyDevice, vkDestroyDevice) \
EnumMacro(PFN_vkEnumerateDeviceExtensionProperties, vkEnumerateDeviceExtensionProperties) \
EnumMacro(PFN_vkEnumerateDeviceLayerProperties, vkEnumerateDeviceLayerProperties) \
EnumMacro(PFN_vkGetDeviceQueue, vkGetDeviceQueue) \
EnumMacro(PFN_vkQueueSubmit, vkQueueSubmit) \
EnumMacro(PFN_vkQueueWaitIdle, vkQueueWaitIdle) \
EnumMacro(PFN_vkDeviceWaitIdle, vkDeviceWaitIdle) \
EnumMacro(PFN_vkAllocateMemory, vkAllocateMemory) \
EnumMacro(PFN_vkFreeMemory, vkFreeMemory) \
EnumMacro(PFN_vkMapMemory, vkMapMemory) \
EnumMacro(PFN_vkUnmapMemory, vkUnmapMemory) \
EnumMacro(PFN_vkFlushMappedMemoryRanges, vkFlushMappedMemoryRanges) \
EnumMacro(PFN_vkInvalidateMappedMemoryRanges, vkInvalidateMappedMemoryRanges) \
EnumMacro(PFN_vkGetDeviceMemoryCommitment, vkGetDeviceMemoryCommitment) \
EnumMacro(PFN_vkBindBufferMemory, vkBindBufferMemory) \
EnumMacro(PFN_vkBindImageMemory, vkBindImageMemory) \
EnumMacro(PFN_vkBindBufferMemory2, vkBindBufferMemory2) \
EnumMacro(PFN_vkBindImageMemory2, vkBindImageMemory2) \
EnumMacro(PFN_vkGetBufferMemoryRequirements, vkGetBufferMemoryRequirements) \
EnumMacro(PFN_vkGetImageMemoryRequirements, vkGetImageMemoryRequirements) \
EnumMacro(PFN_vkGetImageSparseMemoryRequirements, vkGetImageSparseMemoryRequirements) \
EnumMacro(PFN_vkGetImageMemoryRequirements2, vkGetImageMemoryRequirements2) \
EnumMacro(PFN_vkGetBufferMemoryRequirements2, vkGetBufferMemoryRequirements2) \
EnumMacro(PFN_vkGetPhysicalDeviceSparseImageFormatProperties, vkGetPhysicalDeviceSparseImageFormatProperties) \
EnumMacro(PFN_vkQueueBindSparse, vkQueueBindSparse) \
EnumMacro(PFN_vkCreateFence, vkCreateFence) \
EnumMacro(PFN_vkDestroyFence, vkDestroyFence) \
EnumMacro(PFN_vkResetFences, vkResetFences) \
EnumMacro(PFN_vkGetFenceStatus, vkGetFenceStatus) \
EnumMacro(PFN_vkWaitForFences, vkWaitForFences) \
EnumMacro(PFN_vkCreateSemaphore, vkCreateSemaphore) \
EnumMacro(PFN_vkDestroySemaphore, vkDestroySemaphore) \
EnumMacro(PFN_vkCreateEvent, vkCreateEvent) \
EnumMacro(PFN_vkDestroyEvent, vkDestroyEvent) \
EnumMacro(PFN_vkGetEventStatus, vkGetEventStatus) \
EnumMacro(PFN_vkSetEvent, vkSetEvent) \
EnumMacro(PFN_vkResetEvent, vkResetEvent) \
EnumMacro(PFN_vkCreateQueryPool, vkCreateQueryPool) \
EnumMacro(PFN_vkDestroyQueryPool, vkDestroyQueryPool) \
EnumMacro(PFN_vkGetQueryPoolResults, vkGetQueryPoolResults) \
EnumMacro(PFN_vkCreateBuffer, vkCreateBuffer) \
EnumMacro(PFN_vkDestroyBuffer, vkDestroyBuffer) \
EnumMacro(PFN_vkCreateBufferView, vkCreateBufferView) \
EnumMacro(PFN_vkDestroyBufferView, vkDestroyBufferView) \
EnumMacro(PFN_vkCreateImage, vkCreateImage) \
EnumMacro(PFN_vkDestroyImage, vkDestroyImage) \
EnumMacro(PFN_vkGetImageSubresourceLayout, vkGetImageSubresourceLayout) \
EnumMacro(PFN_vkCreateImageView, vkCreateImageView) \
EnumMacro(PFN_vkDestroyImageView, vkDestroyImageView) \
EnumMacro(PFN_vkCreateShaderModule, vkCreateShaderModule) \
EnumMacro(PFN_vkDestroyShaderModule, vkDestroyShaderModule) \
EnumMacro(PFN_vkCreatePipelineCache, vkCreatePipelineCache) \
EnumMacro(PFN_vkDestroyPipelineCache, vkDestroyPipelineCache) \
EnumMacro(PFN_vkGetPipelineCacheData, vkGetPipelineCacheData) \
EnumMacro(PFN_vkMergePipelineCaches, vkMergePipelineCaches) \
EnumMacro(PFN_vkCreateGraphicsPipelines, vkCreateGraphicsPipelines) \
EnumMacro(PFN_vkCreateComputePipelines, vkCreateComputePipelines) \
EnumMacro(PFN_vkDestroyPipeline, vkDestroyPipeline) \
EnumMacro(PFN_vkCreatePipelineLayout, vkCreatePipelineLayout) \
EnumMacro(PFN_vkDestroyPipelineLayout, vkDestroyPipelineLayout) \
EnumMacro(PFN_vkCreateSampler, vkCreateSampler) \
EnumMacro(PFN_vkDestroySampler, vkDestroySampler) \
EnumMacro(PFN_vkCreateDescriptorSetLayout, vkCreateDescriptorSetLayout) \
EnumMacro(PFN_vkDestroyDescriptorSetLayout, vkDestroyDescriptorSetLayout) \
EnumMacro(PFN_vkCreateDescriptorPool, vkCreateDescriptorPool) \
EnumMacro(PFN_vkDestroyDescriptorPool, vkDestroyDescriptorPool) \
EnumMacro(PFN_vkResetDescriptorPool, vkResetDescriptorPool) \
EnumMacro(PFN_vkAllocateDescriptorSets, vkAllocateDescriptorSets) \
EnumMacro(PFN_vkFreeDescriptorSets, vkFreeDescriptorSets) \
EnumMacro(PFN_vkUpdateDescriptorSets, vkUpdateDescriptorSets) \
EnumMacro(PFN_vkCreateFramebuffer, vkCreateFramebuffer) \
EnumMacro(PFN_vkDestroyFramebuffer, vkDestroyFramebuffer) \
EnumMacro(PFN_vkCreateRenderPass, vkCreateRenderPass) \
EnumMacro(PFN_vkDestroyRenderPass, vkDestroyRenderPass) \
EnumMacro(PFN_vkGetRenderAreaGranularity, vkGetRenderAreaGranularity) \
EnumMacro(PFN_vkCreateCommandPool, vkCreateCommandPool) \
EnumMacro(PFN_vkDestroyCommandPool, vkDestroyCommandPool) \
EnumMacro(PFN_vkResetCommandPool, vkResetCommandPool) \
EnumMacro(PFN_vkTrimCommandPool, vkTrimCommandPool) \
EnumMacro(PFN_vkAllocateCommandBuffers, vkAllocateCommandBuffers) \
EnumMacro(PFN_vkFreeCommandBuffers, vkFreeCommandBuffers) \
EnumMacro(PFN_vkBeginCommandBuffer, vkBeginCommandBuffer) \
EnumMacro(PFN_vkEndCommandBuffer, vkEndCommandBuffer) \
EnumMacro(PFN_vkResetCommandBuffer, vkResetCommandBuffer) \
EnumMacro(PFN_vkCmdBindPipeline, vkCmdBindPipeline) \
EnumMacro(PFN_vkCmdSetViewport, vkCmdSetViewport) \
EnumMacro(PFN_vkCmdSetScissor, vkCmdSetScissor) \
EnumMacro(PFN_vkCmdSetLineWidth, vkCmdSetLineWidth) \
EnumMacro(PFN_vkCmdSetDepthBias, vkCmdSetDepthBias) \
EnumMacro(PFN_vkCmdSetBlendConstants, vkCmdSetBlendConstants) \
EnumMacro(PFN_vkCmdSetDepthBounds, vkCmdSetDepthBounds) \
EnumMacro(PFN_vkCmdSetStencilCompareMask, vkCmdSetStencilCompareMask) \
EnumMacro(PFN_vkCmdSetStencilWriteMask, vkCmdSetStencilWriteMask) \
EnumMacro(PFN_vkCmdSetStencilReference, vkCmdSetStencilReference) \
EnumMacro(PFN_vkCmdBindDescriptorSets, vkCmdBindDescriptorSets) \
EnumMacro(PFN_vkCmdBindIndexBuffer, vkCmdBindIndexBuffer) \
EnumMacro(PFN_vkCmdBindVertexBuffers, vkCmdBindVertexBuffers) \
EnumMacro(PFN_vkCmdDraw, vkCmdDraw) \
EnumMacro(PFN_vkCmdDrawIndexed, vkCmdDrawIndexed) \
EnumMacro(PFN_vkCmdDrawIndirect, vkCmdDrawIndirect) \
EnumMacro(PFN_vkCmdDrawIndexedIndirect, vkCmdDrawIndexedIndirect) \
EnumMacro(PFN_vkCmdDispatch, vkCmdDispatch) \
EnumMacro(PFN_vkCmdDispatchIndirect, vkCmdDispatchIndirect) \
EnumMacro(PFN_vkCmdCopyBuffer, vkCmdCopyBuffer) \
EnumMacro(PFN_vkCmdCopyImage, vkCmdCopyImage) \
EnumMacro(PFN_vkCmdBlitImage, vkCmdBlitImage) \
EnumMacro(PFN_vkCmdCopyBufferToImage, vkCmdCopyBufferToImage) \
EnumMacro(PFN_vkCmdCopyImageToBuffer, vkCmdCopyImageToBuffer) \
EnumMacro(PFN_vkCmdUpdateBuffer, vkCmdUpdateBuffer) \
EnumMacro(PFN_vkCmdFillBuffer, vkCmdFillBuffer) \
EnumMacro(PFN_vkCmdClearColorImage, vkCmdClearColorImage) \
EnumMacro(PFN_vkCmdClearDepthStencilImage, vkCmdClearDepthStencilImage) \
EnumMacro(PFN_vkCmdClearAttachments, vkCmdClearAttachments) \
EnumMacro(PFN_vkCmdResolveImage, vkCmdResolveImage) \
EnumMacro(PFN_vkCmdSetEvent, vkCmdSetEvent) \
EnumMacro(PFN_vkCmdResetEvent, vkCmdResetEvent) \
EnumMacro(PFN_vkCmdWaitEvents, vkCmdWaitEvents) \
EnumMacro(PFN_vkCmdPipelineBarrier, vkCmdPipelineBarrier) \
EnumMacro(PFN_vkCmdBeginQuery, vkCmdBeginQuery) \
EnumMacro(PFN_vkCmdEndQuery, vkCmdEndQuery) \
EnumMacro(PFN_vkCmdResetQueryPool, vkCmdResetQueryPool) \
EnumMacro(PFN_vkCmdWriteTimestamp, vkCmdWriteTimestamp) \
EnumMacro(PFN_vkCmdCopyQueryPoolResults, vkCmdCopyQueryPoolResults) \
EnumMacro(PFN_vkCmdPushConstants, vkCmdPushConstants) \
EnumMacro(PFN_vkCmdBeginRenderPass, vkCmdBeginRenderPass) \
EnumMacro(PFN_vkCmdNextSubpass, vkCmdNextSubpass) \
EnumMacro(PFN_vkCmdEndRenderPass, vkCmdEndRenderPass) \
EnumMacro(PFN_vkCmdExecuteCommands, vkCmdExecuteCommands) \
EnumMacro(PFN_vkCreateSwapchainKHR, vkCreateSwapchainKHR) \
EnumMacro(PFN_vkDestroySwapchainKHR, vkDestroySwapchainKHR) \
EnumMacro(PFN_vkGetSwapchainImagesKHR, vkGetSwapchainImagesKHR) \
EnumMacro(PFN_vkAcquireNextImageKHR, vkAcquireNextImageKHR) \
EnumMacro(PFN_vkQueuePresentKHR, vkQueuePresentKHR) \
EnumMacro(PFN_vkCreateSamplerYcbcrConversion, vkCreateSamplerYcbcrConversion) \
EnumMacro(PFN_vkDestroySamplerYcbcrConversion, vkDestroySamplerYcbcrConversion)
// List all surface Vulkan entry points used by Unreal that need to be loaded manually
#define ENUM_VK_ENTRYPOINTS_SURFACE_INSTANCE(EnumMacro) \
EnumMacro(PFN_vkDestroySurfaceKHR, vkDestroySurfaceKHR) \
EnumMacro(PFN_vkGetPhysicalDeviceSurfaceSupportKHR, vkGetPhysicalDeviceSurfaceSupportKHR) \
EnumMacro(PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR, vkGetPhysicalDeviceSurfaceCapabilitiesKHR) \
EnumMacro(PFN_vkGetPhysicalDeviceSurfaceFormatsKHR, vkGetPhysicalDeviceSurfaceFormatsKHR) \
EnumMacro(PFN_vkGetPhysicalDeviceSurfacePresentModesKHR, vkGetPhysicalDeviceSurfacePresentModesKHR)
// List all base Vulkan entry points used by Unreal that need to be loaded manually
#define ENUM_VK_ENTRYPOINTS_BASE(EnumMacro) \
EnumMacro(PFN_vkCreateInstance, vkCreateInstance) \
EnumMacro(PFN_vkGetInstanceProcAddr, vkGetInstanceProcAddr) \
EnumMacro(PFN_vkGetDeviceProcAddr, vkGetDeviceProcAddr) \
EnumMacro(PFN_vkEnumerateInstanceExtensionProperties, vkEnumerateInstanceExtensionProperties) \
EnumMacro(PFN_vkEnumerateInstanceLayerProperties, vkEnumerateInstanceLayerProperties)
// List all optional Vulkan entry points used by Unreal that need to be loaded manually
#define ENUM_VK_ENTRYPOINTS_OPTIONAL_BASE(EnumMacro) \
EnumMacro(PFN_vkEnumerateInstanceVersion, vkEnumerateInstanceVersion) \
EnumMacro(PFN_vkGetPhysicalDeviceDisplayPropertiesKHR, vkGetPhysicalDeviceDisplayPropertiesKHR) \
EnumMacro(PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR, vkGetPhysicalDeviceDisplayPlanePropertiesKHR) \
EnumMacro(PFN_vkGetDisplayPlaneSupportedDisplaysKHR, vkGetDisplayPlaneSupportedDisplaysKHR) \
EnumMacro(PFN_vkGetDisplayModePropertiesKHR, vkGetDisplayModePropertiesKHR) \
EnumMacro(PFN_vkCreateDisplayModeKHR, vkCreateDisplayModeKHR) \
EnumMacro(PFN_vkGetDisplayPlaneCapabilitiesKHR, vkGetDisplayPlaneCapabilitiesKHR)
// List all optional Vulkan raytracing entrypoints used by Unreal
#define ENUM_VK_ENTRYPOINTS_RAYTRACING(EnumMacro) \
EnumMacro(PFN_vkCreateAccelerationStructureKHR, vkCreateAccelerationStructureKHR) \
EnumMacro(PFN_vkDestroyAccelerationStructureKHR, vkDestroyAccelerationStructureKHR) \
EnumMacro(PFN_vkCmdBuildAccelerationStructuresKHR, vkCmdBuildAccelerationStructuresKHR) \
EnumMacro(PFN_vkGetAccelerationStructureBuildSizesKHR, vkGetAccelerationStructureBuildSizesKHR) \
EnumMacro(PFN_vkGetAccelerationStructureDeviceAddressKHR, vkGetAccelerationStructureDeviceAddressKHR) \
EnumMacro(PFN_vkCmdTraceRaysKHR, vkCmdTraceRaysKHR) \
EnumMacro(PFN_vkCmdTraceRaysIndirectKHR, vkCmdTraceRaysIndirectKHR) \
EnumMacro(PFN_vkCmdTraceRaysIndirect2KHR, vkCmdTraceRaysIndirect2KHR) \
EnumMacro(PFN_vkCreateRayTracingPipelinesKHR, vkCreateRayTracingPipelinesKHR) \
EnumMacro(PFN_vkGetRayTracingShaderGroupHandlesKHR, vkGetRayTracingShaderGroupHandlesKHR) \
EnumMacro(PFN_vkCmdWriteAccelerationStructuresPropertiesKHR, vkCmdWriteAccelerationStructuresPropertiesKHR) \
EnumMacro(PFN_vkCmdCopyAccelerationStructureKHR, vkCmdCopyAccelerationStructureKHR)
// List all optional Vulkan entry points used by Unreal that need to be loaded manually
#define ENUM_VK_ENTRYPOINTS_OPTIONAL_INSTANCE(EnumMacro) \
ENUM_VK_ENTRYPOINTS_RAYTRACING(EnumMacro) \
EnumMacro(PFN_vkCreateRenderPass2KHR, vkCreateRenderPass2KHR) \
EnumMacro(PFN_vkCmdBeginRenderPass2KHR, vkCmdBeginRenderPass2KHR) \
EnumMacro(PFN_vkGetDeviceImageMemoryRequirementsKHR, vkGetDeviceImageMemoryRequirementsKHR) \
EnumMacro(PFN_vkGetDeviceBufferMemoryRequirementsKHR, vkGetDeviceBufferMemoryRequirementsKHR) \
EnumMacro(PFN_vkResetQueryPoolEXT, vkResetQueryPoolEXT) \
EnumMacro(PFN_vkCmdPipelineBarrier2KHR, vkCmdPipelineBarrier2KHR) \
EnumMacro(PFN_vkCmdResetEvent2KHR, vkCmdResetEvent2KHR) \
EnumMacro(PFN_vkCmdSetEvent2KHR, vkCmdSetEvent2KHR) \
EnumMacro(PFN_vkCmdWaitEvents2KHR, vkCmdWaitEvents2KHR) \
EnumMacro(PFN_vkQueueSubmit2KHR, vkQueueSubmit2KHR) \
EnumMacro(PFN_vkCreateSharedSwapchainsKHR, vkCreateSharedSwapchainsKHR) \
EnumMacro(PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, vkGetPhysicalDeviceCalibrateableTimeDomainsEXT) \
EnumMacro(PFN_vkGetCalibratedTimestampsEXT, vkGetCalibratedTimestampsEXT) \
EnumMacro(PFN_vkGetBufferDeviceAddressKHR, vkGetBufferDeviceAddressKHR) \
EnumMacro(PFN_vkGetDescriptorSetLayoutSizeEXT, vkGetDescriptorSetLayoutSizeEXT) \
EnumMacro(PFN_vkGetDescriptorSetLayoutBindingOffsetEXT, vkGetDescriptorSetLayoutBindingOffsetEXT) \
EnumMacro(PFN_vkCmdBindDescriptorBuffersEXT, vkCmdBindDescriptorBuffersEXT) \
EnumMacro(PFN_vkCmdSetDescriptorBufferOffsetsEXT, vkCmdSetDescriptorBufferOffsetsEXT) \
EnumMacro(PFN_vkGetDescriptorEXT, vkGetDescriptorEXT) \
EnumMacro(PFN_vkCreateDeferredOperationKHR, vkCreateDeferredOperationKHR) \
EnumMacro(PFN_vkDestroyDeferredOperationKHR, vkDestroyDeferredOperationKHR) \
EnumMacro(PFN_vkDeferredOperationJoinKHR, vkDeferredOperationJoinKHR) \
EnumMacro(PFN_vkGetDeferredOperationMaxConcurrencyKHR, vkGetDeferredOperationMaxConcurrencyKHR) \
EnumMacro(PFN_vkGetDeferredOperationResultKHR, vkGetDeferredOperationResultKHR) \
EnumMacro(PFN_vkCmdDrawMeshTasksEXT, vkCmdDrawMeshTasksEXT) \
EnumMacro(PFN_vkCmdDrawMeshTasksIndirectCountEXT, vkCmdDrawMeshTasksIndirectCountEXT) \
EnumMacro(PFN_vkCmdDrawMeshTasksIndirectEXT, vkCmdDrawMeshTasksIndirectEXT) \
EnumMacro(PFN_vkCmdWriteBufferMarkerAMD, vkCmdWriteBufferMarkerAMD) \
EnumMacro(PFN_vkCmdSetCheckpointNV, vkCmdSetCheckpointNV) \
EnumMacro(PFN_vkGetQueueCheckpointDataNV, vkGetQueueCheckpointDataNV) \
EnumMacro(PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR, vkGetPhysicalDeviceFragmentShadingRatesKHR) \
EnumMacro(PFN_vkGetDeviceFaultInfoEXT, vkGetDeviceFaultInfoEXT) \
EnumMacro(PFN_vkGetPhysicalDeviceToolPropertiesEXT, vkGetPhysicalDeviceToolPropertiesEXT) \
EnumMacro(PFN_vkGetImageSubresourceLayout2EXT, vkGetImageSubresourceLayout2EXT) \
EnumMacro(PFN_vkGetImageSubresourceLayout2KHR, vkGetImageSubresourceLayout2KHR) \
EnumMacro(PFN_vkGetSemaphoreCounterValue, vkGetSemaphoreCounterValueKHR) \
EnumMacro(PFN_vkWaitSemaphores, vkWaitSemaphoresKHR) \
EnumMacro(PFN_vkSignalSemaphore, vkSignalSemaphoreKHR)
// List of all Vulkan entry points
#define ENUM_VK_ENTRYPOINTS_ALL(EnumMacro) \
ENUM_VK_ENTRYPOINTS_BASE(EnumMacro) \
ENUM_VK_ENTRYPOINTS_OPTIONAL_BASE(EnumMacro) \
ENUM_VK_ENTRYPOINTS_INSTANCE(EnumMacro) \
ENUM_VK_ENTRYPOINTS_SURFACE_INSTANCE(EnumMacro) \
ENUM_VK_ENTRYPOINTS_OPTIONAL_INSTANCE(EnumMacro) \
ENUM_VK_ENTRYPOINTS_PLATFORM_BASE(EnumMacro) \
ENUM_VK_ENTRYPOINTS_OPTIONAL_PLATFORM_INSTANCE(EnumMacro) \
ENUM_VK_ENTRYPOINTS_PLATFORM_INSTANCE(EnumMacro)
// Declare all Vulkan functions
#define DECLARE_VK_ENTRYPOINTS(Type,Func) extern VULKANRHI_API Type Func;
namespace VulkanDynamicAPI
{
ENUM_VK_ENTRYPOINTS_ALL(DECLARE_VK_ENTRYPOINTS);
}
using namespace VulkanDynamicAPI;