From 092f98388d93c0dca662bdff885d050f5af822c0 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 11 Oct 2016 15:57:55 +1300 Subject: layers: Capture surface capabilities Signed-off-by: Chris Forbes --- layers/core_validation.cpp | 21 +++++++++++++++++++++ layers/core_validation.h | 2 ++ 2 files changed, 23 insertions(+) diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 4a081eac..f073e118 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -12083,6 +12083,25 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(VkInstance instance, const V #endif // VK_USE_PLATFORM_XLIB_KHR +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) { + auto instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), instance_layer_data_map); + + std::unique_lock lock(global_lock); + auto physical_device_state = getPhysicalDeviceState(instance_data, physicalDevice); + lock.unlock(); + + auto result = instance_data->dispatch_table.GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, + pSurfaceCapabilities); + + if (result == VK_SUCCESS) { + physical_device_state->vkGetPhysicalDeviceSurfaceCapabilitiesKHRState = QUERY_DETAILS; + physical_device_state->surfaceCapabilities = *pSurfaceCapabilities; + } + + return result; +} + VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackEXT *pMsgCallback) { @@ -12424,6 +12443,8 @@ intercept_khr_surface_command(const char *name, VkInstance instance) { #endif // VK_USE_PLATFORM_XLIB_KHR {"vkDestroySurfaceKHR", reinterpret_cast(DestroySurfaceKHR), &instance_layer_data::surfaceExtensionEnabled}, + {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", reinterpret_cast(GetPhysicalDeviceSurfaceCapabilitiesKHR), + &instance_layer_data::surfaceExtensionEnabled}, }; instance_layer_data *instance_data = nullptr; diff --git a/layers/core_validation.h b/layers/core_validation.h index 9d9769cf..58383eaf 100644 --- a/layers/core_validation.h +++ b/layers/core_validation.h @@ -216,9 +216,11 @@ struct PHYSICAL_DEVICE_STATE { CALL_STATE vkGetPhysicalDeviceLayerPropertiesState = UNCALLED; CALL_STATE vkGetPhysicalDeviceExtensionPropertiesState = UNCALLED; CALL_STATE vkGetPhysicalDeviceFeaturesState = UNCALLED; + CALL_STATE vkGetPhysicalDeviceSurfaceCapabilitiesKHRState = UNCALLED; VkPhysicalDeviceFeatures features = {}; VkPhysicalDevice phys_device = VK_NULL_HANDLE; std::vector queue_family_properties; + VkSurfaceCapabilitiesKHR surfaceCapabilities = {}; }; struct SURFACE_STATE { -- cgit v1.2.3