[Impeller] Context VK can create vulkan surface from Android Native Window (flutter/engine#37214)

This commit is contained in:
Kaushik Iska 2022-11-01 18:10:44 -04:00 committed by GitHub
parent b85721b43d
commit f2ab65aa2d
2 changed files with 26 additions and 0 deletions

View File

@ -527,6 +527,28 @@ std::unique_ptr<Surface> ContextVK::AcquireSurface(size_t current_frame) {
return surface_producer_->AcquireSurface(current_frame);
}
#ifdef FML_OS_ANDROID
vk::UniqueSurfaceKHR ContextVK::CreateAndroidSurface(
ANativeWindow* window) const {
if (!instance_) {
return vk::UniqueSurfaceKHR{VK_NULL_HANDLE};
}
auto create_info = vk::AndroidSurfaceCreateInfoKHR().setWindow(window);
auto surface_res = instance_->createAndroidSurfaceKHRUnique(create_info);
if (surface_res.result != vk::Result::eSuccess) {
VALIDATION_LOG << "Could not create Android surface, error: "
<< vk::to_string(surface_res.result);
return vk::UniqueSurfaceKHR{VK_NULL_HANDLE};
}
return std::move(surface_res.value);
}
#endif // FML_OS_ANDROID
void ContextVK::SetupSwapchain(vk::UniqueSurfaceKHR surface) {
surface_ = std::move(surface);
auto present_queue_out = PickPresentQueue(physical_device_, *surface_);

View File

@ -66,6 +66,10 @@ class ContextVK final : public Context, public BackendCast<ContextVK, Context> {
std::shared_ptr<DescriptorPoolVK> GetDescriptorPool() const;
#ifdef FML_OS_ANDROID
vk::UniqueSurfaceKHR CreateAndroidSurface(ANativeWindow* window) const;
#endif // FML_OS_ANDROID
private:
std::shared_ptr<fml::ConcurrentTaskRunner> worker_task_runner_;
vk::UniqueInstance instance_;