# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# To use the image pipe swapchain layer in a package, add a dependency on
# //src/lib/vulkan/swapchain
# in the package, import this .gni file, and append the loadable_module and
# resources entries from this scope to the package's scope.
#
# Example BUILD.gn file:
#
# import("//src/lib/vulkan/image_pipe_swapchain.gni")
#
# package("funky_swap_chain_example") {
#   loadable_modules = [
#     ...
#     ] + image_pipe_swapchain.loadable_modules
#
#   resources = [
#     ...
#     ] + image_pipe_swapchain.resources
#
#   public_deps = [
#     ...
#     ] + image_pipe_swapchain.public_deps
# }
image_pipe_swapchain = {
  loadable_modules = [
    {
      name = "VkLayer_image_pipe_swapchain.so"
    },
  ]
  resources = [
    {
      path = rebase_path("swapchain/VkLayer_image_pipe_swapchain.json")
      dest = "vulkan/explicit_layer.d/VkLayer_image_pipe_swapchain.json"
    },
  ]

  public_deps = [ "//src/lib/vulkan/swapchain" ]
}

image_pipe_swapchain_fb = {
  loadable_modules = [
    {
      name = "VkLayer_image_pipe_swapchain_fb.so"
    },
  ]
  resources = [
    {
      path = rebase_path("swapchain/VkLayer_image_pipe_swapchain_fb.json")
      dest = "vulkan/explicit_layer.d/VkLayer_image_pipe_swapchain_fb.json"
    },
  ]

  public_deps = [ "//src/lib/vulkan/swapchain:fb" ]
}

image_pipe_swapchain_fb_skip_present = {
  loadable_modules = [
    {
      name = "VkLayer_image_pipe_swapchain_fb_skip_present.so"
    },
  ]
  resources = [
    {
      path = rebase_path(
              "swapchain/VkLayer_image_pipe_swapchain_fb_skip_present.json")
      dest = "vulkan/explicit_layer.d/VkLayer_image_pipe_swapchain_fb_skip_present.json"
    },
  ]

  public_deps = [ "//src/lib/vulkan/swapchain:fb_skip_present" ]
}

image_pipe_swapchain_copy = {
  loadable_modules = [
    {
      name = "VkLayer_image_pipe_swapchain_copy.so"
    },
  ]
  resources = [
    {
      path = rebase_path("swapchain/VkLayer_image_pipe_swapchain_copy.json")
      dest = "vulkan/explicit_layer.d/VkLayer_image_pipe_swapchain_copy.json"
    },
  ]

  public_deps = [ "//src/lib/vulkan/swapchain:copy" ]
}
