diff options
| author | Jon Ashburn <jon@lunarg.com> | 2015-11-30 17:21:25 -0700 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2015-12-01 10:51:02 -0700 |
| commit | 2afb020a8a38f1dfc3a1fa13063b3a311a8f0e74 (patch) | |
| tree | 0733aac417d43c6a16522643bf1db777313ca557 /loader | |
| parent | f3466f68e6b4f81ada1b0bf42557e717cc32a7b5 (diff) | |
| download | usermoji-2afb020a8a38f1dfc3a1fa13063b3a311a8f0e74.tar.xz | |
loader: Add initialization of loader dispatch table for wsi device extensions
Since we had trampoline code for these, layers were getting skipped when called
thru the trampoline code.
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/loader.c | 9 | ||||
| -rw-r--r-- | loader/table_ops.h | 11 |
2 files changed, 15 insertions, 5 deletions
diff --git a/loader/loader.c b/loader/loader.c index df720c64..10473a67 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -959,12 +959,12 @@ static VkExtensionProperties *get_extension_property( } /* - * For global exenstions implemented within the loader (i.e. DEBUG_REPORT + * For global extensions implemented within the loader (i.e. DEBUG_REPORT * the extension must provide two entry points for the loader to use: * - "trampoline" entry point - this is the address returned by GetProcAddr * and will always do what's necessary to support a global call. * - "terminator" function - this function will be put at the end of the - * instance chain and will contain the necessary logica to call / process + * instance chain and will contain the necessary logic to call / process * the extension for the appropriate ICDs that are available. * There is no generic mechanism for including these functions, the references * must be placed into the appropriate loader entry points. @@ -3332,6 +3332,11 @@ VKAPI_ATTR VkResult VKAPI_CALL loader_CreateDevice( /* finally can call down the chain */ res = dev->loader_dispatch.core_dispatch.CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice); + /* initialize WSI device extensions as part of core dispatch since loader has + * dedicated trampoline code for these*/ + loader_init_device_extension_dispatch_table(&dev->loader_dispatch, + dev->loader_dispatch.core_dispatch.GetDeviceProcAddr, + *pDevice); dev->loader_dispatch.core_dispatch.CreateDevice = icd->CreateDevice; return res; diff --git a/loader/table_ops.h b/loader/table_ops.h index 98eebe5a..ed9f8d6f 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -169,9 +169,14 @@ static inline void loader_init_device_dispatch_table(struct loader_dev_dispatch_ table->CmdNextSubpass = (PFN_vkCmdNextSubpass) gpa(dev, "vkCmdNextSubpass"); table->CmdEndRenderPass = (PFN_vkCmdEndRenderPass) gpa(dev, "vkCmdEndRenderPass"); table->CmdExecuteCommands = (PFN_vkCmdExecuteCommands) gpa(dev, "vkCmdExecuteCommands"); -//TODO move into it's own table -//TODO also consider dropping trampoline code for these device level extensions entirely -// then don't need loader to know about these at all but then not queryable via GIPA + +} + +static inline void loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table, + PFN_vkGetDeviceProcAddr gpa, + VkDevice dev) +{ + VkLayerDispatchTable *table = &dev_table->core_dispatch; table->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR) gpa(dev, "vkAcquireNextImageKHR"); table->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR) gpa(dev, "vkCreateSwapchainKHR"); table->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR) gpa(dev, "vkDestroySwapchainKHR"); |
