intel: Separate extensions into global and device

To support splitting extensions into global and physical
device extensions need to keep some enable information
at the instance level. The intel_instance is a logical
place for that but is not accessible from all objects.
This patch replaces the icd pointer in intel_handle
with an instance pointer so that we can find the global
extension enable flags.
diff --git a/icd/intel/instance.c b/icd/intel/instance.c
index ecbca66..d9bc01e 100644
--- a/icd/intel/instance.c
+++ b/icd/intel/instance.c
@@ -164,22 +164,27 @@
     }
 
     memset(instance, 0, sizeof(*instance));
-    intel_handle_init(&instance->handle, VK_OBJECT_TYPE_INSTANCE, icd);
+    intel_handle_init(&instance->handle, VK_OBJECT_TYPE_INSTANCE, instance);
 
     instance->icd = icd;
 
     for (i = 0; i < info->extensionCount; i++) {
-        const enum intel_global_ext_type ext = intel_gpu_lookup_global_extension(NULL,
-                &info->pEnabledExtensions[i]);
+        const enum intel_global_ext_type ext = intel_gpu_lookup_global_extension(&info->pEnabledExtensions[i]);
 
-        if (ext != INTEL_GLOBAL_EXT_INVALID)
-            instance->exts[ext] = true;
+        if (ext != INTEL_GLOBAL_EXT_INVALID) {
+            instance->global_exts[ext] = true;
+        } else {
+            /* TODO: ICD should fail create if extensions are specified that
+             * ICD cannot satisfy. Except this messes with chaining!
+             * Seems that a chain needs to consume the enables it
+             * uses leaving only the ICD ones here.
+             */
+        }
     }
     return instance;
 }
 
 enum intel_global_ext_type intel_gpu_lookup_global_extension(
-        const struct intel_instance *instance,
         const VkExtensionProperties *ext)
 {
     enum intel_global_ext_type type;