| # Copyright 2019 The ANGLE Project Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # This file houses the build configuration for the ANGLE Vulkan back-end. |
| |
| import("//build_overrides/swiftshader.gni") |
| import("../../../../gni/angle.gni") |
| |
| assert(angle_enable_vulkan) |
| |
| declare_args() { |
| # Enable custom (cpu-side) secondary command buffers |
| angle_enable_custom_vulkan_cmd_buffers = true |
| |
| # Enable Vulkan GPU trace event capability |
| angle_enable_vulkan_gpu_trace_events = false |
| } |
| |
| _vulkan_backend_sources = [ |
| "BufferVk.cpp", |
| "BufferVk.h", |
| "CommandGraph.cpp", |
| "CommandGraph.h", |
| "CompilerVk.cpp", |
| "CompilerVk.h", |
| "ContextVk.cpp", |
| "ContextVk.h", |
| "DeviceVk.cpp", |
| "DeviceVk.h", |
| "DisplayVk.cpp", |
| "DisplayVk.h", |
| "DisplayVk_api.h", |
| "FenceNVVk.cpp", |
| "FenceNVVk.h", |
| "FramebufferVk.cpp", |
| "FramebufferVk.h", |
| "GlslangWrapperVk.cpp", |
| "GlslangWrapperVk.h", |
| "ImageVk.cpp", |
| "ImageVk.h", |
| "MemoryObjectVk.cpp", |
| "MemoryObjectVk.h", |
| "OverlayVk.cpp", |
| "OverlayVk.h", |
| "PersistentCommandPool.cpp", |
| "PersistentCommandPool.h", |
| "ProgramVk.cpp", |
| "ProgramVk.h", |
| "ProgramPipelineVk.cpp", |
| "ProgramPipelineVk.h", |
| "QueryVk.cpp", |
| "QueryVk.h", |
| "RenderbufferVk.cpp", |
| "RenderbufferVk.h", |
| "RendererVk.cpp", |
| "RendererVk.h", |
| "RenderTargetVk.cpp", |
| "RenderTargetVk.h", |
| "SamplerVk.cpp", |
| "SamplerVk.h", |
| "SecondaryCommandBuffer.cpp", |
| "SecondaryCommandBuffer.h", |
| "SemaphoreVk.cpp", |
| "SemaphoreVk.h", |
| "ShaderVk.cpp", |
| "ShaderVk.h", |
| "SurfaceVk.cpp", |
| "SurfaceVk.h", |
| "SyncVk.cpp", |
| "SyncVk.h", |
| "TextureVk.cpp", |
| "TextureVk.h", |
| "TransformFeedbackVk.cpp", |
| "TransformFeedbackVk.h", |
| "UtilsVk.cpp", |
| "UtilsVk.h", |
| "VertexArrayVk.cpp", |
| "VertexArrayVk.h", |
| "vk_cache_utils.cpp", |
| "vk_cache_utils.h", |
| "vk_caps_utils.cpp", |
| "vk_caps_utils.h", |
| "vk_ext_provoking_vertex.h", |
| "vk_format_table_autogen.cpp", |
| "vk_format_utils.h", |
| "vk_format_utils.cpp", |
| "vk_helpers.cpp", |
| "vk_helpers.h", |
| "vk_internal_shaders_autogen.h", |
| "vk_internal_shaders_autogen.cpp", |
| "vk_mandatory_format_support_table_autogen.cpp", |
| "vk_utils.cpp", |
| "vk_utils.h", |
| "vk_wrapper.h", |
| ] |
| |
| if (is_android) { |
| _vulkan_backend_sources += [ |
| "android/DisplayVkAndroid.cpp", |
| "android/DisplayVkAndroid.h", |
| "android/HardwareBufferImageSiblingVkAndroid.cpp", |
| "android/HardwareBufferImageSiblingVkAndroid.h", |
| "android/WindowSurfaceVkAndroid.cpp", |
| "android/WindowSurfaceVkAndroid.h", |
| ] |
| } |
| |
| if (is_win) { |
| _vulkan_backend_sources += [ |
| "win32/DisplayVkWin32.cpp", |
| "win32/DisplayVkWin32.h", |
| "win32/WindowSurfaceVkWin32.cpp", |
| "win32/WindowSurfaceVkWin32.h", |
| ] |
| } |
| |
| if (angle_use_x11) { |
| _vulkan_backend_sources += [ |
| "xcb/DisplayVkXcb.cpp", |
| "xcb/DisplayVkXcb.h", |
| "xcb/WindowSurfaceVkXcb.cpp", |
| "xcb/WindowSurfaceVkXcb.h", |
| ] |
| } |
| |
| if (is_fuchsia) { |
| _vulkan_backend_sources += [ |
| "fuchsia/DisplayVkFuchsia.cpp", |
| "fuchsia/DisplayVkFuchsia.h", |
| "fuchsia/WindowSurfaceVkFuchsia.cpp", |
| "fuchsia/WindowSurfaceVkFuchsia.h", |
| ] |
| } |
| |
| if (is_ggp) { |
| _vulkan_backend_sources += [ |
| "ggp/DisplayVkGGP.cpp", |
| "ggp/DisplayVkGGP.h", |
| "ggp/WindowSurfaceVkGGP.cpp", |
| "ggp/WindowSurfaceVkGGP.h", |
| ] |
| } |
| |
| if (is_mac) { |
| _vulkan_backend_sources += [ |
| "mac/DisplayVkMac.mm", |
| "mac/DisplayVkMac.h", |
| "mac/WindowSurfaceVkMac.mm", |
| "mac/WindowSurfaceVkMac.h", |
| ] |
| } |
| |
| config("angle_vulkan_lib_android") { |
| if (is_android) { |
| libs = [ "vulkan" ] |
| } |
| } |
| |
| group("angle_vulkan_entry_points") { |
| public_configs = [ ":angle_vulkan_lib_android" ] |
| public_deps = [ |
| "$angle_root/src/third_party/volk:volk", |
| "$angle_root/third_party/vulkan-headers/src:vulkan_headers", |
| ] |
| if (is_fuchsia) { |
| public_deps += [ |
| "$angle_root/src/common/fuchsia_egl", |
| "//third_party/fuchsia-sdk:vulkan_base", |
| "//third_party/fuchsia-sdk/sdk:vulkan", |
| ] |
| } else if (!is_android && !is_ggp) { |
| data_deps = [ |
| "$angle_root/third_party/vulkan-loader/src:libvulkan", |
| ] |
| } |
| } |
| |
| config("angle_vulkan_backend_config") { |
| defines = [ "ANGLE_ENABLE_VULKAN" ] |
| if (angle_enable_swiftshader) { |
| defines += [ "ANGLE_ENABLE_SWIFTSHADER" ] |
| } |
| if (angle_enable_custom_vulkan_cmd_buffers) { |
| defines += [ "ANGLE_USE_CUSTOM_VULKAN_CMD_BUFFERS=1" ] |
| } |
| |
| if (angle_enable_vulkan_gpu_trace_events) { |
| defines += [ "ANGLE_ENABLE_VULKAN_GPU_TRACE_EVENTS=1" ] |
| } |
| } |
| |
| angle_source_set("angle_vulkan_backend") { |
| sources = _vulkan_backend_sources |
| libs = [] |
| deps = [ |
| ":angle_vulkan_entry_points", |
| "$angle_root:angle_gpu_info_util", |
| "$angle_root:angle_image_util", |
| "$angle_root/third_party/vulkan-headers/src:vulkan_headers", |
| "$angle_spirv_tools_dir:spvtools_val", |
| ] |
| public_deps = [ |
| "$angle_root:angle_glslang_wrapper", |
| "$angle_root:libANGLE_headers", |
| ] |
| public_configs = [ ":angle_vulkan_backend_config" ] |
| |
| data_deps = [] |
| |
| defines = [ |
| "ANGLE_VK_LAYERS_DIR=\"$angle_data_dir\"", |
| "ANGLE_VK_MOCK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"", |
| ] |
| |
| if (is_android) { |
| libs += [ "vulkan" ] |
| } |
| |
| # Include generated shaders. |
| import("vk_internal_shaders_autogen.gni") |
| sources += angle_vulkan_internal_shaders |
| |
| if (!is_android && !is_fuchsia && !is_ggp) { |
| data_deps += [ |
| "$angle_root/third_party/vulkan-loader/src:libvulkan", |
| "$angle_root/third_party/vulkan-tools/src:VkICD_mock_icd", |
| ] |
| } |
| |
| if (angle_enable_vulkan_validation_layers) { |
| defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ] |
| if (is_fuchsia) { |
| data_deps += [ "//third_party/fuchsia-sdk:vulkan_validation" ] |
| } else { |
| data_deps += [ "$angle_root/third_party/vulkan-validation-layers/src:vulkan_validation_layers" ] |
| if (!is_android) { |
| data_deps += [ "$angle_root/third_party/vulkan-validation-layers/src:vulkan_gen_json_files" ] |
| } |
| } |
| } |
| |
| if (angle_enable_swiftshader) { |
| import("$swiftshader_dir/src/Vulkan/vulkan.gni") |
| _sws_icd = "./$swiftshader_icd_file_name" |
| if (is_win) { |
| _sws_icd = ".\\\\$swiftshader_icd_file_name" |
| } |
| |
| defines += [ "ANGLE_VK_SWIFTSHADER_ICD_JSON=\"${_sws_icd}\"" ] |
| |
| data_deps += [ |
| "$swiftshader_dir/src/Vulkan:icd_file", |
| "$swiftshader_dir/src/Vulkan:swiftshader_libvulkan", |
| ] |
| } |
| } |