vulkan: fix vkGetDeviceProcAddr for intercepted commands
This allows vulkan::api::DestroyDevice to properly unreference layers.
Bug: 28077754
Change-Id: I194925d29dee3489b63f4a44669c791d378afa39
diff --git a/vulkan/libvulkan/code-generator.tmpl b/vulkan/libvulkan/code-generator.tmpl
index afe0d84..7517e91 100644
--- a/vulkan/libvulkan/code-generator.tmpl
+++ b/vulkan/libvulkan/code-generator.tmpl
@@ -529,11 +529,25 @@
std::binary_search(
known_non_device_names, known_non_device_names + count, pName,
[](const char* a, const char* b) { return (strcmp(a, b) < 0); })) {
- ALOGE("vkGetDeviceProcAddr called with %s", pName);
+ ALOGE("vkGetDeviceProcAddr called with %s", (pName) ? pName : "(null)");
return nullptr;
}
// clang-format off
¶
+ {{range $f := AllCommands $}}
+ {{if (Macro "IsDeviceDispatched" $f)}}
+ {{ if (Macro "api.IsIntercepted" $f)}}
+ if (strcmp(pName, "{{$f.Name}}") == 0) return §
+ reinterpret_cast<PFN_vkVoidFunction>(§
+ vulkan::api::{{Macro "BaseName" $f}});
+ {{else if eq $f.Name "vkGetDeviceProcAddr"}}
+ if (strcmp(pName, "{{$f.Name}}") == 0) return §
+ reinterpret_cast<PFN_vkVoidFunction>(§
+ {{$f.Name}});
+ {{end}}
+ {{end}}
+ {{end}}
+ ¶
{{end}}