diff --git a/rpcs3/Emu/RSX/VK/VulkanAPI.h b/rpcs3/Emu/RSX/VK/VulkanAPI.h index 0cb493045c..b5317474f9 100644 --- a/rpcs3/Emu/RSX/VK/VulkanAPI.h +++ b/rpcs3/Emu/RSX/VK/VulkanAPI.h @@ -4,6 +4,8 @@ #define VK_USE_PLATFORM_WIN32_KHR #elif defined(__APPLE__) #define VK_USE_PLATFORM_MACOS_MVK +#elif defined(ANDROID) +#define VK_USE_PLATFORM_ANDROID_KHR #elif HAVE_X11 #define VK_USE_PLATFORM_XLIB_KHR #endif diff --git a/rpcs3/Emu/RSX/VK/vkutils/instance.cpp b/rpcs3/Emu/RSX/VK/vkutils/instance.cpp index 0527376e08..5df7eec5b6 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/instance.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/instance.cpp @@ -181,6 +181,13 @@ namespace vk found_surface_ext = true; } #endif //(WAYLAND) +#ifdef VK_USE_PLATFORM_ANDROID_KHR + if (support.is_supported(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME)) + { + extensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME); + found_surface_ext = true; + } +#endif if (!found_surface_ext) { rsx_log.error("Could not find a supported Vulkan surface extension"); diff --git a/rpcs3/Emu/RSX/VK/vkutils/swapchain_android.hpp b/rpcs3/Emu/RSX/VK/vkutils/swapchain_android.hpp index ccec22a383..9c59b8770c 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/swapchain_android.hpp +++ b/rpcs3/Emu/RSX/VK/vkutils/swapchain_android.hpp @@ -8,12 +8,17 @@ namespace vk using swapchain_ANDROID = native_swapchain_base; using swapchain_NATIVE = swapchain_ANDROID; - // TODO: Implement this [[maybe_unused]] static VkSurfaceKHR make_WSI_surface(VkInstance vk_instance, display_handle_t window_handle, WSI_config* /*config*/) { - return VK_NULL_HANDLE; + VkSurfaceKHR result = VK_NULL_HANDLE; + + VkWin32SurfaceCreateInfoKHR createInfo = {}; + createInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; + createInfo.window = std::get(window_handle); + + CHECK_RESULT(vkCreateAndroidSurfaceKHR(this->m_instance, &createInfo, nullptr, &result)); + return result; } #endif } - diff --git a/rpcs3/Emu/RSX/display.h b/rpcs3/Emu/RSX/display.h index 38c7e722b7..1cad84dba5 100644 --- a/rpcs3/Emu/RSX/display.h +++ b/rpcs3/Emu/RSX/display.h @@ -29,7 +29,7 @@ using display_handle_t = std::variant< #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) std::pair #elif defined(ANDROID) - void * + struct ANativeWindow * #endif >; #endif