• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2019 The ANGLE Project Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4#
5# This file houses the build configuration for the ANGLE Vulkan back-end.
6
7import("//build/config/dcheck_always_on.gni")
8import("//build_overrides/swiftshader.gni")
9import("vulkan_backend.gni")
10
11#import("../../../../gni/angle.gni")
12
13assert(angle_enable_vulkan)
14
15declare_args() {
16  # Enable custom (cpu-side) secondary command buffers
17  angle_enable_custom_vulkan_cmd_buffers = true
18
19  # Enable Vulkan GPU trace event capability
20  angle_enable_vulkan_gpu_trace_events = false
21}
22
23declare_args() {
24  # Enable custom secondary command buffers for outside render pass commands only
25  angle_enable_custom_vulkan_outside_render_pass_cmd_buffers =
26      angle_enable_custom_vulkan_cmd_buffers
27
28  # Enable custom secondary command buffers for render pass commands only
29  angle_enable_custom_vulkan_render_pass_cmd_buffers =
30      angle_enable_custom_vulkan_cmd_buffers
31
32  # Enable shared ring buffer command buffer allocator
33  angle_enable_vulkan_shared_ring_buffer_cmd_alloc = false
34
35  # Enable using CRC for pipeline cache data
36  angle_enable_crc_for_pipeline_cache = true
37}
38
39angle_source_set("angle_vk_mem_alloc_wrapper") {
40  deps = [
41    "$angle_root/src/common/vulkan:angle_vulkan_headers",
42    "$angle_vulkan_memory_allocator_dir",
43  ]
44  include_dirs = [ "$angle_vulkan_memory_allocator_dir/include" ]
45  configs += [ "$angle_root:angle_no_cfi_unrelated_cast" ]
46  sources = [
47    "vk_mem_alloc_wrapper.cpp",
48    "vk_mem_alloc_wrapper.h",
49  ]
50  if (is_clang) {
51    cflags_cc = [
52      "-Wno-extra-semi-stmt",
53      "-Wno-missing-field-initializers",
54      "-Wno-suggest-destructor-override",
55      "-Wno-suggest-override",
56      "-Wno-inconsistent-missing-destructor-override",
57    ]
58  }
59}
60
61config("angle_vulkan_backend_config") {
62  defines = [ "ANGLE_ENABLE_VULKAN" ]
63  if (angle_enable_swiftshader) {
64    defines += [ "ANGLE_ENABLE_SWIFTSHADER" ]
65  }
66  if (angle_enable_vulkan_gpu_trace_events) {
67    defines += [ "ANGLE_ENABLE_VULKAN_GPU_TRACE_EVENTS=1" ]
68  }
69  if (angle_enable_vulkan_validation_layers) {
70    defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS" ]
71  }
72
73  defines += [ "ANGLE_ENABLE_VULKAN_SHARED_RING_BUFFER_CMD_ALLOC=" +
74               "${angle_enable_vulkan_shared_ring_buffer_cmd_alloc}" ]
75
76  # Ensures that the memory allocation logging can only be enabled with debug layers.
77  assert(angle_debug_layers_enabled || !angle_enable_memory_alloc_logging)
78  if (angle_enable_memory_alloc_logging) {
79    defines += [ "ANGLE_ENABLE_MEMORY_ALLOC_LOGGING=1" ]
80  }
81
82  if (angle_enable_crc_for_pipeline_cache) {
83    defines += [ "ANGLE_ENABLE_CRC_FOR_PIPELINE_CACHE" ]
84  }
85}
86
87template("angle_vulkan_backend_template") {
88  config("${target_name}_internal_config") {
89    defines = []
90    if (invoker.enable_custom_outside_render_pass_cmd_buffers) {
91      defines += [ "ANGLE_USE_CUSTOM_VULKAN_OUTSIDE_RENDER_PASS_CMD_BUFFERS=1" ]
92    }
93    if (invoker.enable_custom_render_pass_cmd_buffers) {
94      defines += [ "ANGLE_USE_CUSTOM_VULKAN_RENDER_PASS_CMD_BUFFERS=1" ]
95    }
96  }
97
98  angle_source_set(target_name) {
99    sources = vulkan_backend_sources
100    libs = []
101    deps = [
102      ":angle_vk_mem_alloc_wrapper",
103      "$angle_root:angle_abseil",
104      "$angle_root:angle_compression",
105      "$angle_root:angle_gpu_info_util",
106      "$angle_root:angle_image_util",
107      "$angle_root/src/common/spirv:angle_spirv_base",
108      "$angle_root/src/common/spirv:angle_spirv_builder",
109      "$angle_root/src/common/spirv:angle_spirv_headers",
110      "$angle_root/src/common/spirv:angle_spirv_parser",
111      "$angle_spirv_headers_dir:spv_headers",
112    ]
113
114    if (angle_enable_cl || is_android) {
115      deps += [ "$angle_root:angle_version_info" ]
116    }
117
118    # OpenCL on ANGLE needs both spirv-tools and clspv for compiler
119    if (angle_enable_cl) {
120      deps += [
121        "$angle_root/third_party/clspv/:clspv_core_shared",
122        "$angle_root/third_party/spirv-tools/src/:spvtools",
123        "$angle_root/third_party/spirv-tools/src/:spvtools_opt",
124      ]
125      include_dirs = [
126        "$angle_root/third_party/spirv-tools/src/include",
127        "$angle_root/third_party/clspv/src/include",
128      ]
129    }
130
131    public_deps = [
132      "$angle_root:libANGLE_headers",
133      "$angle_root/src/common/vulkan",
134      "$angle_root/src/common/vulkan:angle_libvulkan_loader",
135      "$angle_root/src/common/vulkan:angle_vulkan_entry_points",
136      "$angle_root/src/common/vulkan:angle_vulkan_headers",
137    ]
138    public_configs = [
139      ":angle_vulkan_backend_config",
140      ":${target_name}_internal_config",
141    ]
142
143    if (angle_use_wayland) {
144      public_configs += [ "$angle_root:angle_wayland_config" ]
145    }
146
147    data_deps = []
148
149    defines = []
150
151    if (angle_enable_vulkan_validation_layers) {
152      defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ]
153      data_deps += [ "$angle_root/src/common/vulkan:vulkan_validation_layers" ]
154    }
155
156    if (is_linux || is_chromeos) {
157      deps += [ "$angle_root/src/common/linux:angle_dma_buf" ]
158      if (angle_use_gbm) {
159        deps += [ "//third_party/minigbm" ]
160      }
161    }
162
163    if (is_fuchsia) {
164      public_deps += [ "$angle_root/src/common/fuchsia_egl:backend" ]
165    }
166
167    # Include generated shaders.
168    import("vk_internal_shaders_autogen.gni")
169    sources += angle_vulkan_internal_shaders
170  }
171}
172
173angle_vulkan_backend_template("angle_vulkan_backend") {
174  enable_custom_outside_render_pass_cmd_buffers =
175      angle_enable_custom_vulkan_outside_render_pass_cmd_buffers
176  enable_custom_render_pass_cmd_buffers =
177      angle_enable_custom_vulkan_render_pass_cmd_buffers
178}
179
180angle_vulkan_backend_template("angle_vulkan_secondaries_backend") {
181  enable_custom_outside_render_pass_cmd_buffers = false
182  enable_custom_render_pass_cmd_buffers = false
183}
184