From fff87f6cca6918c85f14c97d5f912f4b28013ce2 Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Thu, 31 Mar 2016 10:52:22 -0600 Subject: loader: Add device callback to set dispatchable object Change-Id: I5ca8f532e777e2cb0facf8fe5bab4c82409f8d37 --- loader/loader.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'loader/loader.c') diff --git a/loader/loader.c b/loader/loader.c index d44ca744..7786f147 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -271,6 +271,17 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSetInstanceDispatch(VkInstance instance, void * return VK_SUCCESS; } +VKAPI_ATTR VkResult VKAPI_CALL vkSetDeviceDispatch(VkDevice device, void *object) { + struct loader_device *dev; + struct loader_icd *icd = loader_get_icd_and_device(device, &dev); + + if (!icd) { + return VK_ERROR_INITIALIZATION_FAILED; + } + loader_set_dispatch(object, &dev->loader_dispatch); + return VK_SUCCESS; +} + #if defined(WIN32) static char *loader_get_next_path(char *path); /** @@ -3281,7 +3292,7 @@ VkResult loader_create_instance_chain(const VkInstanceCreateInfo *pCreateInfo, create_info_disp.sType = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO; - create_info_disp.function = VK_LOADER_DISPATCH_CALLBACK; + create_info_disp.function = VK_LOADER_DATA_CALLBACK; create_info_disp.u.pfnSetInstanceLoaderData = vkSetInstanceDispatch; @@ -3458,6 +3469,16 @@ VkResult loader_create_device_chain(const struct loader_physical_device_tramp *p PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)nextGIPA(inst->instance, "vkCreateDevice"); if (fpCreateDevice) { + VkLayerDeviceCreateInfo create_info_disp; + + create_info_disp.sType = + VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO; + create_info_disp.function = VK_LOADER_DATA_CALLBACK; + + create_info_disp.u.pfnSetDeviceLoaderData = vkSetDeviceDispatch; + + create_info_disp.pNext = loader_create_info.pNext; + loader_create_info.pNext = &create_info_disp; res = fpCreateDevice(pd->phys_dev, &loader_create_info, pAllocator, &created_device); dev->device = created_device; -- cgit v1.2.3