aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2015-11-25 17:55:49 -0700
committerJon Ashburn <jon@lunarg.com>2015-12-01 10:26:05 -0700
commitacf4589cedc97a4183061958ec2faf69e23bda8d (patch)
tree3d3bcc2dd5e80606c872904e4cea79bbc9a4af65
parenta456fd459b740a9b9c0b4b37f829676d48352950 (diff)
downloadusermoji-acf4589cedc97a4183061958ec2faf69e23bda8d.tar.xz
loader: Add terminator functions for Create*SurfaceKHR functions
These need to call down the chain for layer intercept. Also remove DestroySurfaceKHR from ICD table.
-rw-r--r--loader/loader.c13
-rw-r--r--loader/loader.h1
-rw-r--r--loader/wsi.c95
-rw-r--r--loader/wsi.h31
4 files changed, 133 insertions, 7 deletions
diff --git a/loader/loader.c b/loader/loader.c
index ce9b39ce..df720c64 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -116,23 +116,23 @@ const VkLayerInstanceDispatchTable instance_disp = {
.DbgCreateMsgCallback = loader_DbgCreateMsgCallback,
.DbgDestroyMsgCallback = loader_DbgDestroyMsgCallback,
#ifdef VK_USE_PLATFORM_MIR_KHR
- .CreateMirSurfaceKHR = vkCreateMirSurfaceKHR,
+ .CreateMirSurfaceKHR = loader_CreateMirSurfaceKHR,
.GetPhysicalDeviceMirPresentationSupportKHR = loader_GetPhysicalDeviceMirPresentationSupportKHR,
#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
- .CreateWaylandSurfaceKHR = vkCreateWaylandSurfaceKHR,
+ .CreateWaylandSurfaceKHR = loader_CreateWaylandSurfaceKHR,
.GetPhysicalDeviceWaylandPresentationSupportKHR = loader_GetPhysicalDeviceWaylandPresentationSupportKHR,
#endif
#ifdef VK_USE_PLATFORM_WIN32_KHR
- .CreateWin32SurfaceKHR = vkCreateWin32SurfaceKHR,
+ .CreateWin32SurfaceKHR = loader_CreateWin32SurfaceKHR,
.GetPhysicalDeviceWin32PresentationSupportKHR = loader_GetPhysicalDeviceWin32PresentationSupportKHR,
#endif
#ifdef VK_USE_PLATFORM_XCB_KHR
- .CreateXcbSurfaceKHR = vkCreateXcbSurfaceKHR,
+ .CreateXcbSurfaceKHR = loader_CreateXcbSurfaceKHR,
.GetPhysicalDeviceXcbPresentationSupportKHR = loader_GetPhysicalDeviceXcbPresentationSupportKHR,
#endif
#ifdef VK_USE_PLATFORM_XLIB_KHR
- .CreateXlibSurfaceKHR = vkCreateXlibSurfaceKHR,
+ .CreateXlibSurfaceKHR = loader_CreateXlibSurfaceKHR,
.GetPhysicalDeviceXlibPresentationSupportKHR = loader_GetPhysicalDeviceXlibPresentationSupportKHR,
#endif
};
@@ -1239,7 +1239,6 @@ static bool loader_icd_init_entrys(struct loader_icd *icd,
LOOKUP_GIPA(GetPhysicalDeviceSparseImageFormatProperties, true);
LOOKUP_GIPA(DbgCreateMsgCallback, false);
LOOKUP_GIPA(DbgDestroyMsgCallback, false);
- LOOKUP_GIPA(DestroySurfaceKHR, false);
LOOKUP_GIPA(GetPhysicalDeviceSurfaceSupportKHR, false);
LOOKUP_GIPA(GetPhysicalDeviceSurfaceCapabilitiesKHR, false);
LOOKUP_GIPA(GetPhysicalDeviceSurfaceFormatsKHR, false);
@@ -2613,6 +2612,8 @@ uint32_t loader_activate_instance_layers(struct loader_instance *inst)
nextObj = (void*) nextInstObj;
lib_handle = loader_add_layer_lib(inst, "instance", layer_prop);
+ if (!lib_handle)
+ continue; // TODO what should we do in this case
if ((nextGPA = layer_prop->functions.get_instance_proc_addr) == NULL) {
if (layer_prop->functions.str_gipa == NULL || strlen(layer_prop->functions.str_gipa) == 0) {
nextGPA = (PFN_vkGetInstanceProcAddr) loader_platform_get_proc_address(lib_handle, "vkGetInstanceProcAddr");
diff --git a/loader/loader.h b/loader/loader.h
index 7501c8ac..0c70f591 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -170,7 +170,6 @@ struct loader_icd {
PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback;
PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback;
- PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
diff --git a/loader/wsi.c b/loader/wsi.c
index ca257a5b..a9700cb0 100644
--- a/loader/wsi.c
+++ b/loader/wsi.c
@@ -473,6 +473,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface)
{
+ const VkLayerInstanceDispatchTable *disp;
+ disp = loader_get_instance_dispatch(instance);
+ VkResult res;
+
+ res = disp->CreateWin32SurfaceKHR(instance, hinstance, hwnd, pAllocator, pSurface);
+ return res;
+}
+
+/*
+ * This is the instance chain terminator function
+ * for CreateWin32SurfaceKHR
+ */
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateWin32SurfaceKHR(
+ VkInstance instance,
+ HINSTANCE hinstance,
+ HWND hwnd,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface)
+{
struct loader_instance *ptr_instance = loader_get_instance(instance);
VkIcdSurfaceWin32 *pIcdSurface = NULL;
@@ -546,6 +565,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR(
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface)
{
+ const VkLayerInstanceDispatchTable *disp;
+ disp = loader_get_instance_dispatch(instance);
+ VkResult res;
+
+ res = disp->CreateMirSurfaceKHR(instance, connection, mirSurface, pAllocator, pSurface);
+ return res;
+}
+
+/*
+ * This is the instance chain terminator function
+ * for CreateMirSurfaceKHR
+ */
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateMirSurfaceKHR(
+ VkInstance instance,
+ Display* dpy,
+ Window window,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface)
+{
struct loader_instance *ptr_instance = loader_get_instance(instance);
VkIcdSurfaceMir *pIcdSurface = NULL;
@@ -621,6 +659,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface)
{
+ const VkLayerInstanceDispatchTable *disp;
+ disp = loader_get_instance_dispatch(instance);
+ VkResult res;
+
+ res = disp->CreateWaylandSurfaceKHR(instance, display, surface, pAllocator, pSurface);
+ return res;
+}
+
+/*
+ * This is the instance chain terminator function
+ * for CreateXlibSurfaceKHR
+ */
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateWaylandSurfaceKHR(
+ VkInstance instance,
+ struct wl_display* display,
+ struct wl_surface* surface,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface)
+{
struct loader_instance *ptr_instance = loader_get_instance(instance);
VkIcdSurfaceWayland *pIcdSurface = NULL;
@@ -696,6 +753,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface)
{
+ const VkLayerInstanceDispatchTable *disp;
+ disp = loader_get_instance_dispatch(instance);
+ VkResult res;
+
+ res = disp->CreateXcbSurfaceKHR(instance, connection, window, pAllocator, pSurface);
+ return res;
+}
+
+/*
+ * This is the instance chain terminator function
+ * for CreateXcbSurfaceKHR
+ */
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateXcbSurfaceKHR(
+ VkInstance instance,
+ xcb_connection_t* connection,
+ xcb_window_t window,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface)
+{
struct loader_instance *ptr_instance = loader_get_instance(instance);
VkIcdSurfaceXcb *pIcdSurface = NULL;
@@ -775,6 +851,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface)
{
+ const VkLayerInstanceDispatchTable *disp;
+ disp = loader_get_instance_dispatch(instance);
+ VkResult res;
+
+ res = disp->CreateXlibSurfaceKHR(instance, dpy, window, pAllocator, pSurface);
+ return res;
+}
+
+/*
+ * This is the instance chain terminator function
+ * for CreateXlibSurfaceKHR
+ */
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateXlibSurfaceKHR(
+ VkInstance instance,
+ Display* dpy,
+ Window window,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface)
+{
struct loader_instance *ptr_instance = loader_get_instance(instance);
VkIcdSurfaceXlib *pIcdSurface = NULL;
diff --git a/loader/wsi.h b/loader/wsi.h
index 6418195d..67d133fd 100644
--- a/loader/wsi.h
+++ b/loader/wsi.h
@@ -67,23 +67,48 @@ VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfacePresentModesKHR(
VkPresentModeKHR* pPresentModes);
#ifdef VK_USE_PLATFORM_WIN32_KHR
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateWin32SurfaceKHR(
+ VkInstance instance,
+ HINSTANCE hinstance,
+ HWND hwnd,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceWin32PresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex);
#endif
#ifdef VK_USE_PLATFORM_MIR_KHR
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateMirSurfaceKHR(
+ VkInstance instance,
+ Display* dpy,
+ Window window,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceMirPresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
MirConnection* connection);
#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateWaylandSurfaceKHR(
+ VkInstance instance,
+ struct wl_display* display,
+ struct wl_surface* surface,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceWaylandPresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
struct wl_display* display);
#endif
#ifdef VK_USE_PLATFORM_XCB_KHR
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateXcbSurfaceKHR(
+ VkInstance instance,
+ xcb_connection_t* connection,
+ xcb_window_t window,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXcbPresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
@@ -91,6 +116,12 @@ VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXcbPresentationSupportKHR
xcb_visualid_t visual_id);
#endif
#ifdef VK_USE_PLATFORM_XLIB_KHR
+VKAPI_ATTR VkResult VKAPI_CALL loader_CreateXlibSurfaceKHR(
+ VkInstance instance,
+ Display* dpy,
+ Window window,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXlibPresentationSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,