| // 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 |