// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/ozone/platform/headless/vulkan_surface_headless.h"

#include "base/logging.h"
#include "gpu/vulkan/vulkan_function_pointers.h"
#include "ui/gfx/native_ui_types.h"

namespace ui {

// static
std::unique_ptr<VulkanSurfaceHeadless> VulkanSurfaceHeadless::Create(
    VkInstance vk_instance,
    gfx::AcceleratedWidget widget) {
  VkSurfaceKHR vk_surface;
  const VkHeadlessSurfaceCreateInfoEXT surface_create_info = {
      .sType = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT,
      .pNext = nullptr,
      .flags = 0,
  };
  VkResult result = vkCreateHeadlessSurfaceEXT(
      vk_instance, &surface_create_info, nullptr, &vk_surface);
  if (VK_SUCCESS != result) {
    DLOG(ERROR) << "vkCreateHeadlessSurfaceEXT() failed: " << result;
    return nullptr;
  }
  return std::make_unique<VulkanSurfaceHeadless>(vk_instance, vk_surface,
                                                 widget);
}

VulkanSurfaceHeadless::VulkanSurfaceHeadless(VkInstance vk_instance,
                                             VkSurfaceKHR vk_surface,
                                             gfx::AcceleratedWidget widget)
    : gpu::VulkanSurface(vk_instance, widget, vk_surface) {}

}  // namespace ui
