libvulkan: Only load driver functions for enabled extensions
Change-Id: I4105291bd42583a10420681b729f03ecd7a91724
(cherry picked from commit 1c77ae2acda376b791932beffcb931c378e8ee36)
diff --git a/vulkan/libvulkan/dispatch.tmpl b/vulkan/libvulkan/dispatch.tmpl
index 2770538..11ec697 100644
--- a/vulkan/libvulkan/dispatch.tmpl
+++ b/vulkan/libvulkan/dispatch.tmpl
@@ -319,19 +319,27 @@
¶
bool LoadDriverDispatchTable(VkInstance instance,
PFN_vkGetInstanceProcAddr get_proc_addr,
+ const InstanceExtensionSet& extensions,
DriverDispatchTable& dispatch) {«
bool success = true;
// clang-format off
{{range $f := AllCommands $}}
{{if (Macro "IsInstanceDispatched" $f)}}
{{if not (Macro "IsLoaderFunction" $f)}}
- dispatch.{{Macro "BaseName" $f}} = §
- reinterpret_cast<{{Macro "FunctionPtrName" $f}}>(§
- get_proc_addr(instance, "{{$f.Name}}"));
- if (UNLIKELY(!dispatch.{{Macro "BaseName" $f}})) {
- ALOGE("missing driver proc: %s", "{{$f.Name}}");
- success = false;
+ {{$ext := GetAnnotation $f "extension"}}
+ {{if $ext}}
+ if (extensions[{{Macro "ExtensionConstant" $ext}}]) {
+ {{end}}
+ dispatch.{{Macro "BaseName" $f}} = §
+ reinterpret_cast<{{Macro "FunctionPtrName" $f}}>(§
+ get_proc_addr(instance, "{{$f.Name}}"));
+ if (UNLIKELY(!dispatch.{{Macro "BaseName" $f}})) {
+ ALOGE("missing driver proc: %s", "{{$f.Name}}");
+ success = false;
+ }
+ {{if $ext}}
}
+ {{end}}
{{end}}
{{end}}
{{end}}
@@ -407,6 +415,20 @@
{{/*
-------------------------------------------------------------------------------
+ Map an extension name to InstanceExtension or DeviceExtension enum value
+-------------------------------------------------------------------------------
+*/}}
+{{define "ExtensionConstant"}}
+ {{$name := index $.Arguments 0}}
+ {{ if (eq $name "VK_KHR_surface")}}kKHR_surface
+ {{else if (eq $name "VK_KHR_android_surface")}}kKHR_android_surface
+ {{else if (eq $name "VK_EXT_debug_report")}}kEXT_debug_report
+ {{end}}
+{{end}}
+
+
+{{/*
+-------------------------------------------------------------------------------
Emits a function name without the "vk" prefix.
-------------------------------------------------------------------------------
*/}}