From 212a7314c38591ec14c6e1f19234c659c3b3a2c5 Mon Sep 17 00:00:00 2001 From: Iason Paraskevopoulos Date: Thu, 30 Sep 2021 17:24:42 +0100 Subject: [PATCH] Update json manifest Updates the api_version to 1.2 in the json manifest. Also, adds the entrypoints node in the device extensions as it is mandated by the loader's documentation when an extension adds Vulkan API functions. Removes support for intercepting vkEnumerateInstanceLayerProperties, vkEnumerateInstanceExtensionProperties and vkEnumerateDeviceExtensionProperties as the loader can get the information they provide from the layer's json manifest in its terminator functions. Change-Id: I2c304d1d2ea17d3ea0c723694f8fc4c8a92054a0 Signed-off-by: Iason Paraskevopoulos --- layer/VkLayer_window_system_integration.json | 26 +++--- layer/layer.cpp | 84 +------------------- 2 files changed, 16 insertions(+), 94 deletions(-) diff --git a/layer/VkLayer_window_system_integration.json b/layer/VkLayer_window_system_integration.json index 4bdeeaa..c6e3703 100644 --- a/layer/VkLayer_window_system_integration.json +++ b/layer/VkLayer_window_system_integration.json @@ -4,25 +4,29 @@ "name": "VK_LAYER_window_system_integration", "type": "GLOBAL", "library_path": "./libVkLayer_window_system_integration.so", - "api_version": "1.0.68", + "api_version": "1.2.191", "implementation_version": "1", "description": "Window system integration layer", - "functions": { - "vkGetInstanceProcAddr": "wsi_layer_vkGetInstanceProcAddr", - "vkGetDeviceProcAddr": "wsi_layer_vkGetDeviceProcAddr" - }, - "pre_instance_functions" : { - "vkEnumerateInstanceExtensionProperties" : "wsi_layer_vkEnumerateInstanceExtensionProperties" - }, "instance_extensions": [ {"name" : "VK_EXT_headless_surface", "spec_version" : "1"}, - {"name" : "VK_KHR_wayland_surface", "spec_version" : "1"}, - {"name" : "VK_KHR_surface", "spec_version" : "1"} + {"name" : "VK_KHR_wayland_surface", "spec_version" : "6"}, + {"name" : "VK_KHR_surface", "spec_version" : "25"} ], "device_extensions": [ { "name" : "VK_KHR_swapchain", - "spec_version" : "1" + "spec_version" : "70", + "entrypoints": [ + "vkAcquireNextImageKHR", + "vkCreateSwapchainKHR", + "vkDestroySwapchainKHR", + "vkGetSwapchainImagesKHR", + "vkQueuePresentKHR", + "vkAcquireNextImage2KHR", + "vkGetDeviceGroupPresentCapabilitiesKHR", + "vkGetDeviceGroupSurfacePresentModesKHR", + "vkGetPhysicalDevicePresentRectanglesKHR" + ] } ], "enable_environment": { diff --git a/layer/layer.cpp b/layer/layer.cpp index be2f2a1..e4208f1 100644 --- a/layer/layer.cpp +++ b/layer/layer.cpp @@ -36,63 +36,11 @@ #include "wsi/wsi_factory.hpp" #include "util/log.hpp" -#define VK_LAYER_API_VERSION VK_MAKE_VERSION(1, 0, VK_HEADER_VERSION) +#define VK_LAYER_API_VERSION VK_MAKE_VERSION(1, 2, VK_HEADER_VERSION) namespace layer { -static const VkLayerProperties global_layer = { - "VK_LAYER_window_system_integration", VK_LAYER_API_VERSION, 1, "Window system integration layer", -}; -static const VkExtensionProperties device_extension[] = { { VK_KHR_SWAPCHAIN_EXTENSION_NAME, - VK_KHR_SWAPCHAIN_SPEC_VERSION } }; -static const VkExtensionProperties instance_extension[] = { { VK_KHR_SURFACE_EXTENSION_NAME, - VK_KHR_SURFACE_SPEC_VERSION } }; - -VKAPI_ATTR VkResult extension_properties(const uint32_t count, const VkExtensionProperties *layer_ext, uint32_t *pCount, - VkExtensionProperties *pProp) -{ - uint32_t size; - - if (pProp == NULL || layer_ext == NULL) - { - *pCount = count; - return VK_SUCCESS; - } - - size = *pCount < count ? *pCount : count; - memcpy(pProp, layer_ext, size * sizeof(*pProp)); - *pCount = size; - if (size < count) - { - return VK_INCOMPLETE; - } - - return VK_SUCCESS; -} - -VKAPI_ATTR VkResult layer_properties(const uint32_t count, const VkLayerProperties *layer_prop, uint32_t *pCount, - VkLayerProperties *pProp) -{ - uint32_t size; - - if (pProp == NULL || layer_prop == NULL) - { - *pCount = count; - return VK_SUCCESS; - } - - size = *pCount < count ? *pCount : count; - memcpy(pProp, layer_prop, size * sizeof(*pProp)); - *pCount = size; - if (size < count) - { - return VK_INCOMPLETE; - } - - return VK_SUCCESS; -} - VKAPI_ATTR VkLayerInstanceCreateInfo *get_chain_info(const VkInstanceCreateInfo *pCreateInfo, VkLayerFunction func) { VkLayerInstanceCreateInfo *chain_info = (VkLayerInstanceCreateInfo *)pCreateInfo->pNext; @@ -395,34 +343,6 @@ vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct return VK_SUCCESS; } -VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL wsi_layer_vkEnumerateDeviceExtensionProperties( - VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pCount, VkExtensionProperties *pProperties) -{ - if (pLayerName && !strcmp(pLayerName, layer::global_layer.layerName)) - return layer::extension_properties(1, layer::device_extension, pCount, pProperties); - - assert(physicalDevice); - return layer::instance_private_data::get(physicalDevice) - .disp.EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties); -} - -VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL wsi_layer_vkEnumerateInstanceExtensionProperties( - const VkEnumerateInstanceExtensionPropertiesChain *chain, const char *pLayerName, - uint32_t *pCount, VkExtensionProperties *pProperties) -{ - if (pLayerName && !strcmp(pLayerName, layer::global_layer.layerName)) - return layer::extension_properties(1, layer::instance_extension, pCount, pProperties); - - assert(chain); - return chain->CallDown(pLayerName, pCount, pProperties); -} - -VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL -wsi_layer_vkEnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) -{ - return layer::layer_properties(1, &layer::global_layer, pCount, pProperties); -} - #define GET_PROC_ADDR(func) \ if (!strcmp(funcName, #func)) \ return (PFN_vkVoidFunction)&wsi_layer_##func; @@ -464,8 +384,6 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL wsi_layer_vkGetInstance GET_PROC_ADDR(vkGetPhysicalDeviceSurfaceFormatsKHR); GET_PROC_ADDR(vkGetPhysicalDeviceSurfacePresentModesKHR); GET_PROC_ADDR(vkDestroySurfaceKHR); - GET_PROC_ADDR(vkEnumerateDeviceExtensionProperties); - GET_PROC_ADDR(vkEnumerateInstanceLayerProperties); GET_PROC_ADDR(vkGetPhysicalDevicePresentRectanglesKHR);