diff options
| author | Mark Young <marky@lunarg.com> | 2017-01-19 21:10:49 -0700 |
|---|---|---|
| committer | Lenny Komow <lenny@lunarg.com> | 2017-01-24 14:07:22 -0700 |
| commit | 82ea0b0103880d011ca679b14f0fc5542c5b2012 (patch) | |
| tree | 11be85261197447e58e046affecbd43c36b4a8d8 /layers/swapchain.cpp | |
| parent | 8fc3d170de6515c0d26fb6b17bd3b5e27711e607 (diff) | |
| download | usermoji-82ea0b0103880d011ca679b14f0fc5542c5b2012.tar.xz | |
loader: Update the loader to 1.0.39
Add new extensions for 1.0.39. Also, updated layers to include
minimal set of functionality for 1.0.39 extensions. Extensions include:
- VK_KHR_get_physical_device_properties2
- VK_KHR_shader_draw_parameters
- VK_EXT_direct_mode_display
- VK_EXT_display_surface_counter
- VK_EXT_display_control
Also, redo the LoaderAndLayerIf document.
Change-Id: I10412086da7a798afe832a3892e18f606259b5af
Diffstat (limited to 'layers/swapchain.cpp')
| -rw-r--r-- | layers/swapchain.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp index c7f1ca0f..80eefcd1 100644 --- a/layers/swapchain.cpp +++ b/layers/swapchain.cpp @@ -39,6 +39,8 @@ static std::mutex global_lock; // The following is for logging error messages: static std::unordered_map<void *, layer_data *> layer_data_map; +static uint32_t loader_layer_if_version = CURRENT_LOADER_LAYER_INTERFACE_VERSION; + static const VkExtensionProperties instance_extensions[] = {{VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION}}; static const VkLayerProperties swapchain_layer = { @@ -161,7 +163,6 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo *pCreat my_data->instance = *pInstance; my_data->instance_dispatch_table = new VkLayerInstanceDispatchTable; layer_init_instance_dispatch_table(*pInstance, my_data->instance_dispatch_table, fpGetInstanceProcAddr); - my_data->report_data = debug_report_create_instance(my_data->instance_dispatch_table, *pInstance, pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames); @@ -1366,6 +1367,18 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance return pTable->GetInstanceProcAddr(instance, funcName); } +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName) { + assert(instance); + + layer_data *my_data; + my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); + VkLayerInstanceDispatchTable *pTable = my_data->instance_dispatch_table; + + if (pTable->GetPhysicalDeviceProcAddr == NULL) + return NULL; + return pTable->GetPhysicalDeviceProcAddr(instance, funcName); +} + static PFN_vkVoidFunction intercept_core_instance_command(const char *name) { static const struct { const char *name; @@ -1376,6 +1389,7 @@ static PFN_vkVoidFunction intercept_core_instance_command(const char *name) { {"vkDestroyInstance", reinterpret_cast<PFN_vkVoidFunction>(DestroyInstance)}, {"vkCreateDevice", reinterpret_cast<PFN_vkVoidFunction>(CreateDevice)}, {"vkEnumeratePhysicalDevices", reinterpret_cast<PFN_vkVoidFunction>(EnumeratePhysicalDevices)}, + {"vk_layerGetPhysicalDeviceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceProcAddr)}, {"vkEnumerateInstanceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateInstanceLayerProperties)}, {"vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceLayerProperties)}, {"vkEnumerateInstanceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateInstanceExtensionProperties)}, @@ -1537,3 +1551,27 @@ 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) { return swapchain::GetInstanceProcAddr(instance, funcName); } + +VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_layerGetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName) { + return swapchain::GetPhysicalDeviceProcAddr(instance, funcName); +} + +VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct) { + assert(pVersionStruct != NULL); + assert(pVersionStruct->sType == LAYER_NEGOTIATE_INTERFACE_STRUCT); + + // Fill in the function pointers if our version is at least capable of having the structure contain them. + if (pVersionStruct->loaderLayerInterfaceVersion >= 2) { + pVersionStruct->pfnGetInstanceProcAddr = vkGetInstanceProcAddr; + pVersionStruct->pfnGetDeviceProcAddr = vkGetDeviceProcAddr; + pVersionStruct->pfnGetPhysicalDeviceProcAddr = vk_layerGetPhysicalDeviceProcAddr; + } + + if (pVersionStruct->loaderLayerInterfaceVersion < CURRENT_LOADER_LAYER_INTERFACE_VERSION) { + swapchain::loader_layer_if_version = pVersionStruct->loaderLayerInterfaceVersion; + } else if (pVersionStruct->loaderLayerInterfaceVersion > CURRENT_LOADER_LAYER_INTERFACE_VERSION) { + pVersionStruct->loaderLayerInterfaceVersion = CURRENT_LOADER_LAYER_INTERFACE_VERSION; + } + + return VK_SUCCESS; +} |
