From 4f1ab39a5a1e95e11003a35c2c0c775f7466a425 Mon Sep 17 00:00:00 2001 From: James Jones Date: Thu, 18 Aug 2016 23:41:19 +0100 Subject: 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 --- loader/extensions.c | 22 ++++++++++++++++------ loader/loader.c | 1 + 2 files changed, 17 insertions(+), 6 deletions(-) (limited to 'loader') diff --git a/loader/extensions.c b/loader/extensions.c index 17190a4b..e14ceb19 100644 --- a/loader/extensions.c +++ b/loader/extensions.c @@ -58,17 +58,27 @@ terminator_GetPhysicalDeviceExternalImageFormatPropertiesNV( 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->GetPhysicalDeviceImageFormatProperties) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + pExternalImageFormatProperties->externalMemoryFeatures = 0; + pExternalImageFormatProperties->exportFromImportedHandleTypes = 0; + pExternalImageFormatProperties->compatibleHandleTypes = 0; - if (!icd->GetPhysicalDeviceExternalImageFormatPropertiesNV) - return VK_ERROR_INITIALIZATION_FAILED; + 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 a519e437..7f90ee48 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -1651,6 +1651,7 @@ static bool loader_icd_init_entrys(struct loader_icd *icd, VkInstance inst, #ifdef VK_USE_PLATFORM_WAYLAND_KHR LOOKUP_GIPA(GetPhysicalDeviceWaylandPresentationSupportKHR, false); #endif + LOOKUP_GIPA(GetPhysicalDeviceExternalImageFormatPropertiesNV, false); #undef LOOKUP_GIPA -- cgit v1.2.3