// 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_skia_proc_table.h"

namespace vulkan {

GrVkGetProc CreateSkiaGetProc(const fml::RefPtr<vulkan::VulkanProcTable>& vk) {
  if (!vk || !vk->IsValid()) {
    return nullptr;
  }

  return [vk](const char* proc_name, VkInstance instance, VkDevice device) {
    if (device != VK_NULL_HANDLE) {
      auto result =
          vk->AcquireProc(proc_name, VulkanHandle<VkDevice>{device, nullptr});
      if (result != nullptr) {
        return result;
      }
    }

    return vk->AcquireProc(proc_name,
                           VulkanHandle<VkInstance>{instance, nullptr});
  };
}

}  // namespace vulkan
