diff options
Diffstat (limited to 'layers/threading.cpp')
| -rw-r--r-- | layers/threading.cpp | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/layers/threading.cpp b/layers/threading.cpp index 2de00522..f5d37eba 100644 --- a/layers/threading.cpp +++ b/layers/threading.cpp @@ -176,6 +176,24 @@ static inline PFN_vkVoidFunction layer_intercept_proc(const char *name) { return NULL; } +VKAPI_ATTR VkResult VKAPI_CALL +EnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) { + return util_GetLayerProperties(1, &layerProps, pCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL +EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, VkLayerProperties *pProperties) { + return util_GetLayerProperties(1, &layerProps, pCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL +EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount, VkExtensionProperties *pProperties) { + if (pLayerName && !strcmp(pLayerName, layerProps.layerName)) + return util_GetExtensionProperties(1, threading_extensions, pCount, pProperties); + + return VK_ERROR_LAYER_NOT_PRESENT; +} + VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pCount, VkExtensionProperties *pProperties) { @@ -194,16 +212,17 @@ static inline PFN_vkVoidFunction layer_intercept_instance_proc(const char *name) if (!name || name[0] != 'v' || name[1] != 'k') return NULL; - // we should never be queried for these commands - assert(strcmp(name, "vkEnumerateInstanceLayerProperties") && - strcmp(name, "vkEnumerateInstanceExtensionProperties") && - strcmp(name, "vkEnumerateDeviceLayerProperties")); - name += 2; if (!strcmp(name, "CreateInstance")) return (PFN_vkVoidFunction)CreateInstance; if (!strcmp(name, "DestroyInstance")) return (PFN_vkVoidFunction)DestroyInstance; + if (!strcmp(name, "EnumerateInstanceLayerProperties")) + return (PFN_vkVoidFunction)EnumerateInstanceLayerProperties; + if (!strcmp(name, "EnumerateInstanceExtensionProperties")) + return (PFN_vkVoidFunction)EnumerateInstanceExtensionProperties; + if (!strcmp(name, "EnumerateDeviceLayerProperties")) + return (PFN_vkVoidFunction)EnumerateDeviceLayerProperties; if (!strcmp(name, "EnumerateDeviceExtensionProperties")) return (PFN_vkVoidFunction)EnumerateDeviceExtensionProperties; if (!strcmp(name, "CreateDevice")) @@ -351,26 +370,30 @@ vkDebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebu threading::DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg); } -// loader-layer interface v0 +// loader-layer interface v0, just wrappers since there is only a layer VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount, VkExtensionProperties *pProperties) { - return util_GetExtensionProperties(ARRAY_SIZE(threading::threading_extensions), threading::threading_extensions, pCount, pProperties); + return threading::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties); } -VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) { - return util_GetLayerProperties(1, &threading::layerProps, pCount, pProperties); +VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkEnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) { + return threading::EnumerateInstanceLayerProperties(pCount, pProperties); } VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, VkLayerProperties *pProperties) { - return util_GetLayerProperties(1, &threading::layerProps, pCount, pProperties); + // the layer command handles VK_NULL_HANDLE just fine internally + assert(physicalDevice == VK_NULL_HANDLE); + return threading::EnumerateDeviceLayerProperties(VK_NULL_HANDLE, pCount, pProperties); } VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pCount, VkExtensionProperties *pProperties) { - // the layer command handles VK_NULL_HANDLE just fine + // the layer command handles VK_NULL_HANDLE just fine internally + assert(physicalDevice == VK_NULL_HANDLE); return threading::EnumerateDeviceExtensionProperties(VK_NULL_HANDLE, pLayerName, pCount, pProperties); } @@ -379,14 +402,5 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkD } VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { - if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties")) - return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceLayerProperties); - if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties")) - return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties); - if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties")) - return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceExtensionProperties); - if (!strcmp(funcName, "vkGetInstanceProcAddr")) - return reinterpret_cast<PFN_vkVoidFunction>(vkGetInstanceProcAddr); - return threading::GetInstanceProcAddr(instance, funcName); } |
