# 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.

import("//flutter/vulkan/config.gni")
import("../../../tools/impeller.gni")

impeller_component("vulkan_unittests") {
  testonly = true
  sources = [
    "blit_command_vk_unittests.cc",
    "command_encoder_vk_unittests.cc",
    "command_pool_vk_unittests.cc",
    "context_vk_unittests.cc",
    "descriptor_pool_vk_unittests.cc",
    "fence_waiter_vk_unittests.cc",
    "pass_bindings_cache_unittests.cc",
    "resource_manager_vk_unittests.cc",
    "test/gpu_tracer_unittests.cc",
    "test/mock_vulkan.cc",
    "test/mock_vulkan.h",
    "test/mock_vulkan_unittests.cc",
  ]
  deps = [
    ":vulkan",
    "//flutter/testing:testing_lib",
  ]
}

impeller_component("vulkan") {
  sources = [
    "allocator_vk.cc",
    "allocator_vk.h",
    "android_hardware_buffer_texture_source_vk.cc",
    "android_hardware_buffer_texture_source_vk.h",
    "barrier_vk.cc",
    "barrier_vk.h",
    "binding_helpers_vk.cc",
    "binding_helpers_vk.h",
    "blit_command_vk.cc",
    "blit_command_vk.h",
    "blit_pass_vk.cc",
    "blit_pass_vk.h",
    "capabilities_vk.cc",
    "capabilities_vk.h",
    "command_buffer_vk.cc",
    "command_buffer_vk.h",
    "command_encoder_vk.cc",
    "command_encoder_vk.h",
    "command_pool_vk.cc",
    "command_pool_vk.h",
    "compute_pass_vk.cc",
    "compute_pass_vk.h",
    "compute_pipeline_vk.cc",
    "compute_pipeline_vk.h",
    "context_vk.cc",
    "context_vk.h",
    "debug_report_vk.cc",
    "debug_report_vk.h",
    "descriptor_pool_vk.cc",
    "descriptor_pool_vk.h",
    "device_buffer_vk.cc",
    "device_buffer_vk.h",
    "fence_waiter_vk.cc",
    "fence_waiter_vk.h",
    "formats_vk.cc",
    "formats_vk.h",
    "gpu_tracer_vk.cc",
    "gpu_tracer_vk.h",
    "limits_vk.h",
    "pass_bindings_cache.cc",
    "pass_bindings_cache.h",
    "pipeline_cache_vk.cc",
    "pipeline_cache_vk.h",
    "pipeline_library_vk.cc",
    "pipeline_library_vk.h",
    "pipeline_vk.cc",
    "pipeline_vk.h",
    "queue_vk.cc",
    "queue_vk.h",
    "render_pass_vk.cc",
    "render_pass_vk.h",
    "resource_manager_vk.cc",
    "resource_manager_vk.h",
    "sampler_library_vk.cc",
    "sampler_library_vk.h",
    "sampler_vk.cc",
    "sampler_vk.h",
    "shader_function_vk.cc",
    "shader_function_vk.h",
    "shader_library_vk.cc",
    "shader_library_vk.h",
    "shared_object_vk.cc",
    "shared_object_vk.h",
    "surface_context_vk.cc",
    "surface_context_vk.h",
    "surface_vk.cc",
    "surface_vk.h",
    "swapchain_image_vk.cc",
    "swapchain_image_vk.h",
    "swapchain_impl_vk.cc",
    "swapchain_impl_vk.h",
    "swapchain_vk.cc",
    "swapchain_vk.h",
    "texture_source_vk.cc",
    "texture_source_vk.h",
    "texture_vk.cc",
    "texture_vk.h",
    "vertex_descriptor_vk.cc",
    "vertex_descriptor_vk.h",
    "vk.h",
    "vma.cc",
    "vma.h",
  ]

  public_deps = [
    "../../:renderer",
    "../../../shader_archive",
    "//flutter/flutter_vma",
    "//flutter/fml",
    "//third_party/vulkan-deps/vulkan-headers/src:vulkan_headers",
    "//third_party/vulkan_memory_allocator",
  ]

  if (impeller_enable_vulkan_validation_layers) {
    defines = [ "IMPELLER_ENABLE_VULKAN_VALIDATION_LAYERS" ]
  }
}
