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 | |
| 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.
| -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"); |
