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