|  | // Copyright 2017 The Chromium 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 "flutter/vulkan/vulkan_native_surface_magma.h" | 
|  |  | 
|  | namespace vulkan { | 
|  |  | 
|  | VulkanNativeSurfaceMagma::VulkanNativeSurfaceMagma() = default; | 
|  |  | 
|  | VulkanNativeSurfaceMagma::VulkanNativeSurfaceMagma(int32_t width, | 
|  | int32_t height) { | 
|  | size_ = SkISize::Make(width, height); | 
|  | } | 
|  |  | 
|  | VulkanNativeSurfaceMagma::~VulkanNativeSurfaceMagma() = default; | 
|  |  | 
|  | const char* VulkanNativeSurfaceMagma::GetExtensionName() const { | 
|  | return VK_KHR_MAGMA_SURFACE_EXTENSION_NAME; | 
|  | } | 
|  |  | 
|  | uint32_t VulkanNativeSurfaceMagma::GetSkiaExtensionName() const { | 
|  | // There is no counterpart in Skia that recognizes the Magma extension name. | 
|  | // However, Flutter handles all setup anyway, so this is unnecessary. | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | VkSurfaceKHR VulkanNativeSurfaceMagma::CreateSurfaceHandle( | 
|  | vulkan::VulkanProcTable& vk, | 
|  | const vulkan::VulkanHandle<VkInstance>& instance) const { | 
|  | if (!vk.IsValid() || !instance) { | 
|  | return VK_NULL_HANDLE; | 
|  | } | 
|  |  | 
|  | const VkMagmaSurfaceCreateInfoKHR create_info = { | 
|  | .sType = VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR, | 
|  | .pNext = nullptr, | 
|  | }; | 
|  |  | 
|  | VkSurfaceKHR surface = VK_NULL_HANDLE; | 
|  |  | 
|  | if (VK_CALL_LOG_ERROR(vk.CreateMagmaSurfaceKHR( | 
|  | instance, &create_info, nullptr /* allocator */, &surface)) != | 
|  | VK_SUCCESS) { | 
|  | return VK_NULL_HANDLE; | 
|  | } | 
|  |  | 
|  | return surface; | 
|  | } | 
|  |  | 
|  | bool VulkanNativeSurfaceMagma::IsValid() const { | 
|  | // vkCreateMagmaSurfaceKHR doesn't actually take a native handle. So there is | 
|  | // nothing to check the validity of. | 
|  | return true; | 
|  | } | 
|  |  | 
|  | SkISize VulkanNativeSurfaceMagma::GetSize() const { | 
|  | if (size_.width() != 0 && size_.height() != 0) { | 
|  | return size_; | 
|  | } else { | 
|  | // TODO: Don't hardcode this after we get a proper Fuchsia Display API. | 
|  | return SkISize::Make(2160, 1440); | 
|  | } | 
|  | } | 
|  |  | 
|  | }  // namespace vulkan |