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