aboutsummaryrefslogtreecommitdiff
path: root/loader
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2015-11-30 17:21:25 -0700
committerJon Ashburn <jon@lunarg.com>2015-12-01 10:51:02 -0700
commit2afb020a8a38f1dfc3a1fa13063b3a311a8f0e74 (patch)
tree0733aac417d43c6a16522643bf1db777313ca557 /loader
parentf3466f68e6b4f81ada1b0bf42557e717cc32a7b5 (diff)
downloadusermoji-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.c9
-rw-r--r--loader/table_ops.h11
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");