From 9a6c7f0711a782aec86a94b1e1d9d71fd637cb68 Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Tue, 9 Jan 2018 15:38:14 -0500 Subject: [PATCH] Add support for Vulkan Loader and Validation Layer API version 5. Update to latest SPIRV-Cross and Vulkan-LVL versions. --- External/SPIRV-Cross | 2 +- External/Vulkan-LoaderAndValidationLayers | 2 +- MoltenVK/MoltenVK/Vulkan/vulkan.mm | 47 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/External/SPIRV-Cross b/External/SPIRV-Cross index 27d4af75..bcaa1f0e 160000 --- a/External/SPIRV-Cross +++ b/External/SPIRV-Cross @@ -1 +1 @@ -Subproject commit 27d4af75a0736849c046c5f068ecc80f17c1ed7e +Subproject commit bcaa1f0e3c5f6f31547f020d6f1d64a0a36879da diff --git a/External/Vulkan-LoaderAndValidationLayers b/External/Vulkan-LoaderAndValidationLayers index 62d8e875..54c67413 160000 --- a/External/Vulkan-LoaderAndValidationLayers +++ b/External/Vulkan-LoaderAndValidationLayers @@ -1 +1 @@ -Subproject commit 62d8e875b9f3c663dc6448c0db6f599df18711c2 +Subproject commit 54c674136a33dae33d378f734b174d7ec7ef633b diff --git a/MoltenVK/MoltenVK/Vulkan/vulkan.mm b/MoltenVK/MoltenVK/Vulkan/vulkan.mm index 1a8e5b2e..a4abd1b5 100644 --- a/MoltenVK/MoltenVK/Vulkan/vulkan.mm +++ b/MoltenVK/MoltenVK/Vulkan/vulkan.mm @@ -1576,3 +1576,50 @@ MVK_PUBLIC_SYMBOL VkResult vkCreate_PLATFORM_SurfaceMVK( *pSurface = (VkSurfaceKHR)mvkSrfc; return mvkSrfc->getConfigurationResult(); } + + +#pragma mark - +#pragma mark Loader and Layer ICD interface extension + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + + VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pSupportedVersion); + VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* name); + VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char* name); + +#ifdef __cplusplus +} +#endif // __cplusplus + + +MVK_PUBLIC_SYMBOL VkResult vk_icdNegotiateLoaderICDInterfaceVersion( + uint32_t* pSupportedVersion) { + + // This ICD expects to be loaded by a loader of at least version 5. + if (pSupportedVersion && *pSupportedVersion >= 5) { + *pSupportedVersion = 5; + return VK_SUCCESS; + } + + return VK_ERROR_INCOMPATIBLE_DRIVER; +} + +MVK_PUBLIC_SYMBOL PFN_vkVoidFunction vk_icdGetInstanceProcAddr( + VkInstance instance, + const char* pName) { + + if (strcmp(pName, "vk_icdNegotiateLoaderICDInterfaceVersion") == 0) { return (PFN_vkVoidFunction)vk_icdNegotiateLoaderICDInterfaceVersion; } + if (strcmp(pName, "vk_icdGetPhysicalDeviceProcAddr") == 0) { return (PFN_vkVoidFunction)vk_icdGetPhysicalDeviceProcAddr; } + + return vkGetInstanceProcAddr(instance, pName); +} + +MVK_PUBLIC_SYMBOL PFN_vkVoidFunction vk_icdGetPhysicalDeviceProcAddr( + VkInstance instance, + const char* pName) { + + return vk_icdGetInstanceProcAddr(instance, pName); +} +