xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/vulkan/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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  if (angle_enable_vulkan_api_dump_layer) {
73    defines += [ "ANGLE_ENABLE_VULKAN_API_DUMP_LAYER" ]
74  }
75
76  defines += [ "ANGLE_ENABLE_VULKAN_SHARED_RING_BUFFER_CMD_ALLOC=" +
77               "${angle_enable_vulkan_shared_ring_buffer_cmd_alloc}" ]
78
79  # Ensures that the memory allocation logging can only be enabled with debug layers.
80  assert(angle_debug_layers_enabled || !angle_enable_memory_alloc_logging)
81  if (angle_enable_memory_alloc_logging) {
82    defines += [ "ANGLE_ENABLE_MEMORY_ALLOC_LOGGING=1" ]
83  }
84
85  if (angle_enable_crc_for_pipeline_cache) {
86    defines += [ "ANGLE_ENABLE_CRC_FOR_PIPELINE_CACHE" ]
87  }
88}
89
90if (is_android) {
91  # Used only in generated Android.bp file for DMA-BUF-enabled builds on Android.
92  # See b/353262025 for details.
93  angle_source_set("angle_android_vulkan_dma_buf") {
94    sources = vulkan_backend_dma_buf_sources
95    deps = [
96      ":angle_vulkan_backend",
97      "$angle_root/src/common/linux:angle_dma_buf",
98    ]
99    defines = [
100      "ANGLE_ANDROID_DMA_BUF",
101      "ANGLE_USE_VULKAN_DISPLAY",
102      "ANGLE_VULKAN_DISPLAY_MODE_OFFSCREEN",
103    ]
104    if (angle_use_gbm) {
105      deps += [ "//third_party/minigbm" ]
106    }
107  }
108}
109
110template("angle_vulkan_backend_template") {
111  config("${target_name}_internal_config") {
112    defines = []
113    if (invoker.enable_custom_outside_render_pass_cmd_buffers) {
114      defines += [ "ANGLE_USE_CUSTOM_VULKAN_OUTSIDE_RENDER_PASS_CMD_BUFFERS=1" ]
115    }
116    if (invoker.enable_custom_render_pass_cmd_buffers) {
117      defines += [ "ANGLE_USE_CUSTOM_VULKAN_RENDER_PASS_CMD_BUFFERS=1" ]
118    }
119  }
120
121  angle_source_set(target_name) {
122    sources = vulkan_backend_sources
123    libs = []
124    deps = [
125      ":angle_vk_mem_alloc_wrapper",
126      "$angle_root:angle_abseil",
127      "$angle_root:angle_compression",
128      "$angle_root:angle_gpu_info_util",
129      "$angle_root:angle_image_util",
130      "$angle_root/src/common/spirv:angle_spirv_base",
131      "$angle_root/src/common/spirv:angle_spirv_builder",
132      "$angle_root/src/common/spirv:angle_spirv_headers",
133      "$angle_root/src/common/spirv:angle_spirv_parser",
134      "$angle_spirv_headers_dir:spv_headers",
135    ]
136
137    if (angle_enable_cl || is_android) {
138      deps += [ "$angle_root:angle_version_info" ]
139    }
140
141    # OpenCL on ANGLE needs both spirv-tools and clspv for compiler
142    if (angle_enable_cl) {
143      deps += [
144        "$angle_root/third_party/clspv/:clspv_core_shared",
145        "$angle_root/third_party/spirv-tools/src/:spvtools",
146        "$angle_root/third_party/spirv-tools/src/:spvtools_opt",
147      ]
148      include_dirs = [
149        "$angle_root/third_party/spirv-tools/src/include",
150        "$angle_root/third_party/clspv/src/include",
151      ]
152    }
153
154    public_deps = [
155      "$angle_root:libANGLE_headers",
156      "$angle_root/src/common/vulkan",
157      "$angle_root/src/common/vulkan:angle_libvulkan_loader",
158      "$angle_root/src/common/vulkan:angle_vulkan_entry_points",
159      "$angle_root/src/common/vulkan:angle_vulkan_headers",
160    ]
161    public_configs = [
162      ":angle_vulkan_backend_config",
163      ":${target_name}_internal_config",
164    ]
165
166    if (angle_use_wayland) {
167      public_configs += [ "$angle_root:angle_wayland_config" ]
168    }
169
170    data_deps = []
171
172    defines = []
173
174    if (angle_enable_vulkan_validation_layers) {
175      defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ]
176      data_deps += [ "$angle_root/src/common/vulkan:vulkan_validation_layers" ]
177    }
178
179    if (angle_enable_vulkan_api_dump_layer &&
180        current_toolchain == default_toolchain) {
181      data_deps += [ "$angle_root/src/common/vulkan:lunarg_vulkantools" ]
182    }
183
184    if (is_linux || is_chromeos) {
185      deps += [ "$angle_root/src/common/linux:angle_dma_buf" ]
186      if (angle_use_gbm) {
187        deps += [ "//third_party/minigbm" ]
188      }
189    }
190
191    if (is_fuchsia) {
192      public_deps += [ "$angle_root/src/common/fuchsia_egl:backend" ]
193    }
194
195    # Include generated shaders.
196    import("vk_internal_shaders_autogen.gni")
197    sources += angle_vulkan_internal_shaders
198  }
199}
200
201angle_vulkan_backend_template("angle_vulkan_backend") {
202  enable_custom_outside_render_pass_cmd_buffers =
203      angle_enable_custom_vulkan_outside_render_pass_cmd_buffers
204  enable_custom_render_pass_cmd_buffers =
205      angle_enable_custom_vulkan_render_pass_cmd_buffers
206}
207
208angle_vulkan_backend_template("angle_vulkan_secondaries_backend") {
209  enable_custom_outside_render_pass_cmd_buffers = false
210  enable_custom_render_pass_cmd_buffers = false
211}
212