Fix VK_NV_external_memory_capabilities support

-Need to init the instance function pointer

-The function should gracefully fall back on
 drivers that don't support it.

Change-Id: I15b0c68028c8f5ad3b07342e255dbb4c37bb6f0a
diff --git a/loader/extensions.c b/loader/extensions.c
index 17190a4..e14ceb1 100644
--- a/loader/extensions.c
+++ b/loader/extensions.c
@@ -58,17 +58,27 @@
     VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags,
     VkExternalMemoryHandleTypeFlagsNV externalHandleType,
     VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties) {
-
     struct loader_physical_device *phys_dev =
         (struct loader_physical_device *)physicalDevice;
     struct loader_icd *icd = phys_dev->this_icd;
 
-    assert(icd->GetPhysicalDeviceExternalImageFormatPropertiesNV &&
-           "loader: null GetPhysicalDeviceExternalImageFormatPropertiesNV ICD "
-           "pointer");
+    if (!icd->GetPhysicalDeviceExternalImageFormatPropertiesNV) {
+        if (externalHandleType) {
+            return VK_ERROR_FORMAT_NOT_SUPPORTED;
+        }
 
-    if (!icd->GetPhysicalDeviceExternalImageFormatPropertiesNV)
-        return VK_ERROR_INITIALIZATION_FAILED;
+        if (!icd->GetPhysicalDeviceImageFormatProperties) {
+            return VK_ERROR_INITIALIZATION_FAILED;
+        }
+
+        pExternalImageFormatProperties->externalMemoryFeatures = 0;
+        pExternalImageFormatProperties->exportFromImportedHandleTypes = 0;
+        pExternalImageFormatProperties->compatibleHandleTypes = 0;
+
+        return icd->GetPhysicalDeviceImageFormatProperties(
+            phys_dev->phys_dev, format, type, tiling, usage, flags,
+            &pExternalImageFormatProperties->imageFormatProperties);
+    }
 
     return icd->GetPhysicalDeviceExternalImageFormatPropertiesNV(
         phys_dev->phys_dev, format, type, tiling, usage, flags,
diff --git a/loader/loader.c b/loader/loader.c
index a519e43..7f90ee4 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -1651,6 +1651,7 @@
 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
     LOOKUP_GIPA(GetPhysicalDeviceWaylandPresentationSupportKHR, false);
 #endif
+    LOOKUP_GIPA(GetPhysicalDeviceExternalImageFormatPropertiesNV, false);
 
 #undef LOOKUP_GIPA