# 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_memory_buffer_factory.h",
  "gpu_memory_buffer_tracker.cc",
  "gpu_memory_buffer_tracker.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",
  ]
}

# 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",
  ]
}

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

  defines = [
    "GLES2_IMPL_IMPLEMENTATION",
    "GLES2_SUPPORT_CLIENT_SIDE_ARRAYS=1",
  ]
  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",
    "//ui/gl",
  ]
}

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",
    "//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",
  ]
}

