From d17dd4b1ec0166f68ebb7c3955c1003136d688d3 Mon Sep 17 00:00:00 2001 From: Ian Elliott Date: Thu, 19 Nov 2015 16:05:09 -0700 Subject: loader: Add new vkGetPhysicalDeviceSurface*KHR() functions. - vkGetPhysicalDeviceSurfaceCapabilitiesKHR() - vkGetPhysicalDeviceSurfaceFormatsKHR() - vkGetPhysicalDeviceSurfacePresentModesKHR() --- loader/loader.c | 6 +++ loader/loader.h | 3 ++ loader/table_ops.h | 6 +++ loader/wsi.c | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++ loader/wsi.h | 17 +++++++ 5 files changed, 169 insertions(+) (limited to 'loader') diff --git a/loader/loader.c b/loader/loader.c index aef74e7a..eb47149e 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -108,6 +108,9 @@ const VkLayerInstanceDispatchTable instance_disp = { .EnumerateDeviceLayerProperties = loader_EnumerateDeviceLayerProperties, .GetPhysicalDeviceSparseImageFormatProperties = loader_GetPhysicalDeviceSparseImageFormatProperties, .GetPhysicalDeviceSurfaceSupportKHR = loader_GetPhysicalDeviceSurfaceSupportKHR, + .GetPhysicalDeviceSurfaceCapabilitiesKHR = loader_GetPhysicalDeviceSurfaceCapabilitiesKHR, + .GetPhysicalDeviceSurfaceFormatsKHR = loader_GetPhysicalDeviceSurfaceFormatsKHR, + .GetPhysicalDeviceSurfacePresentModesKHR = loader_GetPhysicalDeviceSurfacePresentModesKHR, .DbgCreateMsgCallback = loader_DbgCreateMsgCallback, .DbgDestroyMsgCallback = loader_DbgDestroyMsgCallback, }; @@ -1215,6 +1218,9 @@ static bool loader_icd_init_entrys(struct loader_icd *icd, LOOKUP_GIPA(DbgCreateMsgCallback, false); LOOKUP_GIPA(DbgDestroyMsgCallback, false); LOOKUP_GIPA(GetPhysicalDeviceSurfaceSupportKHR, false); + LOOKUP_GIPA(GetPhysicalDeviceSurfaceCapabilitiesKHR, false); + LOOKUP_GIPA(GetPhysicalDeviceSurfaceFormatsKHR, false); + LOOKUP_GIPA(GetPhysicalDeviceSurfacePresentModesKHR, false); #undef LOOKUP_GIPA diff --git a/loader/loader.h b/loader/loader.h index c6e64570..c83faa98 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -179,6 +179,9 @@ struct loader_icd { PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback; PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback; PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR; + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR; + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR; + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR; struct loader_icd *next; }; diff --git a/loader/table_ops.h b/loader/table_ops.h index 06b1acff..f3077817 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -507,6 +507,12 @@ static inline void *loader_lookup_instance_dispatch_table( return (void *) table->EnumerateDeviceLayerProperties; if (!strcmp(name, "GetPhysicalDeviceSurfaceSupportKHR")) return (void *) table->GetPhysicalDeviceSurfaceSupportKHR; + if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilitiesKHR")) + return (void *) table->GetPhysicalDeviceSurfaceCapabilitiesKHR; + if (!strcmp(name, "GetPhysicalDeviceSurfaceFormatsKHR")) + return (void *) table->GetPhysicalDeviceSurfaceFormatsKHR; + if (!strcmp(name, "GetPhysicalDeviceSurfacePresentModesKHR")) + return (void *) table->GetPhysicalDeviceSurfacePresentModesKHR; if (!strcmp(name, "DbgCreateMsgCallback")) return (void *) table->DbgCreateMsgCallback; if (!strcmp(name, "DbgDestroyMsgCallback")) diff --git a/loader/wsi.c b/loader/wsi.c index e65b4012..28d5dca4 100644 --- a/loader/wsi.c +++ b/loader/wsi.c @@ -239,6 +239,131 @@ VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceSupportKHR( pSupported); } +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceSurfaceCapabilitiesKHR + */ +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetPhysicalDeviceSurfaceCapabilitiesKHR( + physicalDevice, + surface, + pSurfaceCapabilities); + return res; +} + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceSurfaceCapabilitiesKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(pSurfaceCapabilities && "GetPhysicalDeviceSurfaceCapabilitiesKHR: Error, null pSurfaceCapabilities"); + + assert(icd->GetPhysicalDeviceSurfaceCapabilitiesKHR && "loader: null GetPhysicalDeviceSurfaceCapabilitiesKHR ICD pointer"); + + return icd->GetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev->phys_dev, + surface, + pSurfaceCapabilities); +} + +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceSurfaceFormatsKHR + */ +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormatKHR* pSurfaceFormats) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetPhysicalDeviceSurfaceFormatsKHR( + physicalDevice, + surface, + pSurfaceFormatCount, + pSurfaceFormats); + return res; +} + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceSurfaceFormatsKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceFormatsKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormatKHR* pSurfaceFormats) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(pSurfaceFormatCount && "GetPhysicalDeviceSurfaceFormatsKHR: Error, null pSurfaceFormatCount"); + + assert(icd->GetPhysicalDeviceSurfaceFormatsKHR && "loader: null GetPhysicalDeviceSurfaceFormatsKHR ICD pointer"); + + return icd->GetPhysicalDeviceSurfaceFormatsKHR(phys_dev->phys_dev, + surface, + pSurfaceFormatCount, + pSurfaceFormats); +} + +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceSurfacePresentModesKHR + */ +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetPhysicalDeviceSurfacePresentModesKHR( + physicalDevice, + surface, + pPresentModeCount, + pPresentModes); + return res; +} + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceSurfacePresentModesKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfacePresentModesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(pPresentModeCount && "GetPhysicalDeviceSurfacePresentModesKHR: Error, null pPresentModeCount"); + + assert(icd->GetPhysicalDeviceSurfacePresentModesKHR && "loader: null GetPhysicalDeviceSurfacePresentModesKHR ICD pointer"); + + return icd->GetPhysicalDeviceSurfacePresentModesKHR(phys_dev->phys_dev, + surface, + pPresentModeCount, + pPresentModes); +} + @@ -480,6 +605,18 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, *addr = ptr_instance->wsi_surface_enabled ? (void *) vkGetPhysicalDeviceSurfaceSupportKHR : NULL; return true; } + if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilitiesKHR", name)) { + *addr = ptr_instance->wsi_surface_enabled ? (void *) vkGetPhysicalDeviceSurfaceCapabilitiesKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceSurfaceFormatsKHR", name)) { + *addr = ptr_instance->wsi_surface_enabled ? (void *) vkGetPhysicalDeviceSurfaceFormatsKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceSurfacePresentModesKHR", name)) { + *addr = ptr_instance->wsi_surface_enabled ? (void *) vkGetPhysicalDeviceSurfacePresentModesKHR : NULL; + return true; + } #ifdef _WIN32 #ifdef VK_USE_PLATFORM_WIN32_KHR if (!strcmp("vkCreateWin32SurfaceKHR", name)) { diff --git a/loader/wsi.h b/loader/wsi.h index 958d69eb..db4c0738 100644 --- a/loader/wsi.h +++ b/loader/wsi.h @@ -43,3 +43,20 @@ VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceSupportKHR( uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported); + +VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); + +VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceFormatsKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormatKHR* pSurfaceFormats); + +VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfacePresentModesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); -- cgit v1.2.3