loader: Fix VK_EXT_debug_utils crash
Fix a crash where the debug utils extension would crash if no layers
were present that implemented a given entry point.
(cherry picked from commit 4b858b5b90eac5cd4b35c9d4c15fb220703dc50e)
Test: angle_end2end_tests
Change-Id: Ied1da23dfdc952893a5aaad4ae01f69bd6010523
diff --git a/scripts/loader_extension_generator.py b/scripts/loader_extension_generator.py
index 2142e90..f2dbba4 100644
--- a/scripts/loader_extension_generator.py
+++ b/scripts/loader_extension_generator.py
@@ -49,6 +49,8 @@
AVOID_EXT_NAMES = ['VK_EXT_debug_report']
+NULL_CHECK_EXT_NAMES= ['VK_EXT_debug_utils']
+
AVOID_CMD_NAMES = ['vkCreateDebugUtilsMessengerEXT',
'vkDestroyDebugUtilsMessengerEXT',
'vkSubmitDebugUtilsMessageEXT']
@@ -1011,6 +1013,8 @@
funcs += ' local_tag_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n'
funcs += ' }\n'
+ if ext_cmd.ext_name in NULL_CHECK_EXT_NAMES:
+ funcs += ' if (disp->' + base_name + ' != NULL) {\n'
funcs += return_prefix
funcs += 'disp->'
funcs += base_name
@@ -1031,6 +1035,11 @@
count += 1
funcs += ');\n'
+ if ext_cmd.ext_name in NULL_CHECK_EXT_NAMES:
+ if ext_cmd.return_type != None:
+ funcs += ' } else {\n'
+ funcs += ' return VK_SUCCESS;\n'
+ funcs += ' }\n'
funcs += '}\n\n'
funcs += term_header
@@ -1245,6 +1254,8 @@
funcs += ext_cmd.params[0].name
funcs += ');\n'
+ if ext_cmd.ext_name in NULL_CHECK_EXT_NAMES:
+ funcs += ' if (disp->' + base_name + ' != NULL) {\n'
funcs += return_prefix
funcs += 'disp->'
funcs += base_name
@@ -1256,6 +1267,11 @@
funcs += param.name
count += 1
funcs += ');\n'
+ if ext_cmd.ext_name in NULL_CHECK_EXT_NAMES:
+ if ext_cmd.return_type != None:
+ funcs += ' } else {\n'
+ funcs += ' return VK_SUCCESS;\n'
+ funcs += ' }\n'
funcs += '}\n\n'
if ext_cmd.protect is not None: