| // Copyright 2013 The Flutter Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "vulkan_surface.h" | 
 |  | 
 | #include "vulkan_application.h" | 
 | #include "vulkan_native_surface.h" | 
 |  | 
 | namespace vulkan { | 
 |  | 
 | VulkanSurface::VulkanSurface( | 
 |     VulkanProcTable& p_vk,           // NOLINT | 
 |     VulkanApplication& application,  // NOLINT | 
 |     std::unique_ptr<VulkanNativeSurface> native_surface) | 
 |     : vk(p_vk), | 
 |       application_(application), | 
 |       native_surface_(std::move(native_surface)), | 
 |       valid_(false) { | 
 |   if (native_surface_ == nullptr || !native_surface_->IsValid()) { | 
 |     FML_DLOG(INFO) << "Native surface was invalid."; | 
 |     return; | 
 |   } | 
 |  | 
 |   VkSurfaceKHR surface = | 
 |       native_surface_->CreateSurfaceHandle(vk, application.GetInstance()); | 
 |  | 
 |   if (surface == VK_NULL_HANDLE) { | 
 |     FML_DLOG(INFO) << "Could not create the surface handle."; | 
 |     return; | 
 |   } | 
 |  | 
 |   surface_ = VulkanHandle<VkSurfaceKHR>{ | 
 |       surface, [this](VkSurfaceKHR surface) { | 
 |         vk.DestroySurfaceKHR(application_.GetInstance(), surface, nullptr); | 
 |       }}; | 
 |  | 
 |   valid_ = true; | 
 | } | 
 |  | 
 | VulkanSurface::~VulkanSurface() = default; | 
 |  | 
 | bool VulkanSurface::IsValid() const { | 
 |   return valid_; | 
 | } | 
 |  | 
 | const VulkanHandle<VkSurfaceKHR>& VulkanSurface::Handle() const { | 
 |   return surface_; | 
 | } | 
 |  | 
 | const VulkanNativeSurface& VulkanSurface::GetNativeSurface() const { | 
 |   return *native_surface_; | 
 | } | 
 |  | 
 | SkISize VulkanSurface::GetSize() const { | 
 |   return valid_ ? native_surface_->GetSize() : SkISize::Make(0, 0); | 
 | } | 
 |  | 
 | }  // namespace vulkan |