Files
UnrealEngine/Engine/Source/ThirdParty/Vulkan/profiles/add_namespace.py
2025-05-18 13:04:45 +08:00

41 lines
3.9 KiB
Python

# Use the generated header in the "debug" folder because we want the option to print specific errors
with open(r'./debug/vulkan_profiles.hpp', 'r') as f:
file_data = f.read()
# Add pragma used everywhere to skip about casting Vulkan function pointers
insert_index = file_data.find("#ifndef VULKAN_PROFILES_HPP_")
data = file_data[:insert_index] + "#pragma warning(push)\n#pragma warning(disable : 4191) // warning C4191: 'type cast': unsafe conversion\n\n" + file_data[insert_index:] + "\n#pragma warning(pop) // restore 4191\n"
# Add our namespace in front of functions assumed by the generation scripts
data = data.replace("vkGetInstanceProcAddr(","VulkanRHI::vkGetInstanceProcAddr(")
data = data.replace("vkEnumerateInstanceExtensionProperties(","VulkanRHI::vkEnumerateInstanceExtensionProperties(")
data = data.replace("vkCreateInstance(","VulkanRHI::vkCreateInstance(")
data = data.replace("vkEnumerateDeviceExtensionProperties(","VulkanRHI::vkEnumerateDeviceExtensionProperties(")
data = data.replace("vkGetPhysicalDeviceProperties(","VulkanRHI::vkGetPhysicalDeviceProperties(")
data = data.replace("vkCreateDevice(","VulkanRHI::vkCreateDevice(")
# Deal with ImportVulkanFunctions_Static compilation
data = data.replace("(PFN_vkGetInstanceProcAddr)vkGetInstanceProcAddr;","(PFN_vkGetInstanceProcAddr)VulkanRHI::vkGetInstanceProcAddr;")
data = data.replace("(PFN_vkGetDeviceProcAddr)vkGetDeviceProcAddr;","(PFN_vkGetDeviceProcAddr)VulkanRHI::vkGetDeviceProcAddr;")
data = data.replace("(PFN_vkEnumerateInstanceVersion)vkEnumerateInstanceVersion;","(PFN_vkEnumerateInstanceVersion)nullptr; // not used")
data = data.replace("(PFN_vkEnumerateInstanceExtensionProperties)vkEnumerateInstanceExtensionProperties;","(PFN_vkEnumerateInstanceExtensionProperties)VulkanRHI::vkEnumerateInstanceExtensionProperties;")
data = data.replace("(PFN_vkEnumerateDeviceExtensionProperties)vkEnumerateDeviceExtensionProperties;","(PFN_vkEnumerateDeviceExtensionProperties)VulkanRHI::vkEnumerateDeviceExtensionProperties;")
data = data.replace("(PFN_vkGetPhysicalDeviceFeatures2)vkGetPhysicalDeviceFeatures2;","(PFN_vkGetPhysicalDeviceFeatures2)VulkanRHI::vkGetPhysicalDeviceFeatures2;")
data = data.replace("(PFN_vkGetPhysicalDeviceProperties2)vkGetPhysicalDeviceProperties2;","(PFN_vkGetPhysicalDeviceProperties2)VulkanRHI::vkGetPhysicalDeviceProperties2;")
data = data.replace("(PFN_vkGetPhysicalDeviceFormatProperties2)vkGetPhysicalDeviceFormatProperties2;","(PFN_vkGetPhysicalDeviceFormatProperties2)VulkanRHI::vkGetPhysicalDeviceFormatProperties2;")
data = data.replace("(PFN_vkGetPhysicalDeviceQueueFamilyProperties2)vkGetPhysicalDeviceQueueFamilyProperties2;","(PFN_vkGetPhysicalDeviceQueueFamilyProperties2)VulkanRHI::vkGetPhysicalDeviceQueueFamilyProperties2;")
data = data.replace("(PFN_vkCreateInstance)vkCreateInstance;","(PFN_vkCreateInstance)VulkanRHI::vkCreateInstance;")
data = data.replace("(PFN_vkCreateDevice)vkCreateDevice;","(PFN_vkCreateDevice)VulkanRHI::vkCreateDevice;")
# Other namespace replacements
data = data.replace("PFN_vkGetInstanceProcAddr gipa = vp.singleton ? vkGetInstanceProcAddr : vp.GetInstanceProcAddr;","PFN_vkGetInstanceProcAddr gipa = vp.singleton ? VulkanRHI::vkGetInstanceProcAddr : vp.GetInstanceProcAddr;")
data = data.replace("(PFN_vkEnumerateInstanceVersion)nullptr; // not used","(PFN_vkEnumerateInstanceVersion)VulkanRHI::vkEnumerateInstanceVersion;")
data = data.replace("(PFN_vkEnumerateInstanceVersion)VulkanRHI::vkGetInstanceProcAddr(VK_NULL_HANDLE, \"vkEnumerateInstanceVersion\")","(PFN_vkEnumerateInstanceVersion)VulkanRHI::vkEnumerateInstanceVersion")
# Fix a build error !?
data = data.replace("}#pragma warning(push)"," }\n#pragma warning(push)")
# Write final header with text namespaces added
with open(r'./include/vulkan_profiles_ue.h', 'w') as f:
f.write(data)