123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678 |
- # Copyright 2014 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.
- import("//build/buildflag_header.gni")
- import("//build/config/chrome_build.gni")
- import("//build/config/chromecast_build.gni")
- import("//build/config/chromeos/ui_mode.gni")
- import("//build/config/linux/pkg_config.gni")
- import("//build/config/ozone.gni")
- import("//build/config/ui.gni")
- import("//gpu/vulkan/features.gni")
- import("//testing/test.gni")
- import("//third_party/angle/gni/angle.gni")
- import("//third_party/dawn/scripts/dawn_features.gni")
- import("//ui/gl/features.gni")
- declare_args() {
- # Whether service side logging (actual calls into the GL driver) is enabled
- # or not.
- enable_gpu_service_logging = false
- }
- use_glx = ozone_platform_x11
- if (is_android) {
- import("//build/config/android/config.gni")
- import("//build/config/android/rules.gni")
- }
- buildflag_header("buildflags") {
- header = "buildflags.h"
- flags = [
- "DAWN_ENABLE_BACKEND_OPENGLES=$dawn_enable_opengles",
- "ENABLE_SWIFTSHADER=$enable_swiftshader",
- "USE_DAWN=$use_dawn",
- "USE_STATIC_ANGLE=$use_static_angle",
- "USE_OPENGL_APITRACE=$enable_opengl_apitrace",
- ]
- }
- config("gl_config") {
- defines = []
- if (use_glx) {
- defines += [
- "GL_GLEXT_PROTOTYPES",
- "USE_GLX",
- ]
- }
- if (use_egl) {
- defines += [ "USE_EGL" ]
- }
- }
- component("gl") {
- output_name = "gl_wrapper" # Avoid colliding with OS X"s libGL.dylib.
- sources = [
- "buffer_format_utils.cc",
- "buffer_format_utils.h",
- "ca_renderer_layer_params.cc",
- "ca_renderer_layer_params.h",
- "dc_renderer_layer_params.cc",
- "dc_renderer_layer_params.h",
- "dual_gpu_state.cc",
- "dual_gpu_state.h",
- "egl_timestamps.h",
- "gl_bindings.cc",
- "gl_bindings.h",
- "gl_bindings_autogen_gl.cc",
- "gl_bindings_autogen_gl.h",
- "gl_context.cc",
- "gl_context.h",
- "gl_context_stub.cc",
- "gl_context_stub.h",
- "gl_display.cc",
- "gl_display.h",
- "gl_display_manager.cc",
- "gl_display_manager.h",
- "gl_enums.cc",
- "gl_enums.h",
- "gl_enums_implementation_autogen.h",
- "gl_export.h",
- "gl_features.cc",
- "gl_features.h",
- "gl_fence.cc",
- "gl_fence.h",
- "gl_fence_arb.cc",
- "gl_fence_arb.h",
- "gl_fence_nv.cc",
- "gl_fence_nv.h",
- "gl_gl_api_implementation.cc",
- "gl_gl_api_implementation.h",
- "gl_helper.cc",
- "gl_helper.h",
- "gl_image.cc",
- "gl_image.h",
- "gl_image_memory.cc",
- "gl_image_memory.h",
- "gl_image_ref_counted_memory.cc",
- "gl_image_ref_counted_memory.h",
- "gl_image_shared_memory.cc",
- "gl_image_shared_memory.h",
- "gl_image_stub.cc",
- "gl_image_stub.h",
- "gl_implementation.cc",
- "gl_implementation.h",
- "gl_implementation_wrapper.h",
- "gl_share_group.cc",
- "gl_share_group.h",
- "gl_state_restorer.cc",
- "gl_state_restorer.h",
- "gl_stub_api.cc",
- "gl_stub_api.h",
- "gl_stub_api_base.h",
- "gl_stub_autogen_gl.cc",
- "gl_stub_autogen_gl.h",
- "gl_surface.cc",
- "gl_surface.h",
- "gl_surface_format.cc",
- "gl_surface_format.h",
- "gl_surface_overlay.cc",
- "gl_surface_overlay.h",
- "gl_surface_presentation_helper.cc",
- "gl_surface_presentation_helper.h",
- "gl_surface_stub.cc",
- "gl_surface_stub.h",
- "gl_switches.cc",
- "gl_switches.h",
- "gl_utils.cc",
- "gl_utils.h",
- "gl_version_info.cc",
- "gl_version_info.h",
- "gl_workarounds.h",
- "gpu_switching_manager.cc",
- "gpu_switching_manager.h",
- "gpu_timing.cc",
- "gpu_timing.h",
- "progress_reporter.h",
- "scoped_binders.cc",
- "scoped_binders.h",
- "scoped_make_current.cc",
- "scoped_make_current.h",
- "shader_tracking.cc",
- "shader_tracking.h",
- "sync_control_vsync_provider.cc",
- "sync_control_vsync_provider.h",
- "trace_util.cc",
- "trace_util.h",
- ]
- if (is_android) {
- sources += [
- "android/scoped_java_surface.cc",
- "android/scoped_java_surface.h",
- "android/surface_texture.cc",
- "android/surface_texture.h",
- "android/surface_texture_listener.cc",
- "android/surface_texture_listener.h",
- ]
- }
- configs += [ "//build/config:precompiled_headers" ]
- defines = [ "GL_IMPLEMENTATION" ]
- if (enable_gpu_service_logging) {
- defines += [ "GPU_ENABLE_SERVICE_LOGGING" ]
- }
- include_dirs = [ "//third_party/mesa_headers" ]
- all_dependent_configs = [ ":gl_config" ]
- public_configs = [ "//third_party/khronos:khronos_headers" ]
- deps = [
- ":buildflags",
- "//base/third_party/dynamic_annotations",
- "//build:chromeos_buildflags",
- "//mojo/public/cpp/bindings",
- # ANGLE includes are used cross-platform.
- "//third_party/angle:includes",
- "//ui/gfx/mojom",
- ]
- public_deps = [
- "//base",
- "//third_party/mesa_headers",
- "//ui/events/platform",
- "//ui/gfx",
- "//ui/gfx/geometry",
- ]
- data_deps = []
- if (enable_swiftshader) {
- data_deps += [
- "//third_party/swiftshader/src/Vulkan:icd_file",
- "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan",
- ]
- }
- if (use_egl) {
- sources += [
- "angle_platform_impl.cc",
- "angle_platform_impl.h",
- "egl_util.cc",
- "egl_util.h",
- "gl_bindings_autogen_egl.cc",
- "gl_bindings_autogen_egl.h",
- "gl_context_egl.cc",
- "gl_context_egl.h",
- "gl_display_egl_util.cc",
- "gl_display_egl_util.h",
- "gl_egl_api_implementation.cc",
- "gl_egl_api_implementation.h",
- "gl_fence_egl.cc",
- "gl_fence_egl.h",
- "gl_image_egl.cc",
- "gl_image_egl.h",
- "gl_surface_egl.cc",
- "gl_surface_egl.h",
- "shared_gl_fence_egl.cc",
- "shared_gl_fence_egl.h",
- ]
- if (enable_vulkan) {
- sources += [
- "gl_angle_util_vulkan.cc",
- "gl_angle_util_vulkan.h",
- "gl_image_egl_angle_vulkan.cc",
- "gl_image_egl_angle_vulkan.h",
- ]
- }
- if (is_linux || is_chromeos || use_ozone) {
- sources += [
- "gl_image_native_pixmap.cc",
- "gl_image_native_pixmap.h",
- ]
- }
- if (is_android) {
- sources += [
- "gl_image_ahardwarebuffer.cc",
- "gl_image_ahardwarebuffer.h",
- "gl_surface_egl_surface_control.cc",
- "gl_surface_egl_surface_control.h",
- ]
- }
- if (is_posix && !is_fuchsia && !is_mac) {
- # Windows has USE_EGL but doesn't support base::FileDescriptor.
- # libsync isn't supported or needed on MacOSX.
- # Fuchsia is excluded due to a libsync dependency and because it's
- # unknown if the required EGL_ANDROID_native_fence_sync extension works
- # there. If it does and there's a use case, this could be revisited.
- sources += [
- "gl_fence_android_native_fence_sync.cc",
- "gl_fence_android_native_fence_sync.h",
- ]
- deps += [ "//third_party/libsync" ]
- }
- }
- if (is_mac || use_egl) {
- sources += [
- "yuv_to_rgb_converter.cc",
- "yuv_to_rgb_converter.h",
- ]
- }
- if (use_ozone) {
- deps += [ "//ui/ozone:buildflags" ]
- if (use_egl && !is_fuchsia) {
- data_deps += [
- "//third_party/angle:libEGL",
- "//third_party/angle:libGLESv2",
- ]
- if (angle_shared_libvulkan && !is_chromeos) {
- data_deps += [ "//third_party/vulkan-deps/vulkan-loader/src:libvulkan" ]
- }
- }
- }
- if (ozone_platform_x11) {
- sources += [
- "gl_image_egl_pixmap.cc",
- "gl_image_egl_pixmap.h",
- "gl_surface_egl_x11.cc",
- "gl_surface_egl_x11.h",
- "gl_surface_egl_x11_gles2.cc",
- "gl_surface_egl_x11_gles2.h",
- "gl_surface_glx_x11.cc",
- "gl_surface_glx_x11.h",
- ]
- deps += [
- "//ui/base:features",
- "//ui/base/x",
- "//ui/events/platform/x11:x11",
- "//ui/gfx/linux:gpu_memory_buffer_support_x11",
- ]
- assert(use_egl)
- data_deps += [
- "//third_party/angle:libEGL",
- "//third_party/angle:libGLESv2",
- ]
- if (angle_shared_libvulkan && !is_chromeos) {
- data_deps += [ "//third_party/vulkan-deps/vulkan-loader/src:libvulkan" ]
- }
- }
- if (use_glx) {
- sources += [
- "gl_bindings_autogen_glx.cc",
- "gl_bindings_autogen_glx.h",
- "gl_context_glx.cc",
- "gl_context_glx.h",
- "gl_glx_api_implementation.cc",
- "gl_glx_api_implementation.h",
- "gl_image_glx.cc",
- "gl_image_glx.h",
- "gl_image_glx_native_pixmap.cc",
- "gl_image_glx_native_pixmap.h",
- "gl_surface_glx.cc",
- "gl_surface_glx.h",
- "glx_util.cc",
- "glx_util.h",
- ]
- deps += [
- "//ui/base/x",
- "//ui/gfx/x",
- ]
- }
- if (is_win) {
- sources += [
- "child_window_win.cc",
- "child_window_win.h",
- "dc_layer_tree.cc",
- "dc_layer_tree.h",
- "dcomp_surface_registry.cc",
- "dcomp_surface_registry.h",
- "delegated_ink_point_renderer_gpu.h",
- "direct_composition_child_surface_win.cc",
- "direct_composition_child_surface_win.h",
- "direct_composition_support.cc",
- "direct_composition_support.h",
- "direct_composition_surface_win.cc",
- "direct_composition_surface_win.h",
- "gl_angle_util_win.cc",
- "gl_angle_util_win.h",
- "gl_fence_win.cc",
- "gl_fence_win.h",
- "gl_image_d3d.cc",
- "gl_image_d3d.h",
- "gl_image_dcomp_surface.cc",
- "gl_image_dcomp_surface.h",
- "gl_image_dxgi.cc",
- "gl_image_dxgi.h",
- "hdr_metadata_helper_win.cc",
- "hdr_metadata_helper_win.h",
- "swap_chain_presenter.cc",
- "swap_chain_presenter.h",
- "vsync_observer.h",
- "vsync_provider_win.cc",
- "vsync_provider_win.h",
- "vsync_thread_win.cc",
- "vsync_thread_win.h",
- ]
- libs = [
- "dxgi.lib",
- "dwmapi.lib",
- ]
- ldflags = [
- "/DELAYLOAD:dwmapi.dll",
- "/DELAYLOAD:dxgi.dll",
- ]
- deps += [
- "//media/base/win:media_foundation_util",
- "//ui/gfx/mojom:dxgi_info",
- ]
- assert(use_egl)
- data_deps += [
- "//third_party/angle:libEGL",
- "//third_party/angle:libGLESv2",
- "//third_party/swiftshader/src/Vulkan:icd_file",
- "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan",
- ]
- if (angle_shared_libvulkan && !is_chromeos) {
- data_deps += [ "//third_party/vulkan-deps/vulkan-loader/src:libvulkan" ]
- }
- }
- if (is_mac) {
- sources += [
- "dual_gpu_state_mac.cc",
- "dual_gpu_state_mac.h",
- "gl_context_cgl.cc",
- "gl_context_cgl.h",
- "gl_fence_apple.cc",
- "gl_fence_apple.h",
- "gl_image_io_surface.h",
- "gl_image_io_surface.mm",
- "scoped_cgl.cc",
- "scoped_cgl.h",
- ]
- frameworks = [
- "CoreFoundation.framework",
- "IOSurface.framework",
- "OpenGL.framework",
- "Quartz.framework",
- ]
- if (use_egl) {
- sources += [
- "gl_image_io_surface_egl.h",
- "gl_image_io_surface_egl.mm",
- ]
- data_deps += [
- "//third_party/angle:libEGL",
- "//third_party/angle:libGLESv2",
- "//third_party/mesa_headers",
- ]
- if (enable_swiftshader) {
- data_deps += [
- "//third_party/swiftshader/src/Vulkan:icd_file",
- "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan",
- ]
- }
- }
- }
- if (is_android) {
- defines += [
- "GL_GLEXT_PROTOTYPES",
- "EGL_EGLEXT_PROTOTYPES",
- ]
- libs = [ "android" ]
- deps += [ ":gl_jni_headers" ]
- }
- }
- if (is_mac && use_egl) {
- # We need to copy the ANGLE and SwiftShader libraries so that the
- # bundle_data dependencies have a "copy" target type. Otherwise for
- # "shared_library" target types it will try to link things into
- # Chromium Framework when we want to keep the ANGLE and SwiftShader
- # libraries separate instead.
- copy("angle_library_copy") {
- sources = [
- "$root_out_dir/libEGL.dylib",
- "$root_out_dir/libGLESv2.dylib",
- ]
- outputs = [ "$root_out_dir/egl_intermediates/{{source_file_part}}" ]
- deps = [
- "//third_party/angle:libEGL",
- "//third_party/angle:libGLESv2",
- ]
- }
- if (enable_swiftshader) {
- copy("swiftshader_vk_library_copy") {
- sources = [
- "$root_out_dir/libvk_swiftshader.dylib",
- "$root_out_dir/vk_swiftshader_icd.json",
- ]
- outputs = [ "$root_out_dir/vk_intermediates/{{source_file_part}}" ]
- deps = [
- "//third_party/swiftshader/src/Vulkan:icd_file",
- "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan",
- ]
- }
- }
- }
- static_library("gl_unittest_utils") {
- testonly = true
- sources = [
- "egl_bindings_autogen_mock.cc",
- "egl_bindings_autogen_mock.h",
- "egl_mock.cc",
- "egl_mock.h",
- "gl_bindings_autogen_mock.cc",
- "gl_bindings_autogen_mock.h",
- "gl_mock.cc",
- "gl_mock.h",
- "gl_mock_autogen_egl.h",
- "gl_mock_autogen_gl.h",
- "gpu_timing_fake.cc",
- "gpu_timing_fake.h",
- ]
- configs += [ "//third_party/khronos:khronos_headers" ]
- deps = [
- ":gl",
- "//testing/gmock",
- "//testing/gtest",
- ]
- }
- static_library("test_support") {
- testonly = true
- sources = [
- "test/gl_image_bind_test_template.h",
- "test/gl_image_test_support.cc",
- "test/gl_image_test_support.h",
- "test/gl_image_test_template.cc",
- "test/gl_image_test_template.h",
- "test/gl_image_zero_initialize_test_template.h",
- "test/gl_surface_test_support.cc",
- "test/gl_surface_test_support.h",
- "test/gl_test_helper.cc",
- "test/gl_test_helper.h",
- ]
- configs += [ "//third_party/khronos:khronos_headers" ]
- public_deps = [
- ":gl",
- "//ui/gl/init",
- ]
- deps = [
- "//base/test:test_support",
- "//testing/gtest",
- "//ui/base",
- ]
- if (is_linux || is_chromeos) {
- deps += [ "//ui/platform_window/common" ]
- }
- if (use_ozone) {
- deps += [ "//ui/ozone" ]
- }
- # If the run-time search path isn't set properly when we use ANGLE with its
- # Vulkan backend, it may end up finding the system libvulkan.so rather than
- # the one built in the output directory
- if ((is_linux || is_chromeos) && !is_component_build) {
- all_dependent_configs =
- [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
- }
- }
- source_set("run_all_unittests") {
- testonly = true
- sources = [ "test/run_all_unittests.cc" ]
- deps = [
- "//base",
- "//ui/base:features",
- ]
- public_deps = [ "//base/test:test_support" ]
- if (use_ozone) {
- deps += [
- "//mojo/core/embedder",
- "//services/service_manager/public/cpp/test:test_support",
- "//ui/ozone",
- ]
- }
- }
- test("gl_unittests") {
- use_xvfb = use_xvfb_in_this_config
- sources = [
- "gl_api_unittest.cc",
- "gl_image_ref_counted_memory_unittest.cc",
- "gl_image_shared_memory_unittest.cc",
- "gl_surface_format_unittest.cc",
- "gl_version_info_unittest.cc",
- "gpu_timing_unittest.cc",
- ]
- if (use_egl && !use_ozone) {
- sources += [ "gl_surface_egl_unittest.cc" ]
- }
- if (use_egl) {
- sources += [
- "egl_api_unittest.cc",
- "gl_display_manager_unittest.cc",
- "test/egl_initialization_displays_unittest.cc",
- ]
- }
- if (use_glx) {
- sources += [ "glx_api_unittest.cc" ]
- }
- if (is_mac) {
- sources += [ "gl_image_io_surface_unittest.cc" ]
- frameworks = [ "IOSurface.framework" ]
- }
- if (is_win) {
- sources += [
- "delegated_ink_point_renderer_gpu_unittest.cc",
- "direct_composition_surface_win_unittest.cc",
- "gl_fence_win_unittest.cc",
- "gl_image_d3d_unittest.cc",
- "gl_image_dxgi_unittest.cc",
- "hdr_metadata_helper_win_unittest.cc",
- ]
- }
- if (is_android) {
- sources += [ "gl_image_ahardwarebuffer_unittest.cc" ]
- }
- if (is_linux || is_chromeos_lacros) {
- sources += [ "gl_image_native_pixmap_unittest.cc" ]
- }
- include_dirs = [ "//third_party/khronos" ]
- deps = [
- ":gl",
- ":gl_unittest_utils",
- ":run_all_unittests",
- ":test_support",
- "//base",
- "//testing/gmock",
- "//testing/gtest",
- "//ui/base:base",
- "//ui/gfx",
- "//ui/gfx:test_support",
- "//ui/gfx/geometry",
- "//ui/gl/init",
- "//ui/platform_window",
- "//ui/platform_window:platform_impls",
- ]
- data_deps = [
- "//testing/buildbot/filters:gl_unittests_filters",
- "//third_party/mesa_headers",
- ]
- # TODO(https://crbug.com/789065): this must be moved to Ozone.
- if (ozone_platform_x11) {
- sources += [ "gl_context_glx_unittest.cc" ]
- deps += [ "//ui/gfx/x" ]
- }
- if (is_win) {
- deps += [ "//media/base/win:test_support" ]
- libs = [ "dxguid.lib" ]
- }
- }
- # We can't run this test on real Chrome OS hardware for Ozone, so new target.
- group("gl_unittests_ozone") {
- testonly = true
- data_deps = [ ":gl_unittests" ]
- }
- if (is_android) {
- generate_jar_jni("surface_jni_headers") {
- classes = [ "android/view/Surface.class" ]
- always_mangle = true
- }
- generate_jni("gl_jni_headers") {
- sources = [
- "../android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java",
- "../android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java",
- ]
- public_deps = [ ":surface_jni_headers" ]
- }
- }
|