From 353c421a5c421ee55b78bfb745756e4b0ac53a49 Mon Sep 17 00:00:00 2001
From: twinaphex <libretro@gmail.com>
Date: Fri, 19 Feb 2016 12:08:34 +0100
Subject: [PATCH] Add function pointer for vkCreateAndroidSurfaceKHR

---
 gfx/drivers_context/wayland_ctx.c | 53 +++++++++++++++++++------------
 1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/gfx/drivers_context/wayland_ctx.c b/gfx/drivers_context/wayland_ctx.c
index a0b7b2d37e..5f61b2521c 100644
--- a/gfx/drivers_context/wayland_ctx.c
+++ b/gfx/drivers_context/wayland_ctx.c
@@ -66,7 +66,12 @@ typedef struct gfx_ctx_vulkan_data
    PFN_vkGetSwapchainImagesKHR fpGetSwapchainImagesKHR;
    PFN_vkAcquireNextImageKHR fpAcquireNextImageKHR;
    PFN_vkQueuePresentKHR fpQueuePresentKHR;
+#ifdef ANDROID
+   PFN_vkCreateAndroidSurfaceKHR fpCreateAndroidSurfaceKHR;
+#endif
+#ifdef HAVE_WAYLAND
    PFN_vkCreateWaylandSurfaceKHR fpCreateWaylandSurfaceKHR;
+#endif
    PFN_vkDestroySurfaceKHR fpDestroySurfaceKHR;
 
    VkSurfaceKHR vk_surface;
@@ -584,32 +589,39 @@ static bool vulkan_init_context(gfx_ctx_vulkan_data_t *vk,
    vkGetDeviceQueue(vk->context.device,
          vk->context.graphics_queue_index, 0, &vk->context.queue);
 
+   VK_GET_INSTANCE_PROC_ADDR(vk,
+         vk->context.instance, GetPhysicalDeviceSurfaceSupportKHR);
+   VK_GET_INSTANCE_PROC_ADDR(vk,
+         vk->context.instance, GetPhysicalDeviceSurfaceCapabilitiesKHR);
+   VK_GET_INSTANCE_PROC_ADDR(vk,
+         vk->context.instance, GetPhysicalDeviceSurfaceFormatsKHR);
+   VK_GET_INSTANCE_PROC_ADDR(vk,
+         vk->context.instance, GetPhysicalDeviceSurfacePresentModesKHR);
+   VK_GET_INSTANCE_PROC_ADDR(vk,
+         vk->context.instance, DestroySurfaceKHR);
+   VK_GET_DEVICE_PROC_ADDR(vk,
+         vk->context.device, CreateSwapchainKHR);
+   VK_GET_DEVICE_PROC_ADDR(vk,
+         vk->context.device, DestroySwapchainKHR);
+   VK_GET_DEVICE_PROC_ADDR(vk,
+         vk->context.device, GetSwapchainImagesKHR);
+   VK_GET_DEVICE_PROC_ADDR(vk,
+         vk->context.device, AcquireNextImageKHR);
+   VK_GET_DEVICE_PROC_ADDR(vk,
+         vk->context.device, QueuePresentKHR);
+
    switch (type)
    {
       case VULKAN_WSI_WAYLAND:
 #ifdef HAVE_WAYLAND
-         VK_GET_INSTANCE_PROC_ADDR(vk,
-               vk->context.instance, GetPhysicalDeviceSurfaceSupportKHR);
-         VK_GET_INSTANCE_PROC_ADDR(vk,
-               vk->context.instance, GetPhysicalDeviceSurfaceCapabilitiesKHR);
-         VK_GET_INSTANCE_PROC_ADDR(vk,
-               vk->context.instance, GetPhysicalDeviceSurfaceFormatsKHR);
-         VK_GET_INSTANCE_PROC_ADDR(vk,
-               vk->context.instance, GetPhysicalDeviceSurfacePresentModesKHR);
          VK_GET_INSTANCE_PROC_ADDR(vk,
                vk->context.instance, CreateWaylandSurfaceKHR);
+#endif
+         break;
+      case VULKAN_WSI_ANDROID:
+#ifdef ANDROID
          VK_GET_INSTANCE_PROC_ADDR(vk,
-               vk->context.instance, DestroySurfaceKHR);
-         VK_GET_DEVICE_PROC_ADDR(vk,
-               vk->context.device, CreateSwapchainKHR);
-         VK_GET_DEVICE_PROC_ADDR(vk,
-               vk->context.device, DestroySwapchainKHR);
-         VK_GET_DEVICE_PROC_ADDR(vk,
-               vk->context.device, GetSwapchainImagesKHR);
-         VK_GET_DEVICE_PROC_ADDR(vk,
-               vk->context.device, AcquireNextImageKHR);
-         VK_GET_DEVICE_PROC_ADDR(vk,
-               vk->context.device, QueuePresentKHR);
+               vk->context.instance, CreateAndroidSurfaceKHR);
 #endif
          break;
       case VULKAN_WSI_NONE:
@@ -956,8 +968,7 @@ static bool vulkan_surface_create(gfx_ctx_vulkan_data_t *vk,
             surf_info.flags  = 0;
             surf_info.window = (ANativeWindow*)surface;
 
-            /* TODO - should go through function pointer */
-            if (vktsCreateAndroidSurfaceKHR(vk->context.instance,
+            if (vk->fpCreateAndroidSurfaceKHR(vk->context.instance,
                      &surf_info, NULL, &vk->vk_surface) != VK_SUCCESS)
                return false;