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

source_set("client") {
  sources = [
    "cmd_buffer_helper.cc",
    "cmd_buffer_helper.h",
    "fenced_allocator.cc",
    "fenced_allocator.h",
    "gpu_control.h",
    "mapped_memory.cc",
    "mapped_memory.h",
    "ring_buffer.cc",
    "ring_buffer.h",
    "transfer_buffer.cc",
    "transfer_buffer.h",
  ]

  defines = [ "GPU_IMPLEMENTATION" ]

  if (is_win) {
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    cflags = [ "/wd4267" ]  # size_t to int truncation.
  }

  all_dependent_configs = [ "//third_party/khronos:khronos_headers" ]

  deps = [
    "//gpu/command_buffer/common",
  ]
}

group("gles2_cmd_helper") {
  if (is_component_build) {
    deps = [
      "//gpu",
    ]
  } else {
    deps = [
      ":gles2_cmd_helper_sources",
    ]
  }
}

source_set("gles2_cmd_helper_sources") {
  visibility = [
    ":gles2_cmd_helper",
    "//gpu",
  ]
  sources = [
    "gles2_cmd_helper.cc",
    "gles2_cmd_helper.h",
    "gles2_cmd_helper_autogen.h",
  ]

  defines = [ "GPU_IMPLEMENTATION" ]

  if (is_win) {
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    cflags = [ "/wd4267" ]  # size_t to int truncation.
  }

  deps = [
    ":client",
  ]
}

gles2_c_lib_source_files = [
  "gles2_c_lib.cc",
  "gles2_c_lib_autogen.h",
  "gles2_c_lib_export.h",
  "gles2_lib.h",
  "gles2_lib.cc",
]

gles2_implementation_source_files = [
  "buffer_tracker.cc",
  "buffer_tracker.h",
  "client_context_state.h",
  "client_context_state.cc",
  "client_context_state_autogen.h",
  "client_context_state_impl_autogen.h",
  "gles2_impl_export.h",
  "gles2_implementation_autogen.h",
  "gles2_implementation.cc",
  "gles2_implementation.h",
  "gles2_implementation_impl_autogen.h",
  "gles2_trace_implementation_autogen.h",
  "gles2_trace_implementation.cc",
  "gles2_trace_implementation.h",
  "gles2_trace_implementation_impl_autogen.h",
  "gpu_switches.cc",
  "gpu_switches.h",
  "program_info_manager.cc",
  "program_info_manager.h",
  "query_tracker.cc",
  "query_tracker.h",
  "share_group.cc",
  "share_group.h",
  "vertex_array_object_manager.cc",
  "vertex_array_object_manager.h",
]

# Provides GLES2 interface, but does not cause any implementation to be linked
# in. Useful when a target uses the interface, but permits its users to choose
# an implementation.
source_set("gles2_interface") {
  sources = [
    "gles2_interface.h",
  ]
  public_configs = [ "//third_party/khronos:khronos_headers" ]
  deps = [
    "//base",
  ]
}

source_set("gpu_memory_buffer_manager") {
  sources = [
    "gpu_memory_buffer_manager.cc",
    "gpu_memory_buffer_manager.h",
  ]
  deps = [
    "//ui/gfx",
  ]
}

# Library emulates GLES2 using command_buffers.
component("gles2_implementation") {
  sources = gles2_implementation_source_files

  defines = [ "GLES2_IMPL_IMPLEMENTATION" ]
  all_dependent_configs = [ "//third_party/khronos:khronos_headers" ]

  if (is_win) {
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    cflags = [ "/wd4267" ]  # size_t to int truncation.
  }

  deps = [
    ":gles2_cmd_helper",
    ":gles2_interface",
    "//base",
    "//gpu/command_buffer/common",
    "//ui/gfx/geometry",
  ]
}

component("gl_in_process_context") {
  sources = [
    "gl_in_process_context.h",
    "gl_in_process_context.cc",
    "gl_in_process_context_export.h",
  ]

  defines = [ "GL_IN_PROCESS_CONTEXT_IMPLEMENTATION" ]

  deps = [
    ":gles2_implementation",
    ":gpu_memory_buffer_manager",
    "//gpu",
    "//gpu/command_buffer/common:gles2_utils",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]
}

component("gles2_c_lib") {
  sources = gles2_c_lib_source_files
  defines = [ "GLES2_C_LIB_IMPLEMENTATION" ]

  if (is_win) {
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    cflags = [ "/wd4267" ]  # size_t to int truncation.
  }

  deps = [
    ":client",
    ":gles2_interface",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//gpu/command_buffer/common",
  ]
}
