# 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/impeller/tools/impeller.gni")

impeller_component("renderer") {
  sources = [
    "allocator.cc",
    "allocator.h",
    "blit_command.cc",
    "blit_command.h",
    "blit_pass.cc",
    "blit_pass.h",
    "buffer.cc",
    "buffer.h",
    "buffer_view.cc",
    "buffer_view.h",
    "command.cc",
    "command.h",
    "command_buffer.cc",
    "command_buffer.h",
    "compute_command.cc",
    "compute_command.h",
    "compute_pass.cc",
    "compute_pass.h",
    "compute_pipeline_builder.cc",
    "compute_pipeline_builder.h",
    "compute_pipeline_descriptor.cc",
    "compute_pipeline_descriptor.h",
    "context.cc",
    "context.h",
    "descriptor_set_layout.h",
    "device_buffer.cc",
    "device_buffer.h",
    "device_buffer_descriptor.cc",
    "device_buffer_descriptor.h",
    "device_capabilities.cc",
    "device_capabilities.h",
    "formats.cc",
    "formats.h",
    "gpu_tracer.cc",
    "gpu_tracer.h",
    "host_buffer.cc",
    "host_buffer.h",
    "pipeline.cc",
    "pipeline.h",
    "pipeline_builder.cc",
    "pipeline_builder.h",
    "pipeline_descriptor.cc",
    "pipeline_descriptor.h",
    "pipeline_library.cc",
    "pipeline_library.h",
    "platform.cc",
    "platform.h",
    "range.cc",
    "range.h",
    "render_pass.cc",
    "render_pass.h",
    "render_target.cc",
    "render_target.h",
    "renderer.cc",
    "renderer.h",
    "sampler.cc",
    "sampler.h",
    "sampler_descriptor.cc",
    "sampler_descriptor.h",
    "sampler_library.cc",
    "sampler_library.h",
    "shader_function.cc",
    "shader_function.h",
    "shader_key.cc",
    "shader_key.h",
    "shader_library.cc",
    "shader_library.h",
    "shader_types.cc",
    "shader_types.h",
    "snapshot.cc",
    "snapshot.h",
    "surface.cc",
    "surface.h",
    "texture.cc",
    "texture.h",
    "texture_descriptor.cc",
    "texture_descriptor.h",
    "vertex_buffer.cc",
    "vertex_buffer.h",
    "vertex_buffer_builder.cc",
    "vertex_buffer_builder.h",
    "vertex_descriptor.cc",
    "vertex_descriptor.h",
  ]

  public_deps = [
    "../base",
    "../geometry",
    "../image",
    "../runtime_stage",
    "../tessellator",
  ]

  deps = [ "//flutter/fml" ]
}

impeller_component("renderer_unittests") {
  testonly = true

  sources = [
    "device_buffer_unittests.cc",
    "host_buffer_unittests.cc",
    "pipeline_descriptor_unittests.cc",
    "renderer_unittests.cc",
  ]

  if (impeller_enable_metal || impeller_enable_vulkan) {
    sources += [ "compute_unittests.cc" ]
  }

  deps = [
    ":renderer",
    "../fixtures",
    "../playground:playground_test",
    "//flutter/testing:testing_lib",
  ]
}
