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_overrides/swiftshader.gni") 8import("../../../../gni/angle.gni") 9 10assert(angle_enable_vulkan) 11 12declare_args() { 13 # Enable custom (cpu-side) secondary command buffers 14 angle_enable_custom_vulkan_cmd_buffers = true 15 16 # Enable Vulkan GPU trace event capability 17 angle_enable_vulkan_gpu_trace_events = false 18} 19 20_vulkan_backend_sources = [ 21 "BufferVk.cpp", 22 "BufferVk.h", 23 "CommandProcessor.cpp", 24 "CommandProcessor.h", 25 "CompilerVk.cpp", 26 "CompilerVk.h", 27 "ContextVk.cpp", 28 "ContextVk.h", 29 "DeviceVk.cpp", 30 "DeviceVk.h", 31 "DisplayVk.cpp", 32 "DisplayVk.h", 33 "DisplayVk_api.h", 34 "FenceNVVk.cpp", 35 "FenceNVVk.h", 36 "FramebufferVk.cpp", 37 "FramebufferVk.h", 38 "GlslangWrapperVk.cpp", 39 "GlslangWrapperVk.h", 40 "ImageVk.cpp", 41 "ImageVk.h", 42 "MemoryObjectVk.cpp", 43 "MemoryObjectVk.h", 44 "OverlayVk.cpp", 45 "OverlayVk.h", 46 "PersistentCommandPool.cpp", 47 "PersistentCommandPool.h", 48 "ProgramExecutableVk.cpp", 49 "ProgramExecutableVk.h", 50 "ProgramPipelineVk.cpp", 51 "ProgramPipelineVk.h", 52 "ProgramVk.cpp", 53 "ProgramVk.h", 54 "QueryVk.cpp", 55 "QueryVk.h", 56 "RenderTargetVk.cpp", 57 "RenderTargetVk.h", 58 "RenderbufferVk.cpp", 59 "RenderbufferVk.h", 60 "RendererVk.cpp", 61 "RendererVk.h", 62 "ResourceVk.cpp", 63 "ResourceVk.h", 64 "SamplerVk.cpp", 65 "SamplerVk.h", 66 "SecondaryCommandBuffer.cpp", 67 "SecondaryCommandBuffer.h", 68 "SemaphoreVk.cpp", 69 "SemaphoreVk.h", 70 "ShaderVk.cpp", 71 "ShaderVk.h", 72 "SurfaceVk.cpp", 73 "SurfaceVk.h", 74 "SyncVk.cpp", 75 "SyncVk.h", 76 "TextureVk.cpp", 77 "TextureVk.h", 78 "TransformFeedbackVk.cpp", 79 "TransformFeedbackVk.h", 80 "UtilsVk.cpp", 81 "UtilsVk.h", 82 "VertexArrayVk.cpp", 83 "VertexArrayVk.h", 84 "vk_cache_utils.cpp", 85 "vk_cache_utils.h", 86 "vk_caps_utils.cpp", 87 "vk_caps_utils.h", 88 "vk_ext_provoking_vertex.h", 89 "vk_format_table_autogen.cpp", 90 "vk_format_utils.cpp", 91 "vk_format_utils.h", 92 "vk_google_filtering_precision.h", 93 "vk_helpers.cpp", 94 "vk_helpers.h", 95 "vk_internal_shaders_autogen.cpp", 96 "vk_internal_shaders_autogen.h", 97 "vk_mandatory_format_support_table_autogen.cpp", 98 "vk_utils.cpp", 99 "vk_utils.h", 100 "vk_wrapper.h", 101] 102 103if (is_android) { 104 _vulkan_backend_sources += [ 105 "android/DisplayVkAndroid.cpp", 106 "android/DisplayVkAndroid.h", 107 "android/HardwareBufferImageSiblingVkAndroid.cpp", 108 "android/HardwareBufferImageSiblingVkAndroid.h", 109 "android/WindowSurfaceVkAndroid.cpp", 110 "android/WindowSurfaceVkAndroid.h", 111 ] 112} 113 114if (is_win) { 115 _vulkan_backend_sources += [ 116 "win32/DisplayVkWin32.cpp", 117 "win32/DisplayVkWin32.h", 118 "win32/WindowSurfaceVkWin32.cpp", 119 "win32/WindowSurfaceVkWin32.h", 120 ] 121} 122 123if (angle_use_x11) { 124 _vulkan_backend_sources += [ 125 "xcb/DisplayVkXcb.cpp", 126 "xcb/DisplayVkXcb.h", 127 "xcb/WindowSurfaceVkXcb.cpp", 128 "xcb/WindowSurfaceVkXcb.h", 129 ] 130} 131 132if (is_fuchsia) { 133 _vulkan_backend_sources += [ 134 "fuchsia/DisplayVkFuchsia.cpp", 135 "fuchsia/DisplayVkFuchsia.h", 136 "fuchsia/WindowSurfaceVkFuchsia.cpp", 137 "fuchsia/WindowSurfaceVkFuchsia.h", 138 ] 139} 140 141if (is_ggp) { 142 _vulkan_backend_sources += [ 143 "ggp/DisplayVkGGP.cpp", 144 "ggp/DisplayVkGGP.h", 145 "ggp/WindowSurfaceVkGGP.cpp", 146 "ggp/WindowSurfaceVkGGP.h", 147 ] 148} 149 150if (is_mac) { 151 _vulkan_backend_sources += [ 152 "mac/DisplayVkMac.h", 153 "mac/DisplayVkMac.mm", 154 "mac/IOSurfaceSurfaceVkMac.h", 155 "mac/IOSurfaceSurfaceVkMac.mm", 156 "mac/WindowSurfaceVkMac.h", 157 "mac/WindowSurfaceVkMac.mm", 158 ] 159} 160 161config("angle_vulkan_lib_android") { 162 if (is_android) { 163 libs = [ "vulkan" ] 164 } 165} 166 167config("angle_vulkan_headers_config") { 168 if (angle_shared_libvulkan) { 169 defines = [ "ANGLE_SHARED_LIBVULKAN=1" ] 170 } 171} 172 173angle_source_set("angle_vulkan_headers") { 174 sources = [ "vk_headers.h" ] 175 if (angle_shared_libvulkan) { 176 public_deps = [ "$angle_root/src/third_party/volk:volk" ] 177 } else { 178 public_deps = 179 [ "$angle_root/third_party/vulkan-headers/src:vulkan_headers" ] 180 } 181 public_configs = [ ":angle_vulkan_headers_config" ] 182} 183 184group("angle_vulkan_entry_points") { 185 public_configs = [ ":angle_vulkan_lib_android" ] 186 public_deps = [ ":angle_vulkan_headers" ] 187 if (is_fuchsia) { 188 public_deps += [ 189 "$angle_root/src/common/fuchsia_egl", 190 "//third_party/fuchsia-sdk:vulkan_base", 191 "//third_party/fuchsia-sdk/sdk/pkg/vulkan", 192 ] 193 } else if (!is_android && !is_ggp) { 194 if (angle_shared_libvulkan) { 195 data_deps = [ "$angle_root/third_party/vulkan-loader/src:libvulkan" ] 196 } else { 197 deps = [ "$angle_root/third_party/vulkan-loader/src:libvulkan" ] 198 } 199 } 200} 201 202config("angle_vulkan_backend_config") { 203 defines = [ "ANGLE_ENABLE_VULKAN" ] 204 if (angle_enable_swiftshader) { 205 defines += [ "ANGLE_ENABLE_SWIFTSHADER" ] 206 } 207 if (angle_enable_custom_vulkan_cmd_buffers) { 208 defines += [ "ANGLE_USE_CUSTOM_VULKAN_CMD_BUFFERS=1" ] 209 } 210 if (angle_enable_vulkan_gpu_trace_events) { 211 defines += [ "ANGLE_ENABLE_VULKAN_GPU_TRACE_EVENTS=1" ] 212 } 213} 214 215angle_source_set("angle_vk_mem_alloc_wrapper") { 216 deps = [ 217 ":angle_vulkan_headers", 218 "$angle_vulkan_memory_allocator_dir", 219 ] 220 sources = [ 221 "vk_mem_alloc_wrapper.cpp", 222 "vk_mem_alloc_wrapper.h", 223 ] 224 defines = [ "VMA_IMPLEMENTATION" ] 225 if (is_clang) { 226 cflags_cc = [ 227 "-Wno-extra-semi-stmt", 228 "-Wno-missing-field-initializers", 229 ] 230 } 231} 232 233angle_source_set("angle_vulkan_backend") { 234 sources = _vulkan_backend_sources 235 libs = [] 236 deps = [ 237 ":angle_vk_mem_alloc_wrapper", 238 ":angle_vulkan_entry_points", 239 ":angle_vulkan_headers", 240 "$angle_root:angle_gpu_info_util", 241 "$angle_root:angle_image_util", 242 "$angle_spirv_tools_dir:spvtools_val", 243 ] 244 public_deps = [ 245 "$angle_root:angle_glslang_wrapper", 246 "$angle_root:libANGLE_headers", 247 "$angle_root/src/common/vulkan", 248 ] 249 public_configs = [ ":angle_vulkan_backend_config" ] 250 251 data_deps = [] 252 253 defines = [] 254 255 if (angle_enable_vulkan_validation_layers) { 256 defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ] 257 data_deps += [ "$angle_root/src/common/vulkan:vulkan_validation_layers" ] 258 } 259 260 if (is_android) { 261 libs += [ "vulkan" ] 262 } 263 264 # Include generated shaders. 265 import("vk_internal_shaders_autogen.gni") 266 sources += angle_vulkan_internal_shaders 267} 268