Implement initial VK_EXT_debug_utils changes
This affects the loader, scripts, and layers and introduces the
changes to support the VK_EXT_debug_utils extension.
Change-Id: Ia5336f63e85b00f1e59416c06aacd4ae331fd692
diff --git a/scripts/helper_file_generator.py b/scripts/helper_file_generator.py
index fb519b6..e460f96 100644
--- a/scripts/helper_file_generator.py
+++ b/scripts/helper_file_generator.py
@@ -747,7 +747,8 @@
#
# Object types header: create object enum type header file
def GenerateObjectTypesHeader(self):
- object_types_header = '// Object Type enum for validation layer internal object handling\n'
+ object_types_header = ''
+ object_types_header += '// Object Type enum for validation layer internal object handling\n'
object_types_header += 'typedef enum VulkanObjectType {\n'
object_types_header += ' kVulkanObjectTypeUnknown = 0,\n'
enum_num = 1
@@ -777,7 +778,7 @@
object_types_header += '\n'
object_types_header += '// Helper array to get Vulkan VK_EXT_debug_report object type enum from the internal layers version\n'
object_types_header += 'const VkDebugReportObjectTypeEXT get_debug_report_enum[] = {\n'
- object_types_header += ' VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // No Match\n'
+ object_types_header += ' VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeUnknown\n'
for object_type in type_list:
search_type = object_type.replace("kVulkanObjectType", "").lower()
for vk_object_type in self.debug_report_object_types:
@@ -793,7 +794,7 @@
object_types_header += '\n'
object_types_header += '// Helper array to get Official Vulkan VkObjectType enum from the internal layers version\n'
object_types_header += 'const VkObjectType get_object_type_enum[] = {\n'
- object_types_header += ' VK_OBJECT_TYPE_UNKNOWN, // No Match\n'
+ object_types_header += ' VK_OBJECT_TYPE_UNKNOWN, // kVulkanObjectTypeUnknown\n'
for object_type in type_list:
search_type = object_type.replace("kVulkanObjectType", "").lower()
for vk_object_type in self.core_object_types:
@@ -804,6 +805,47 @@
break
object_types_header += '};\n'
+ # Create a function to convert from VkDebugReportObjectTypeEXT to VkObjectType
+ object_types_header += '\n'
+ object_types_header += '// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n'
+ object_types_header += 'static VkObjectType convertDebugReportObjectToCoreObject(VkDebugReportObjectTypeEXT debug_report_obj){\n'
+ object_types_header += ' if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) {\n'
+ object_types_header += ' return VK_OBJECT_TYPE_UNKNOWN;\n'
+ for core_object_type in self.core_object_types:
+ core_target_type = core_object_type.replace("VK_OBJECT_TYPE_", "").lower()
+ core_target_type = core_target_type.replace("_", "")
+ for dr_object_type in self.debug_report_object_types:
+ dr_target_type = dr_object_type.replace("VK_DEBUG_REPORT_OBJECT_TYPE_", "").lower()
+ dr_target_type = dr_target_type[:-4]
+ dr_target_type = dr_target_type.replace("_", "")
+ if core_target_type == dr_target_type:
+ object_types_header += ' } else if (debug_report_obj == %s) {\n' % dr_object_type
+ object_types_header += ' return %s;\n' % core_object_type
+ break
+ object_types_header += ' }\n'
+ object_types_header += ' return VK_OBJECT_TYPE_UNKNOWN;\n'
+ object_types_header += '}\n'
+
+ # Create a function to convert from VkObjectType to VkDebugReportObjectTypeEXT
+ object_types_header += '\n'
+ object_types_header += '// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n'
+ object_types_header += 'static VkDebugReportObjectTypeEXT convertCoreObjectToDebugReportObject(VkObjectType core_report_obj){\n'
+ object_types_header += ' if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) {\n'
+ object_types_header += ' return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n'
+ for core_object_type in self.core_object_types:
+ core_target_type = core_object_type.replace("VK_OBJECT_TYPE_", "").lower()
+ core_target_type = core_target_type.replace("_", "")
+ for dr_object_type in self.debug_report_object_types:
+ dr_target_type = dr_object_type.replace("VK_DEBUG_REPORT_OBJECT_TYPE_", "").lower()
+ dr_target_type = dr_target_type[:-4]
+ dr_target_type = dr_target_type.replace("_", "")
+ if core_target_type == dr_target_type:
+ object_types_header += ' } else if (core_report_obj == %s) {\n' % core_object_type
+ object_types_header += ' return %s;\n' % dr_object_type
+ break
+ object_types_header += ' }\n'
+ object_types_header += ' return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n'
+ object_types_header += '}\n'
return object_types_header
#
# Determine if a structure needs a safe_struct helper function
diff --git a/scripts/loader_extension_generator.py b/scripts/loader_extension_generator.py
index a4a3f8f..ae2b3da 100644
--- a/scripts/loader_extension_generator.py
+++ b/scripts/loader_extension_generator.py
@@ -40,14 +40,25 @@
'VK_KHR_swapchain',
'VK_KHR_display_swapchain']
+ADD_INST_CMDS = ['vkCreateInstance',
+ 'vkEnumerateInstanceExtensionProperties',
+ 'vkEnumerateInstanceLayerProperties',
+ 'vkEnumerateInstanceVersion']
+
AVOID_EXT_NAMES = ['VK_EXT_debug_report']
+AVOID_CMD_NAMES = ['vkCreateDebugUtilsMessengerEXT',
+ 'vkDestroyDebugUtilsMessengerEXT',
+ 'vkSubmitDebugUtilsMessageEXT']
+
DEVICE_CMDS_NEED_TERM = ['vkGetDeviceProcAddr',
'vkCreateSwapchainKHR',
'vkCreateSharedSwapchainsKHR',
'vkGetDeviceGroupSurfacePresentModesKHR',
'vkDebugMarkerSetObjectTagEXT',
- 'vkDebugMarkerSetObjectNameEXT']
+ 'vkDebugMarkerSetObjectNameEXT',
+ 'vkSetDebugUtilsObjectNameEXT',
+ 'vkSetDebugUtilsObjectTagEXT']
ALIASED_CMDS = {
'vkEnumeratePhysicalDeviceGroupsKHR': 'vkEnumeratePhysicalDeviceGroups',
@@ -176,7 +187,7 @@
preamble += '#include "vk_loader_extensions.h"\n'
preamble += '#include <vulkan/vk_icd.h>\n'
preamble += '#include "wsi.h"\n'
- preamble += '#include "debug_report.h"\n'
+ preamble += '#include "debug_utils.h"\n'
preamble += '#include "extension_manual.h"\n'
elif self.genOpts.filename == 'vk_layer_dispatch_table.h':
@@ -467,7 +478,9 @@
commands = self.ext_commands
for cur_cmd in commands:
- if cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice':
+ is_inst_handle_type = cur_cmd.name in ADD_INST_CMDS or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
+ if is_inst_handle_type:
+
if cur_cmd.ext_name != cur_extension_name:
if 'VK_VERSION_' in cur_cmd.ext_name:
table += '\n // ---- Core %s commands\n' % cur_cmd.ext_name[11:]
@@ -506,7 +519,9 @@
commands = self.ext_commands
for cur_cmd in commands:
- if cur_cmd.handle_type != 'VkInstance' and cur_cmd.handle_type != 'VkPhysicalDevice':
+ is_inst_handle_type = cur_cmd.name in ADD_INST_CMDS or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
+ if not is_inst_handle_type:
+
if cur_cmd.ext_name != cur_extension_name:
if 'VK_VERSION_' in cur_cmd.ext_name:
table += '\n // ---- Core %s commands\n' % cur_cmd.ext_name[11:]
@@ -545,7 +560,7 @@
commands = self.ext_commands
for cur_cmd in commands:
- is_inst_handle_type = cur_cmd.ext_type == 'instance' or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
+ is_inst_handle_type = cur_cmd.name in ADD_INST_CMDS or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
if ((is_inst_handle_type or cur_cmd.name in DEVICE_CMDS_NEED_TERM) and
(cur_cmd.name != 'vkGetInstanceProcAddr' and cur_cmd.name != 'vkEnumerateDeviceLayerProperties')):
@@ -607,7 +622,7 @@
required = False
for cur_cmd in commands:
- is_inst_handle_type = cur_cmd.ext_type == 'instance' or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
+ is_inst_handle_type = cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
if ((is_inst_handle_type or cur_cmd.name in DEVICE_CMDS_NEED_TERM) and (cur_cmd.name not in skip_gipa_commands)):
if cur_cmd.ext_name != cur_extension_name:
@@ -666,7 +681,7 @@
terminators += '// Loader core instance terminators\n'
for cur_cmd in self.core_commands:
- is_inst_handle_type = cur_cmd.ext_type == 'instance' or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
+ is_inst_handle_type = cur_cmd.name in ADD_INST_CMDS or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
if is_inst_handle_type:
mod_string = ''
new_terminator = cur_cmd.cdecl
@@ -878,6 +893,7 @@
for ext_cmd in self.ext_commands:
if (ext_cmd.ext_name in WSI_EXT_NAMES or
ext_cmd.ext_name in AVOID_EXT_NAMES or
+ ext_cmd.name in AVOID_CMD_NAMES or
ext_cmd.name in manual_ext_commands):
continue
@@ -937,8 +953,9 @@
return_prefix += 'return '
has_return_type = True
- if (ext_cmd.ext_type == 'instance' or ext_cmd.handle_type == 'VkPhysicalDevice' or
- 'DebugMarkerSetObject' in ext_cmd.name or ext_cmd.name in DEVICE_CMDS_NEED_TERM):
+ if (ext_cmd.handle_type == 'VkInstance' or ext_cmd.handle_type == 'VkPhysicalDevice' or
+ 'DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name or
+ ext_cmd.name in DEVICE_CMDS_NEED_TERM):
requires_terminator = 1
if requires_terminator == 1:
@@ -973,6 +990,22 @@
funcs += ' struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pTagInfo->object;\n'
funcs += ' local_tag_info.object = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n'
funcs += ' }\n'
+ elif 'SetDebugUtilsObjectName' in ext_cmd.name:
+ funcs += ' VkDebugUtilsObjectNameInfoEXT local_name_info;\n'
+ funcs += ' memcpy(&local_name_info, pNameInfo, sizeof(VkDebugUtilsObjectNameInfoEXT));\n'
+ funcs += ' // If this is a physical device, we have to replace it with the proper one for the next call.\n'
+ funcs += ' if (pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n'
+ funcs += ' struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pNameInfo->objectHandle;\n'
+ funcs += ' local_name_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n'
+ funcs += ' }\n'
+ elif 'SetDebugUtilsObjectTag' in ext_cmd.name:
+ funcs += ' VkDebugUtilsObjectTagInfoEXT local_tag_info;\n'
+ funcs += ' memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugUtilsObjectTagInfoEXT));\n'
+ funcs += ' // If this is a physical device, we have to replace it with the proper one for the next call.\n'
+ funcs += ' if (pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n'
+ funcs += ' struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pTagInfo->objectHandle;\n'
+ funcs += ' local_tag_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n'
+ funcs += ' }\n'
funcs += return_prefix
funcs += 'disp->'
@@ -985,9 +1018,9 @@
if param.type == 'VkPhysicalDevice':
funcs += 'unwrapped_phys_dev'
- elif 'DebugMarkerSetObject' in ext_cmd.name and param.name == 'pNameInfo':
+ elif ('DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name) and param.name == 'pNameInfo':
funcs += '&local_name_info'
- elif 'DebugMarkerSetObject' in ext_cmd.name and param.name == 'pTagInfo':
+ elif ('DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name) and param.name == 'pTagInfo':
funcs += '&local_tag_info'
else:
funcs += param.name
@@ -1059,7 +1092,7 @@
count += 1
funcs += ');\n'
- elif has_surface == 1 and ext_cmd.ext_type == 'device':
+ elif has_surface == 1 and not (ext_cmd.handle_type == 'VkPhysicalDevice' or ext_cmd.handle_type == 'VkInstance'):
funcs += ' uint32_t icd_index = 0;\n'
funcs += ' struct loader_device *dev;\n'
funcs += ' struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev, &icd_index);\n'
@@ -1096,7 +1129,7 @@
elif ext_cmd.handle_type == 'VkInstance':
funcs += '#error("Not implemented. Likely needs to be manually generated!");\n'
- elif 'DebugMarkerSetObject' in ext_cmd.name:
+ elif 'DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name:
funcs += ' uint32_t icd_index = 0;\n'
funcs += ' struct loader_device *dev;\n'
funcs += ' struct loader_icd_term *icd_term = loader_get_icd_and_device(%s, &dev, &icd_index);\n' % (ext_cmd.params[0].name)
@@ -1131,6 +1164,45 @@
funcs += ' if (NULL != icd_surface->real_icd_surfaces) {\n'
funcs += ' local_tag_info.object = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n'
funcs += ' }\n'
+ elif 'SetDebugUtilsObjectName' in ext_cmd.name:
+ funcs += ' VkDebugUtilsObjectNameInfoEXT local_name_info;\n'
+ funcs += ' memcpy(&local_name_info, pNameInfo, sizeof(VkDebugUtilsObjectNameInfoEXT));\n'
+ funcs += ' // If this is a physical device, we have to replace it with the proper one for the next call.\n'
+ funcs += ' if (pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n'
+ funcs += ' struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pNameInfo->objectHandle;\n'
+ funcs += ' local_name_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n'
+ funcs += ' // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n'
+ funcs += ' } else if (pNameInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) {\n'
+ funcs += ' if (NULL != icd_term && NULL != icd_term->dispatch.CreateSwapchainKHR) {\n'
+ funcs += ' VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)pNameInfo->objectHandle;\n'
+ funcs += ' if (NULL != icd_surface->real_icd_surfaces) {\n'
+ funcs += ' local_name_info.objectHandle = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n'
+ funcs += ' }\n'
+ elif 'SetDebugUtilsObjectTag' in ext_cmd.name:
+ funcs += ' VkDebugUtilsObjectTagInfoEXT local_tag_info;\n'
+ funcs += ' memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugUtilsObjectTagInfoEXT));\n'
+ funcs += ' // If this is a physical device, we have to replace it with the proper one for the next call.\n'
+ funcs += ' if (pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n'
+ funcs += ' struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pTagInfo->objectHandle;\n'
+ funcs += ' local_tag_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n'
+ funcs += ' // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n'
+ funcs += ' } else if (pTagInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) {\n'
+ funcs += ' if (NULL != icd_term && NULL != icd_term->dispatch.CreateSwapchainKHR) {\n'
+ funcs += ' VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)pTagInfo->objectHandle;\n'
+ funcs += ' if (NULL != icd_surface->real_icd_surfaces) {\n'
+ funcs += ' local_tag_info.objectHandle = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n'
+ funcs += ' }\n'
+ else:
+ funcs += ' if (%s->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n' % (ext_cmd.params[1].name)
+ funcs += ' struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)%s->objectHandle;\n' % (ext_cmd.params[1].name)
+ funcs += ' %s->objectHandle = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n' % (ext_cmd.params[1].name)
+ funcs += ' // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n'
+ funcs += ' } else if (%s->objectType == VK_OBJECT_TYPE_SURFACE_KHR) {\n' % (ext_cmd.params[1].name)
+ funcs += ' if (NULL != icd_term && NULL != icd_term->dispatch.CreateSwapchainKHR) {\n'
+ funcs += ' VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)%s->objectHandle;\n' % (ext_cmd.params[1].name)
+ funcs += ' if (NULL != icd_surface->real_icd_surfaces) {\n'
+ funcs += ' %s->objectHandle = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n' % (ext_cmd.params[1].name)
+ funcs += ' }\n'
funcs += ' }\n'
funcs += ' }\n'
funcs += ' return icd_term->dispatch.'
@@ -1145,9 +1217,9 @@
funcs += 'phys_dev_term->phys_dev'
elif param.type == 'VkSurfaceKHR':
funcs += 'icd_surface->real_icd_surfaces[icd_index]'
- elif 'DebugMarkerSetObject' in ext_cmd.name and param.name == 'pNameInfo':
+ elif ('DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name) and param.name == 'pNameInfo':
funcs += '&local_name_info'
- elif 'DebugMarkerSetObject' in ext_cmd.name and param.name == 'pTagInfo':
+ elif ('DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name) and param.name == 'pTagInfo':
funcs += '&local_tag_info'
else:
funcs += param.name
@@ -1202,7 +1274,8 @@
for cur_cmd in self.ext_commands:
if ('VK_VERSION_' in cur_cmd.ext_name or
cur_cmd.ext_name in WSI_EXT_NAMES or
- cur_cmd.ext_name in AVOID_EXT_NAMES):
+ cur_cmd.ext_name in AVOID_EXT_NAMES or
+ cur_cmd.name in AVOID_CMD_NAMES ):
continue
if cur_cmd.ext_name != cur_extension_name:
@@ -1252,8 +1325,8 @@
create_func += ' for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {\n'
for ext in entries:
if ('VK_VERSION_' in ext.name or ext.name in WSI_EXT_NAMES or
- ext.name in AVOID_EXT_NAMES or ext.type == 'device' or
- ext.num_commands == 0):
+ ext.name in AVOID_EXT_NAMES or ext.name in AVOID_CMD_NAMES or
+ ext.type == 'device' or ext.num_commands == 0):
continue
if ext.name != cur_extension_name:
diff --git a/scripts/object_tracker_generator.py b/scripts/object_tracker_generator.py
index 405a5b7..26c1105 100644
--- a/scripts/object_tracker_generator.py
+++ b/scripts/object_tracker_generator.py
@@ -172,6 +172,17 @@
'vkGetDeviceQueue',
'vkGetSwapchainImagesKHR',
'vkCreateDescriptorSetLayout',
+ 'vkCreateDebugUtilsMessengerEXT',
+ 'vkDestroyDebugUtilsMessengerEXT',
+ 'vkSubmitDebugUtilsMessageEXT',
+ 'vkSetDebugUtilsObjectNameEXT',
+ 'vkSetDebugUtilsObjectTagEXT',
+ 'vkQueueBeginDebugUtilsLabelEXT',
+ 'vkQueueEndDebugUtilsLabelEXT',
+ 'vkQueueInsertDebugUtilsLabelEXT',
+ 'vkCmdBeginDebugUtilsLabelEXT',
+ 'vkCmdEndDebugUtilsLabelEXT',
+ 'vkCmdInsertDebugUtilsLabelEXT',
]
# These VUIDS are not implicit, but are best handled in this layer. Codegen for vkDestroy calls will generate a key
# which is translated here into a good VU. Saves ~40 checks.
diff --git a/scripts/parameter_validation_generator.py b/scripts/parameter_validation_generator.py
index edd49b5..4246eea 100644
--- a/scripts/parameter_validation_generator.py
+++ b/scripts/parameter_validation_generator.py
@@ -127,17 +127,12 @@
self.blacklist = [
'vkGetInstanceProcAddr',
'vkGetDeviceProcAddr',
- 'vkEnumerateInstanceLayerProperties',
- 'vkEnumerateInstanceExtensionsProperties',
- 'vkEnumerateDeviceLayerProperties',
- 'vkEnumerateDeviceExtensionsProperties',
- 'vkCreateDebugReportCallbackKHR',
- 'vkDestroyDebugReportCallbackKHR',
+ 'vkEnumerateInstanceVersion',
'vkEnumerateInstanceLayerProperties',
'vkEnumerateInstanceExtensionProperties',
'vkEnumerateDeviceLayerProperties',
- 'vkCmdDebugMarkerEndEXT',
'vkEnumerateDeviceExtensionProperties',
+ 'vkCmdDebugMarkerEndEXT',
]
self.validate_only = [
'vkCreateInstance',
@@ -150,6 +145,8 @@
'vkCreateCommandPool',
'vkCreateRenderPass',
'vkDestroyRenderPass',
+ 'vkCreateDebugUtilsMessengerEXT',
+ 'vkDestroyDebugUtilsMessengerEXT',
]
# Structure fields to ignore
self.structMemberBlacklist = { 'VkWriteDescriptorSet' : ['dstSet'] }
diff --git a/scripts/threading_generator.py b/scripts/threading_generator.py
index fd88909..4ac65d6 100644
--- a/scripts/threading_generator.py
+++ b/scripts/threading_generator.py
@@ -384,6 +384,8 @@
'vkEnumerateInstanceExtensionProperties',
'vkEnumerateDeviceLayerProperties',
'vkEnumerateDeviceExtensionProperties',
+ 'vkCreateDebugUtilsMessengerEXT',
+ 'vkDestroyDebugUtilsMessengerEXT',
]
if name in special_functions:
decls = self.makeCDecls(cmdinfo.elem)
@@ -392,7 +394,7 @@
self.appendSection('command', decls[0])
self.intercepts += [ ' {"%s", (void*)%s},' % (name,name[2:]) ]
return
- if "QueuePresentKHR" in name or ("DebugMarker" in name and "EXT" in name):
+ if "QueuePresentKHR" in name or (("DebugMarker" in name or "DebugUtilsObject" in name) and "EXT" in name):
self.appendSection('command', '// TODO - not wrapping EXT function ' + name)
return
# Determine first if this function needs to be intercepted
diff --git a/scripts/unique_objects_generator.py b/scripts/unique_objects_generator.py
index 78526a3..289a5bb 100644
--- a/scripts/unique_objects_generator.py
+++ b/scripts/unique_objects_generator.py
@@ -157,6 +157,8 @@
'vkGetDisplayModeProperties2KHR',
'vkCreateRenderPass',
'vkDestroyRenderPass',
+ 'vkSetDebugUtilsObjectNameEXT',
+ 'vkSetDebugUtilsObjectTagEXT',
]
# Commands shadowed by interface functions and are not implemented
self.interface_functions = [
@@ -165,10 +167,14 @@
'vkGetDisplayPlaneSupportedDisplaysKHR',
'vkGetDisplayModePropertiesKHR',
'vkGetDisplayPlaneCapabilitiesKHR',
- # DebugReport APIs are hooked, but handled separately in the source file
+ # VK_EXT_debug_report APIs are hooked, but handled separately in the source file
'vkCreateDebugReportCallbackEXT',
'vkDestroyDebugReportCallbackEXT',
'vkDebugReportMessageEXT',
+ # VK_EXT_debug_utils APIs are hooked, but handled separately in the source file
+ 'vkCreateDebugUtilsMessengerEXT',
+ 'vkDestroyDebugUtilsMessengerEXT',
+ 'vkSubmitDebugUtilsMessageEXT',
]
self.headerVersion = None
# Internal state - accumulators for different inner block text
diff --git a/scripts/vuid_mapping.py b/scripts/vuid_mapping.py
index e3dbfdf..88df867 100644
--- a/scripts/vuid_mapping.py
+++ b/scripts/vuid_mapping.py
@@ -1104,7 +1104,7 @@
# Convert a string VUID into numerical value
# See "VUID Mapping Details" comment above for more info
def convertVUID(vuid_string):
- """Convert a string-based VUID into a numberical value"""
+ """Convert a string-based VUID into a numerical value"""
#func_struct_update = False
#imp_param_update = False
if vuid_string in ['', None]: