layers: Verify dev extension APIs enabled for GDPA

The layer chassis must return NULL for any device API whose parent
extension has not been enabled during CreateDevice().

Change-Id: Ic5e8508c0bf3559e69f9415bb006778a6a3cbdbe
diff --git a/scripts/layer_chassis_generator.py b/scripts/layer_chassis_generator.py
index 41bd5b8..1fc4e91 100644
--- a/scripts/layer_chassis_generator.py
+++ b/scripts/layer_chassis_generator.py
@@ -425,6 +425,9 @@
 
 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) {
     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
+    if (!ApiParentExtensionEnabled(funcName, layer_data->device_extension_set)) {
+        return nullptr;
+    }
     const auto &item = name_to_funcptr_map.find(funcName);
     if (item != name_to_funcptr_map.end()) {
         return reinterpret_cast<PFN_vkVoidFunction>(item->second);
@@ -597,6 +600,10 @@
 
     auto device_interceptor = GetLayerDataPtr(get_dispatch_key(*pDevice), layer_data_map);
     layer_init_device_dispatch_table(*pDevice, &device_interceptor->device_dispatch_table, fpGetDeviceProcAddr);
+    // Save pCreateInfo device extension list for GetDeviceProcAddr()
+    for (uint32_t extn = 0; extn < pCreateInfo->enabledExtensionCount; extn++) {
+        device_interceptor->device_extension_set.insert(pCreateInfo->ppEnabledExtensionNames[extn]);
+    }
     device_interceptor->device = *pDevice;
     device_interceptor->physical_device = gpu;
     device_interceptor->instance = instance_interceptor->instance;