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 73 defines += [ "ANGLE_ENABLE_VULKAN_SHARED_RING_BUFFER_CMD_ALLOC=" + 74 "${angle_enable_vulkan_shared_ring_buffer_cmd_alloc}" ] 75 76 # Ensures that the memory allocation logging can only be enabled with debug layers. 77 assert(angle_debug_layers_enabled || !angle_enable_memory_alloc_logging) 78 if (angle_enable_memory_alloc_logging) { 79 defines += [ "ANGLE_ENABLE_MEMORY_ALLOC_LOGGING=1" ] 80 } 81 82 if (angle_enable_crc_for_pipeline_cache) { 83 defines += [ "ANGLE_ENABLE_CRC_FOR_PIPELINE_CACHE" ] 84 } 85} 86 87template("angle_vulkan_backend_template") { 88 config("${target_name}_internal_config") { 89 defines = [] 90 if (invoker.enable_custom_outside_render_pass_cmd_buffers) { 91 defines += [ "ANGLE_USE_CUSTOM_VULKAN_OUTSIDE_RENDER_PASS_CMD_BUFFERS=1" ] 92 } 93 if (invoker.enable_custom_render_pass_cmd_buffers) { 94 defines += [ "ANGLE_USE_CUSTOM_VULKAN_RENDER_PASS_CMD_BUFFERS=1" ] 95 } 96 } 97 98 angle_source_set(target_name) { 99 sources = vulkan_backend_sources 100 libs = [] 101 deps = [ 102 ":angle_vk_mem_alloc_wrapper", 103 "$angle_root:angle_abseil", 104 "$angle_root:angle_compression", 105 "$angle_root:angle_gpu_info_util", 106 "$angle_root:angle_image_util", 107 "$angle_root/src/common/spirv:angle_spirv_base", 108 "$angle_root/src/common/spirv:angle_spirv_builder", 109 "$angle_root/src/common/spirv:angle_spirv_headers", 110 "$angle_root/src/common/spirv:angle_spirv_parser", 111 "$angle_spirv_headers_dir:spv_headers", 112 ] 113 114 if (angle_enable_cl || is_android) { 115 deps += [ "$angle_root:angle_version_info" ] 116 } 117 118 # OpenCL on ANGLE needs both spirv-tools and clspv for compiler 119 if (angle_enable_cl) { 120 deps += [ 121 "$angle_root/third_party/clspv/:clspv_core_shared", 122 "$angle_root/third_party/spirv-tools/src/:spvtools", 123 "$angle_root/third_party/spirv-tools/src/:spvtools_opt", 124 ] 125 include_dirs = [ 126 "$angle_root/third_party/spirv-tools/src/include", 127 "$angle_root/third_party/clspv/src/include", 128 ] 129 } 130 131 public_deps = [ 132 "$angle_root:libANGLE_headers", 133 "$angle_root/src/common/vulkan", 134 "$angle_root/src/common/vulkan:angle_libvulkan_loader", 135 "$angle_root/src/common/vulkan:angle_vulkan_entry_points", 136 "$angle_root/src/common/vulkan:angle_vulkan_headers", 137 ] 138 public_configs = [ 139 ":angle_vulkan_backend_config", 140 ":${target_name}_internal_config", 141 ] 142 143 if (angle_use_wayland) { 144 public_configs += [ "$angle_root:angle_wayland_config" ] 145 } 146 147 data_deps = [] 148 149 defines = [] 150 151 if (angle_enable_vulkan_validation_layers) { 152 defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ] 153 data_deps += [ "$angle_root/src/common/vulkan:vulkan_validation_layers" ] 154 } 155 156 if (is_linux || is_chromeos) { 157 deps += [ "$angle_root/src/common/linux:angle_dma_buf" ] 158 if (angle_use_gbm) { 159 deps += [ "//third_party/minigbm" ] 160 } 161 } 162 163 if (is_fuchsia) { 164 public_deps += [ "$angle_root/src/common/fuchsia_egl:backend" ] 165 } 166 167 # Include generated shaders. 168 import("vk_internal_shaders_autogen.gni") 169 sources += angle_vulkan_internal_shaders 170 } 171} 172 173angle_vulkan_backend_template("angle_vulkan_backend") { 174 enable_custom_outside_render_pass_cmd_buffers = 175 angle_enable_custom_vulkan_outside_render_pass_cmd_buffers 176 enable_custom_render_pass_cmd_buffers = 177 angle_enable_custom_vulkan_render_pass_cmd_buffers 178} 179 180angle_vulkan_backend_template("angle_vulkan_secondaries_backend") { 181 enable_custom_outside_render_pass_cmd_buffers = false 182 enable_custom_render_pass_cmd_buffers = false 183} 184