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