104 lines
3.3 KiB
Python
104 lines
3.3 KiB
Python
|
|
FIRST_PARAM_BLACKLIST = {'VkInstance', 'VkPhysicalDevice'}
|
|
|
|
FUNC_BLACKLIST = {'vkCreateInstance', 'vkDestroyInstance', 'vkGetDeviceProcAddr', 'vkDestroyDevice', 'vkEnumerateInstanceVersion',
|
|
'vkEnumerateInstanceLayerProperties', 'vkEnumerateInstanceExtensionProperties', 'vkCmdDrawMeshTasksEXT',
|
|
'vkCmdDrawMeshTasksIndirectEXT', 'vkCmdDrawMeshTasksIndirectCountEXT', 'vkGetDeviceGroupSurfacePresentModes2EXT',
|
|
'vkGetShaderModuleIdentifierEXT', 'vkGetShaderModuleCreateInfoIdentifierEXT'}
|
|
|
|
# TODO: some of these could probably be handled better if I parsed the xml file correctly ...
|
|
TYPE_BLACKLIST = {'VkPhysicalDeviceMeshShaderFeaturesEXT', 'VkPhysicalDeviceMeshShaderPropertiesEXT',
|
|
'VkSurfaceFullScreenExclusiveWin32InfoEXT', 'VkPhysicalDeviceLegacyDitheringFeaturesEXT',
|
|
'VkAndroidHardwareBufferFormatProperties2ANDROID', 'VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT',
|
|
'VkImageViewSampleWeightCreateInfoQCOM', 'VkPhysicalDeviceImageProcessingFeaturesQCOM',
|
|
'VkPhysicalDeviceImageProcessingPropertiesQCOM', 'VkPhysicalDeviceTilePropertiesFeaturesQCOM', 'VkTilePropertiesQCOM',
|
|
'VkPhysicalDeviceAmigoProfilingFeaturesSEC', 'VkAmigoProfilingSubmitInfoSEC',
|
|
'VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT', 'VkPhysicalDeviceDepthClampZeroOneFeaturesEXT',
|
|
'VkDrawMeshTasksIndirectCommandEXT'}
|
|
|
|
def func_name_to_caps(name):
|
|
assert(name[0:2] == "vk")
|
|
caps = [name[2]]
|
|
wasupper = True
|
|
for char in name[3:]:
|
|
if char.isupper():
|
|
if not wasupper:
|
|
caps.append("_")
|
|
wasupper = True
|
|
else:
|
|
wasupper = False
|
|
caps.append(char.upper())
|
|
return "".join(caps)
|
|
|
|
STRUCT_NAME_EXCEPTIONS = {
|
|
'VkPhysicalDeviceIDProperties': 'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES'
|
|
}
|
|
|
|
def struct_name_to_enum(name):
|
|
assert(name[0:2] == "Vk")
|
|
exception = name in STRUCT_NAME_EXCEPTIONS
|
|
if exception:
|
|
return exception
|
|
caps = ["VK_STRUCTURE_TYPE_", name[2]]
|
|
wasupper = True
|
|
wasnumeric = False
|
|
for char in name[3:]:
|
|
if char.isupper():
|
|
if not wasupper:
|
|
caps.append("_")
|
|
wasupper = True
|
|
else:
|
|
wasupper = False
|
|
if char.isnumeric():
|
|
if not wasnumeric:
|
|
caps.append("_")
|
|
wasnumeric = True
|
|
else:
|
|
wasnumeric = False
|
|
caps.append(char.upper())
|
|
return "".join(caps)
|
|
|
|
def write_preamble(f, header_guard = None, includes = [], c_file = False):
|
|
f.write("""
|
|
// This file has been automatically generated. Do NOT edit edit manually, all your changes will be lost when it is regenerated.
|
|
""")
|
|
if header_guard is not None:
|
|
f.write(f"""
|
|
#pragma once
|
|
|
|
#if !defined({header_guard})
|
|
#define {header_guard} 1
|
|
""")
|
|
|
|
for include in includes:
|
|
f.write(f"""
|
|
#include {include}""")
|
|
|
|
if c_file:
|
|
f.write("""
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
""")
|
|
else:
|
|
f.write("""
|
|
namespace vk_capture
|
|
{
|
|
""")
|
|
|
|
def write_epilogue(f, header_guard = None, c_file = False):
|
|
if c_file:
|
|
f.write("""
|
|
#if defined(__cplusplus)
|
|
} // extern "C"
|
|
#endif
|
|
""")
|
|
else:
|
|
f.write("""
|
|
} // namespace vk_capture
|
|
""")
|
|
if header_guard is not None:
|
|
f.write(f"""
|
|
#endif // {header_guard}
|
|
""")
|