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