Start setting up vulkan_init_context for multiple WSI types

This commit is contained in:
twinaphex 2016-02-19 12:04:56 +01:00
parent 1c412eea5a
commit 6fcd097e4c
1 changed files with 35 additions and 24 deletions

View File

@ -477,7 +477,8 @@ static void vulkan_destroy_context(gfx_ctx_vulkan_data_t *vk, bool destroy_surfa
} }
} }
static bool vulkan_init_context(gfx_ctx_vulkan_data_t *vk) static bool vulkan_init_context(gfx_ctx_vulkan_data_t *vk,
enum vulkan_wsi_type type)
{ {
unsigned i; unsigned i;
uint32_t queue_count; uint32_t queue_count;
@ -583,28 +584,38 @@ static bool vulkan_init_context(gfx_ctx_vulkan_data_t *vk)
vkGetDeviceQueue(vk->context.device, vkGetDeviceQueue(vk->context.device,
vk->context.graphics_queue_index, 0, &vk->context.queue); vk->context.graphics_queue_index, 0, &vk->context.queue);
VK_GET_INSTANCE_PROC_ADDR(vk, switch (type)
vk->context.instance, GetPhysicalDeviceSurfaceSupportKHR); {
VK_GET_INSTANCE_PROC_ADDR(vk, case VULKAN_WSI_WAYLAND:
vk->context.instance, GetPhysicalDeviceSurfaceCapabilitiesKHR); #ifdef HAVE_WAYLAND
VK_GET_INSTANCE_PROC_ADDR(vk, VK_GET_INSTANCE_PROC_ADDR(vk,
vk->context.instance, GetPhysicalDeviceSurfaceFormatsKHR); vk->context.instance, GetPhysicalDeviceSurfaceSupportKHR);
VK_GET_INSTANCE_PROC_ADDR(vk, VK_GET_INSTANCE_PROC_ADDR(vk,
vk->context.instance, GetPhysicalDeviceSurfacePresentModesKHR); vk->context.instance, GetPhysicalDeviceSurfaceCapabilitiesKHR);
VK_GET_INSTANCE_PROC_ADDR(vk, VK_GET_INSTANCE_PROC_ADDR(vk,
vk->context.instance, CreateWaylandSurfaceKHR); vk->context.instance, GetPhysicalDeviceSurfaceFormatsKHR);
VK_GET_INSTANCE_PROC_ADDR(vk, VK_GET_INSTANCE_PROC_ADDR(vk,
vk->context.instance, DestroySurfaceKHR); vk->context.instance, GetPhysicalDeviceSurfacePresentModesKHR);
VK_GET_DEVICE_PROC_ADDR(vk, VK_GET_INSTANCE_PROC_ADDR(vk,
vk->context.device, CreateSwapchainKHR); vk->context.instance, CreateWaylandSurfaceKHR);
VK_GET_DEVICE_PROC_ADDR(vk, VK_GET_INSTANCE_PROC_ADDR(vk,
vk->context.device, DestroySwapchainKHR); vk->context.instance, DestroySurfaceKHR);
VK_GET_DEVICE_PROC_ADDR(vk, VK_GET_DEVICE_PROC_ADDR(vk,
vk->context.device, GetSwapchainImagesKHR); vk->context.device, CreateSwapchainKHR);
VK_GET_DEVICE_PROC_ADDR(vk, VK_GET_DEVICE_PROC_ADDR(vk,
vk->context.device, AcquireNextImageKHR); vk->context.device, DestroySwapchainKHR);
VK_GET_DEVICE_PROC_ADDR(vk, VK_GET_DEVICE_PROC_ADDR(vk,
vk->context.device, QueuePresentKHR); vk->context.device, GetSwapchainImagesKHR);
VK_GET_DEVICE_PROC_ADDR(vk,
vk->context.device, AcquireNextImageKHR);
VK_GET_DEVICE_PROC_ADDR(vk,
vk->context.device, QueuePresentKHR);
#endif
break;
case VULKAN_WSI_NONE:
default:
break;
}
vk->context.queue_lock = slock_new(); vk->context.queue_lock = slock_new();
if (!vk->context.queue_lock) if (!vk->context.queue_lock)
@ -757,7 +768,7 @@ static void *gfx_ctx_wl_init(void *video_driver)
break; break;
case GFX_CTX_VULKAN_API: case GFX_CTX_VULKAN_API:
#ifdef HAVE_VULKAN #ifdef HAVE_VULKAN
if (!vulkan_init_context(&wl->vk)) if (!vulkan_init_context(&wl->vk, VULKAN_WSI_WAYLAND))
goto error; goto error;
#endif #endif
break; break;