• 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  # Enable compute only queue for OpenCL Vulkan backend
23  angle_enable_cl_compute_only_pipe = true
24}
25
26declare_args() {
27  # Enable custom secondary command buffers for outside render pass commands only
28  angle_enable_custom_vulkan_outside_render_pass_cmd_buffers =
29      angle_enable_custom_vulkan_cmd_buffers
30
31  # Enable custom secondary command buffers for render pass commands only
32  angle_enable_custom_vulkan_render_pass_cmd_buffers =
33      angle_enable_custom_vulkan_cmd_buffers
34
35  # Enable shared ring buffer command buffer allocator
36  angle_enable_vulkan_shared_ring_buffer_cmd_alloc = false
37
38  # Enable using CRC for pipeline cache data
39  angle_enable_crc_for_pipeline_cache = true
40}
41
42angle_source_set("angle_vk_mem_alloc_wrapper") {
43  deps = [
44    "$angle_root/src/common/vulkan:angle_vulkan_headers",
45    "$angle_vulkan_memory_allocator_dir",
46  ]
47  include_dirs = [ "$angle_vulkan_memory_allocator_dir/include" ]
48  configs += [ "$angle_root:angle_no_cfi_unrelated_cast" ]
49  sources = [
50    "vk_mem_alloc_wrapper.cpp",
51    "vk_mem_alloc_wrapper.h",
52  ]
53  if (is_clang) {
54    cflags_cc = [
55      "-Wno-extra-semi-stmt",
56      "-Wno-missing-field-initializers",
57      "-Wno-suggest-destructor-override",
58      "-Wno-suggest-override",
59      "-Wno-inconsistent-missing-destructor-override",
60    ]
61  }
62}
63
64config("angle_vulkan_backend_config") {
65  defines = [ "ANGLE_ENABLE_VULKAN" ]
66  if (angle_enable_swiftshader) {
67    defines += [ "ANGLE_ENABLE_SWIFTSHADER" ]
68  }
69  if (angle_enable_vulkan_gpu_trace_events) {
70    defines += [ "ANGLE_ENABLE_VULKAN_GPU_TRACE_EVENTS=1" ]
71  }
72  if (angle_enable_vulkan_validation_layers) {
73    defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS" ]
74  }
75  if (angle_enable_vulkan_api_dump_layer) {
76    defines += [ "ANGLE_ENABLE_VULKAN_API_DUMP_LAYER" ]
77  }
78
79  defines += [ "ANGLE_ENABLE_VULKAN_SHARED_RING_BUFFER_CMD_ALLOC=" +
80               "${angle_enable_vulkan_shared_ring_buffer_cmd_alloc}" ]
81
82  # Ensures that the memory allocation logging can only be enabled with debug layers.
83  assert(angle_debug_layers_enabled || !angle_enable_memory_alloc_logging)
84  if (angle_enable_memory_alloc_logging) {
85    defines += [ "ANGLE_ENABLE_MEMORY_ALLOC_LOGGING=1" ]
86  }
87
88  if (angle_enable_crc_for_pipeline_cache) {
89    defines += [ "ANGLE_ENABLE_CRC_FOR_PIPELINE_CACHE" ]
90  }
91}
92
93if (is_android) {
94  # Used only in generated Android.bp file for DMA-BUF-enabled builds on Android.
95  # See b/353262025 for details.
96  angle_source_set("angle_android_vulkan_dma_buf") {
97    sources = vulkan_backend_dma_buf_sources
98    deps = [
99      ":angle_vulkan_backend",
100      "$angle_root/src/common/linux:angle_dma_buf",
101    ]
102    defines = [
103      "ANGLE_ANDROID_DMA_BUF",
104      "ANGLE_USE_VULKAN_DISPLAY",
105      "ANGLE_VULKAN_DISPLAY_MODE_OFFSCREEN",
106    ]
107    if (angle_use_gbm) {
108      deps += [ "//third_party/minigbm" ]
109    }
110  }
111}
112
113template("angle_vulkan_backend_template") {
114  config("${target_name}_internal_config") {
115    defines = []
116    if (invoker.enable_custom_outside_render_pass_cmd_buffers) {
117      defines += [ "ANGLE_USE_CUSTOM_VULKAN_OUTSIDE_RENDER_PASS_CMD_BUFFERS=1" ]
118    }
119    if (invoker.enable_custom_render_pass_cmd_buffers) {
120      defines += [ "ANGLE_USE_CUSTOM_VULKAN_RENDER_PASS_CMD_BUFFERS=1" ]
121    }
122  }
123
124  angle_source_set(target_name) {
125    sources = vulkan_backend_sources
126    libs = []
127    defines = []
128    deps = [
129      ":angle_vk_mem_alloc_wrapper",
130      "$angle_root:angle_abseil",
131      "$angle_root:angle_compression",
132      "$angle_root:angle_gpu_info_util",
133      "$angle_root:angle_image_util",
134      "$angle_root/src/common/spirv:angle_spirv_base",
135      "$angle_root/src/common/spirv:angle_spirv_builder",
136      "$angle_root/src/common/spirv:angle_spirv_headers",
137      "$angle_root/src/common/spirv:angle_spirv_parser",
138      "$angle_spirv_headers_dir:spv_headers",
139    ]
140
141    if (angle_enable_cl || is_android) {
142      deps += [ "$angle_root:angle_version_info" ]
143    }
144
145    # OpenCL on ANGLE needs both spirv-tools and clspv for compiler
146    if (angle_enable_cl) {
147      deps += [
148        "$angle_root/third_party/clspv/:clspv_core_shared",
149        "$angle_root/third_party/spirv-tools/src/:spvtools",
150        "$angle_root/third_party/spirv-tools/src/:spvtools_opt",
151      ]
152      include_dirs = [
153        "$angle_root/third_party/spirv-tools/src/include",
154        "$angle_root/third_party/clspv/src/include",
155      ]
156      if (angle_enable_cl_compute_only_pipe) {
157        defines += [ "ANGLE_OPENCL_COMPUTE_ONLY_PIPE" ]
158      }
159    }
160
161    public_deps = [
162      "$angle_root:libANGLE_headers",
163      "$angle_root/src/common/vulkan",
164      "$angle_root/src/common/vulkan:angle_libvulkan_loader",
165      "$angle_root/src/common/vulkan:angle_vulkan_entry_points",
166      "$angle_root/src/common/vulkan:angle_vulkan_headers",
167    ]
168    public_configs = [
169      ":angle_vulkan_backend_config",
170      ":${target_name}_internal_config",
171    ]
172
173    if (angle_use_wayland) {
174      public_configs += [ "$angle_root:angle_wayland_config" ]
175    }
176
177    data_deps = []
178
179    if (angle_enable_vulkan_validation_layers) {
180      defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ]
181      data_deps += [ "$angle_root/src/common/vulkan:vulkan_validation_layers" ]
182    }
183
184    if (angle_enable_vulkan_api_dump_layer &&
185        current_toolchain == default_toolchain) {
186      data_deps += [ "$angle_root/src/common/vulkan:lunarg_vulkantools" ]
187    }
188
189    if (is_linux || is_chromeos) {
190      deps += [ "$angle_root/src/common/linux:angle_dma_buf" ]
191      if (angle_use_gbm) {
192        deps += [ "//third_party/minigbm" ]
193      }
194    }
195
196    if (is_fuchsia) {
197      public_deps += [ "$angle_root/src/common/fuchsia_egl:backend" ]
198    }
199
200    # Include generated shaders.
201    import("vk_internal_shaders_autogen.gni")
202    sources += angle_vulkan_internal_shaders
203  }
204}
205
206angle_vulkan_backend_template("angle_vulkan_backend") {
207  enable_custom_outside_render_pass_cmd_buffers =
208      angle_enable_custom_vulkan_outside_render_pass_cmd_buffers
209  enable_custom_render_pass_cmd_buffers =
210      angle_enable_custom_vulkan_render_pass_cmd_buffers
211}
212
213angle_vulkan_backend_template("angle_vulkan_secondaries_backend") {
214  enable_custom_outside_render_pass_cmd_buffers = false
215  enable_custom_render_pass_cmd_buffers = false
216}
217