blob: 7881826dac35d86ce1cf5e772aba1816a6215c58 [file] [log] [blame]
# 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
# Currently SwiftShader's Vulkan front-end doesn't build on Android.
# SwiftShader is not needed on Fuchsia because Vulkan is supported on all
# devices that run Fuchsia.
angle_swiftshader = !is_android && !is_fuchsia && !is_ggp
}
_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",
"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",
]
}
config("vulkan_config") {
_sws_icd = "./libvk_swiftshader_icd.json"
if (is_win) {
_sws_icd = ".\\\\libvk_swiftshader_icd.json"
}
defines = [
"ANGLE_VK_LAYERS_DIR=\"$angle_data_dir\"",
"ANGLE_VK_MOCK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"",
"ANGLE_VK_SWIFTSHADER_ICD_JSON=\"${_sws_icd}\"",
]
if (is_android) {
libs = [ "vulkan" ]
}
if (angle_enable_vulkan_validation_layers) {
defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ]
}
}
if (angle_swiftshader) {
copy("angle_swiftshader_icd_rename") {
sources = [
"$swiftshader_dir/src/Vulkan/vk_swiftshader_icd.json",
]
outputs = [
"$root_gen_dir/angle/libvk_swiftshader_icd.json",
]
}
action("angle_swiftshader_icd") {
deps = [
":angle_swiftshader_icd_rename",
"$angle_root/third_party/vulkan-headers/src:vulkan_headers",
]
script = "$angle_root/scripts/generate_vulkan_layers_json.py"
sources = [
"$angle_root/third_party/vulkan-headers/src/include/vulkan/vulkan_core.h",
]
# Must be listed after vulkan_core.h. git cl format sorts them if they
# are in one list. So split up the sources manually.
sources += [ "$root_gen_dir/angle/libvk_swiftshader_icd.json" ]
outputs = [
"$root_out_dir/libvk_swiftshader_icd.json",
]
data = outputs
_raw_sws_in = rebase_path("$root_gen_dir/angle", root_build_dir)
_raw_sws_out = rebase_path("$root_out_dir", root_build_dir)
_sws_output = ""
if (is_win) {
_sws_output += ".\\vk_swiftshader.dll"
} else if (is_mac) {
_sws_output += "./libvk_swiftshader.dylib"
} else {
_sws_output += "./libvk_swiftshader.so"
}
args = [
"--icd",
"--replacement",
_sws_output,
_raw_sws_in,
_raw_sws_out,
] + rebase_path(sources, root_build_dir)
}
}
# Use this target to include everything ANGLE needs for Vulkan.
group("angle_vulkan") {
public_deps = [
"$angle_root/third_party/vulkan-headers/src:vulkan_headers",
]
public_configs = [ ":vulkan_config" ]
deps = []
data_deps = []
if (!is_android && !is_fuchsia) {
deps += [ "$angle_root/third_party/vulkan-loader/src:libvulkan" ]
data_deps += [ "$angle_root/third_party/vulkan-tools/src:VkICD_mock_icd" ]
public_configs +=
[ "$angle_root/third_party/vulkan-loader/src:vulkan_loader_config" ]
}
if (is_fuchsia) {
public_deps += [
"$angle_root/src/common/fuchsia_egl",
"//third_party/fuchsia-sdk:vulkan_base",
"//third_party/fuchsia-sdk/sdk:vulkan",
]
}
if (angle_enable_vulkan_validation_layers) {
if (is_fuchsia) {
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_swiftshader) {
data_deps += [
":angle_swiftshader_icd",
"$swiftshader_dir/src/Vulkan:swiftshader_libvulkan",
]
}
}
config("angle_vulkan_backend_config") {
defines = [ "ANGLE_ENABLE_VULKAN" ]
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",
"$angle_root:angle_image_util",
"$angle_spirv_tools_dir:spvtools_val",
]
public_deps = [
"$angle_root:angle_glslang_wrapper",
"$angle_root:libANGLE_headers",
"$angle_root/third_party/vulkan-headers/src:vulkan_headers",
]
public_configs = [ ":angle_vulkan_backend_config" ]
if (is_fuchsia) {
deps += [
"$angle_root/src/common/fuchsia_egl",
"$angle_root/src/common/fuchsia_egl:backend",
]
}
if (is_android) {
libs += [ "vulkan" ]
}
# Include generated shaders.
import("vk_internal_shaders_autogen.gni")
sources += angle_vulkan_internal_shaders
}