// 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 "flutter/vulkan/vulkan_provider.h"

namespace vulkan {

vulkan::VulkanHandle<VkFence> VulkanProvider::CreateFence() {
  const VkFenceCreateInfo create_info = {
      .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
      .pNext = nullptr,
      .flags = 0,
  };
  VkFence fence;
  if (VK_CALL_LOG_ERROR(vk().CreateFence(vk_device(), &create_info, nullptr,
                                         &fence)) != VK_SUCCESS)
    return vulkan::VulkanHandle<VkFence>();

  return {fence, [this](VkFence fence) {
            vk().DestroyFence(vk_device(), fence, nullptr);
          }};
}

}  // namespace vulkan
