From 507722b882df63f6c275d110060b3d4ad09665d1 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 14 Oct 2016 02:51:36 +0100 Subject: [PATCH] anv/wsi: split out surface creation to avoid instance API Reviewed-by: Jason Ekstrand --- src/intel/vulkan/anv_wsi_wayland.c | 34 +++++++++++------ src/intel/vulkan/anv_wsi_x11.c | 59 +++++++++++++++++++++--------- 2 files changed, 64 insertions(+), 29 deletions(-) diff --git a/src/intel/vulkan/anv_wsi_wayland.c b/src/intel/vulkan/anv_wsi_wayland.c index 16a96470fa0..fe43eb16220 100644 --- a/src/intel/vulkan/anv_wsi_wayland.c +++ b/src/intel/vulkan/anv_wsi_wayland.c @@ -422,20 +422,14 @@ wsi_wl_surface_get_present_modes(VkIcdSurfaceBase *surface, return VK_SUCCESS; } -VkResult anv_CreateWaylandSurfaceKHR( - VkInstance _instance, - const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +static VkResult anv_create_wl_surface(const VkAllocationCallbacks *pAllocator, + const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, + VkSurfaceKHR *pSurface) { - ANV_FROM_HANDLE(anv_instance, instance, _instance); - - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR); - VkIcdSurfaceWayland *surface; - surface = vk_alloc2(&instance->alloc, pAllocator, sizeof *surface, 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + surface = vk_alloc(pAllocator, sizeof *surface, 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (surface == NULL) return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); @@ -448,6 +442,24 @@ VkResult anv_CreateWaylandSurfaceKHR( return VK_SUCCESS; } +VkResult anv_CreateWaylandSurfaceKHR( + VkInstance _instance, + const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) +{ + ANV_FROM_HANDLE(anv_instance, instance, _instance); + const VkAllocationCallbacks *alloc; + assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR); + + if (pAllocator) + alloc = pAllocator; + else + alloc = &instance->alloc; + + return anv_create_wl_surface(alloc, pCreateInfo, pSurface); +} + struct wsi_wl_image { VkImage image; VkDeviceMemory memory; diff --git a/src/intel/vulkan/anv_wsi_x11.c b/src/intel/vulkan/anv_wsi_x11.c index f56df40b498..8bc54f23786 100644 --- a/src/intel/vulkan/anv_wsi_x11.c +++ b/src/intel/vulkan/anv_wsi_x11.c @@ -434,20 +434,14 @@ x11_surface_get_present_modes(VkIcdSurfaceBase *surface, return VK_SUCCESS; } -VkResult anv_CreateXcbSurfaceKHR( - VkInstance _instance, - const VkXcbSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +static VkResult anv_create_xcb_surface(const VkAllocationCallbacks *pAllocator, + const VkXcbSurfaceCreateInfoKHR *pCreateInfo, + VkSurfaceKHR *pSurface) { - ANV_FROM_HANDLE(anv_instance, instance, _instance); - - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR); - VkIcdSurfaceXcb *surface; - surface = vk_alloc2(&instance->alloc, pAllocator, sizeof *surface, 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + surface = vk_alloc(pAllocator, sizeof *surface, 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (surface == NULL) return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); @@ -456,24 +450,35 @@ VkResult anv_CreateXcbSurfaceKHR( surface->window = pCreateInfo->window; *pSurface = _VkIcdSurfaceBase_to_handle(&surface->base); - return VK_SUCCESS; } -VkResult anv_CreateXlibSurfaceKHR( +VkResult anv_CreateXcbSurfaceKHR( VkInstance _instance, - const VkXlibSurfaceCreateInfoKHR* pCreateInfo, + const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { ANV_FROM_HANDLE(anv_instance, instance, _instance); + const VkAllocationCallbacks *alloc; + assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR); - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR); + if (pAllocator) + alloc = pAllocator; + else + alloc = &instance->alloc; + return anv_create_xcb_surface(alloc, pCreateInfo, pSurface); +} + +static VkResult anv_create_xlib_surface(const VkAllocationCallbacks *pAllocator, + const VkXlibSurfaceCreateInfoKHR *pCreateInfo, + VkSurfaceKHR *pSurface) +{ VkIcdSurfaceXlib *surface; - surface = vk_alloc2(&instance->alloc, pAllocator, sizeof *surface, 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + surface = vk_alloc(pAllocator, sizeof *surface, 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (surface == NULL) return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); @@ -482,10 +487,28 @@ VkResult anv_CreateXlibSurfaceKHR( surface->window = pCreateInfo->window; *pSurface = _VkIcdSurfaceBase_to_handle(&surface->base); - return VK_SUCCESS; } +VkResult anv_CreateXlibSurfaceKHR( + VkInstance _instance, + const VkXlibSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) +{ + ANV_FROM_HANDLE(anv_instance, instance, _instance); + const VkAllocationCallbacks *alloc; + + assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR); + + if (pAllocator) + alloc = pAllocator; + else + alloc = &instance->alloc; + + return anv_create_xlib_surface(alloc, pCreateInfo, pSurface); +} + struct x11_image { VkImage image; VkDeviceMemory memory; -- 2.30.2