blob: c2cba00f7888cca245810e3e74df379deaf007d7 [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
}
_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",
]
}
}