Commit 552f5fcb by Tobin Ehlis Committed by Commit Bot

Vulkan: Use VK repos' internal BUILD.gn files

This retires custom BUILD.gn files for the Vulkan Headers, Tools, Validation-Layers, and Loader repos. They now have integrated BUILD.gn files so switched ANGLE to use those by default. Also Validation Layer, Loader, and Tools repos no longer uses codegen so this speeds up the build overall. Switched over from old VK_LAYER_LUNARG_standard_validation meta-layer to VK_LAYER_KHRONOS_validation unified layer. This changes includes a temporary workaround to the Vulkan-Loader repo to remove its Window's build dependence on WDK. There are plans to remove that depenedence in Loader master, but until then we can use our custom branch workaround. It also includes a custom branch for validation layers that includes some build fixes for ANGLE. Finally, the layers were crashing on Android when attempting to use DebugUtils extension so forcing DebugReport on Android for now. Bug: angleproject:2449 Bug: angleproject:3320 Bug: angleproject:3852 Change-Id: I48b36acefcc7f2bc930eb72d6fdbc87bca24f833 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1610438Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
parent ee79e2ff
......@@ -543,17 +543,17 @@ if (angle_enable_vulkan) {
# Use this target to include everything ANGLE needs for Vulkan.
group("angle_vulkan") {
public_deps = [
"$angle_root/third_party/vulkan-headers:vulkan_headers",
"$angle_root/third_party/vulkan-headers/src:vulkan_headers",
]
public_configs = [ ":vulkan_config" ]
data_deps = []
if (!is_android && !is_fuchsia) {
deps = [
"$angle_root/third_party/vulkan-loader:libvulkan",
"$angle_root/third_party/vulkan-loader/src:libvulkan",
]
data_deps += [ "$angle_root/third_party/vulkan-tools:VkICD_mock_icd" ]
data_deps += [ "$angle_root/third_party/vulkan-tools/src:VkICD_mock_icd" ]
public_configs +=
[ "$angle_root/third_party/vulkan-loader:vulkan_loader_config" ]
[ "$angle_root/third_party/vulkan-loader/src:vulkan_loader_config" ]
}
if (is_fuchsia) {
public_deps += [
......@@ -569,9 +569,9 @@ if (angle_enable_vulkan) {
"//third_party/fuchsia-sdk:vulkan_validation",
]
} else {
data_deps += [ "$angle_root/third_party/vulkan-validation-layers:vulkan_validation_layers" ]
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:vulkan_gen_json_files" ]
data_deps += [ "$angle_root/third_party/vulkan-validation-layers/src:vulkan_gen_json_files" ]
}
}
}
......@@ -692,7 +692,8 @@ angle_source_set("libANGLE_base") {
"${angle_glslang_dir}:glslang_sources",
"${angle_spirv_tools_dir}:spvtools_val",
]
public_deps += [ "$angle_root/third_party/vulkan-headers:vulkan_headers" ]
public_deps +=
[ "$angle_root/third_party/vulkan-headers/src:vulkan_headers" ]
# Include generated shaders.
import("src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.gni")
......@@ -1218,8 +1219,9 @@ if (!is_component_build && is_android && symbol_level != 0) {
if (angle_enable_vulkan_validation_layers) {
foreach(_layer, vulkan_validation_layers) {
deps +=
[ "${angle_root}/third_party/vulkan-validation-layers:${_layer}" ]
deps += [
"${angle_root}/third_party/vulkan-validation-layers/src:${_layer}",
]
}
}
......
......@@ -29,16 +29,16 @@ vars = {
'spirv_tools_revision': 'aef8f92b2bb67119d34ed1fb11b1d16c1ba7fa51',
# Current revision of Khronos Vulkan-Headers.
'vulkan_headers_revision': '982f0f84dccf6f281b48318c77261a9028000126',
'vulkan_headers_revision': '4ee33d2fbd1e7a072c4d8a6cf8f01c4f96d7483d',
# Current revision of Khronos Vulkan-Loader.
'vulkan_loader_revision': '2f0abfcf9eb04018e6e92125a70bc28665aa17fe',
'vulkan_loader_revision': 'd70661398d87233c40648209832e51f75de8ff30',
# Current revision of Khronos Vulkan-Tools.
'vulkan_tools_revision': 'f392e71b994036c92b896c2a62cc63d042b7f9b1',
'vulkan_tools_revision': 'a01f201a82416bcb2fa39623d6b16bb716230080',
# Current revision of Khronos Vulkan-ValidationLayers.
'vulkan_validation_revision': 'ff80a937c8a505abbdddb95d8ffaa446820c8391',
'vulkan_validation_revision': '8c4e0c4ede8e11f15244656d7705eebf44220cf3',
}
deps = {
......
# 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.
import("//gni/angle.gni")
vulkan_headers_dir = "//third_party/vulkan-headers/src"
vulkan_loader_extra_defines = [
"ANGLE_VK_DATA_DIR=\"$angle_data_dir\"",
"ANGLE_VK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"",
]
vulkan_gen_subdir = "angle/vulkan"
vulkan_loader_shared = angle_shared_libvulkan
# 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.
import("//gni/angle.gni")
vulkan_headers_dir = "//third_party/vulkan-headers/src"
vulkan_data_subdir = angle_data_dir
vulkan_gen_subdir = "angle/vulkan"
# 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.
import("//gni/angle.gni")
vulkan_headers_dir = "//third_party/vulkan-headers/src"
vvl_spirv_tools_dir = "//third_party/spirv-tools/src"
vvl_glslang_dir = "//third_party/glslang/src"
vulkan_data_subdir = angle_data_dir
vulkan_gen_subdir = "angle/vulkan"
......@@ -8,9 +8,10 @@
angle_dotfile_settings = {
exec_script_whitelist = [
get_path_info("BUILD.gn", "abspath"),
get_path_info("third_party/vulkan-headers/BUILD.gn", "abspath"),
get_path_info("third_party/vulkan-loader/BUILD.gn", "abspath"),
get_path_info("third_party/vulkan-tools/BUILD.gn", "abspath"),
get_path_info("third_party/vulkan-validation-layers/BUILD.gn", "abspath"),
get_path_info("third_party/vulkan-headers/src/BUILD.gn", "abspath"),
get_path_info("third_party/vulkan-loader/src/BUILD.gn", "abspath"),
get_path_info("third_party/vulkan-tools/src/BUILD.gn", "abspath"),
get_path_info("third_party/vulkan-validation-layers/src/BUILD.gn",
"abspath"),
]
}
......@@ -8,5 +8,5 @@
"src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp":
"d20e549634ef32d6ad4e9f0b28e52acf",
"third_party/vulkan-headers/src/registry/vk.xml":
"8af0f992bd45c2d9500eb5ed60c256d6"
"5202eff1b6d7617a1010798375be24d0"
}
\ No newline at end of file
......@@ -641,10 +641,14 @@ angle::Result RendererVk::initialize(DisplayVk *displayVk,
ExtensionNameList enabledInstanceExtensions;
enabledInstanceExtensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
enabledInstanceExtensions.push_back(wsiExtension);
#if defined(ANGLE_PLATFORM_ANDROID)
// http://anglebug.com/3852
bool enableDebugUtils = false;
#else
bool enableDebugUtils =
mEnableValidationLayers &&
ExtensionFound(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, instanceExtensionNames);
#endif
bool enableDebugReport =
mEnableValidationLayers && !enableDebugUtils &&
ExtensionFound(VK_EXT_DEBUG_REPORT_EXTENSION_NAME, instanceExtensionNames);
......
......@@ -52,8 +52,8 @@ egl::Error ToEGL(Result result, rx::DisplayVk *displayVk, EGLint errorCode)
namespace rx
{
// Mirrors std_validation_str in loader.c
const char *g_VkStdValidationLayerName = "VK_LAYER_LUNARG_standard_validation";
// Unified layer that includes full validation layer stack
const char *g_VkStdValidationLayerName = "VK_LAYER_KHRONOS_validation";
const char *g_VkValidationLayerNames[] = {
"VK_LAYER_GOOGLE_threading", "VK_LAYER_LUNARG_parameter_validation",
"VK_LAYER_LUNARG_object_tracker", "VK_LAYER_LUNARG_core_validation",
......
# Copyright 2018 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.
# BUILD settings for Vulkan Headers
# Headers repo is at
# https://github.com/KhronosGroup/Vulkan-Headers
import("../../gni/angle.gni")
config("vulkan_headers_config") {
include_dirs = [ "src/include" ]
if (is_win) {
defines = [ "VK_USE_PLATFORM_WIN32_KHR" ]
}
if (is_linux) {
defines = [ "VK_USE_PLATFORM_XCB_KHR" ]
}
if (is_android) {
defines = [ "VK_USE_PLATFORM_ANDROID_KHR" ]
}
if (is_fuchsia) {
defines = [ "VK_USE_PLATFORM_FUCHSIA" ]
}
}
# Vulkan headers only, no compiled sources.
source_set("vulkan_headers") {
sources = [
"src/include/vulkan/vk_icd.h",
"src/include/vulkan/vk_layer.h",
"src/include/vulkan/vk_platform.h",
"src/include/vulkan/vk_sdk_platform.h",
"src/include/vulkan/vulkan.h",
"src/include/vulkan/vulkan.hpp",
"src/include/vulkan/vulkan_core.h",
]
public_configs = [ ":vulkan_headers_config" ]
}
# Copyright 2018 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.
raw_vulkan_headers_registry_dir = rebase_path("src/registry")
# Common scripts & input used by multiple other repos
vulkan_registry_script_files = [
"$raw_vulkan_headers_registry_dir/cgenerator.py",
"$raw_vulkan_headers_registry_dir/generator.py",
"$raw_vulkan_headers_registry_dir/reg.py",
"$raw_vulkan_headers_registry_dir/vk.xml",
]
# Copyright 2018 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.
# BUILD settings for Vulkan Loader
# Loader repo is at
# https://github.com/KhronosGroup/Vulkan-Loader
import("../../gni/angle.gni")
import("$angle_root/third_party/vulkan-headers/vulkan_headers_script_deps.gni")
# Fuchsia has non-upstream changes to the vulkan loader, so we don't want
# to build it from upstream sources.
assert(!is_fuchsia)
if (!is_android) {
vulkan_undefine_configs = []
}
if (is_win) {
vulkan_undefine_configs += [
"//build/config/win:nominmax",
"//build/config/win:unicode",
]
}
vulkan_gen_dir = "$target_gen_dir/angle/vulkan"
raw_vulkan_gen_dir = rebase_path(vulkan_gen_dir, root_build_dir)
# Vulkan helper scripts
# ---------------------
helper_script_and_deps = [
[
"vulkan_gen_dispatch_table_helper_h",
"vk_dispatch_table_helper.h",
"dispatch_table_helper_generator.py",
],
[
"vulkan_gen_enum_string_helper",
"vk_enum_string_helper.h",
"helper_file_generator.py",
],
[
"vulkan_gen_extension_helper",
"vk_extension_helper.h",
"helper_file_generator.py",
],
[
"vulkan_gen_layer_dispatch_table_h",
"vk_layer_dispatch_table.h",
"loader_extension_generator.py",
],
[
"vulkan_gen_loader_extensions_c",
"vk_loader_extensions.c",
"loader_extension_generator.py",
],
[
"vulkan_gen_loader_extensions_h",
"vk_loader_extensions.h",
"loader_extension_generator.py",
],
[
"vulkan_gen_object_types_h",
"vk_object_types.h",
"helper_file_generator.py",
],
[
"vulkan_gen_safe_struct_cpp",
"vk_safe_struct.cpp",
"helper_file_generator.py",
],
[
"vulkan_gen_safe_struct_h",
"vk_safe_struct.h",
"helper_file_generator.py",
],
[
"vulkan_gen_typemap_helper",
"vk_typemap_helper.h",
"helper_file_generator.py",
],
]
# Python scripts needed for codegen, copy them to a temp dir
# so that all dependencies are together. The reg.py script from
# the headers repo is required input to loader_genvk.py.
copy("python_gen_deps") {
sources = vulkan_registry_script_files + [
"src/scripts/common_codegen.py",
"src/scripts/dispatch_table_helper_generator.py",
"src/scripts/helper_file_generator.py",
"src/scripts/loader_extension_generator.py",
"src/scripts/loader_genvk.py",
]
outputs = [
"$vulkan_gen_dir/{{source_file_part}}",
]
}
foreach(script_and_dep, helper_script_and_deps) {
target_name = script_and_dep[0]
file = script_and_dep[1]
dep = script_and_dep[2]
target("action", target_name) {
public_deps = [
":python_gen_deps",
]
script = "$vulkan_gen_dir/loader_genvk.py"
inputs = [
"$vulkan_gen_dir/$dep",
"$vulkan_gen_dir/common_codegen.py",
]
outputs = [
"$vulkan_gen_dir/$file",
]
args = [
"-o",
raw_vulkan_gen_dir,
"-registry",
"$raw_vulkan_gen_dir/vk.xml",
"-scripts",
raw_vulkan_gen_dir,
"$file",
"-quiet",
]
}
}
config("vulkan_generated_files_config") {
include_dirs = [ vulkan_gen_dir ]
}
group("vulkan_generate_helper_files") {
public_deps = [
"$angle_root/third_party/vulkan-headers:vulkan_headers",
]
public_configs = [ ":vulkan_generated_files_config" ]
foreach(script_and_dep, helper_script_and_deps) {
target_name = script_and_dep[0]
public_deps += [ ":$target_name" ]
}
}
config("vulkan_internal_config") {
defines = [ "VULKAN_NON_CMAKE_BUILD" ]
if (is_clang || !is_win) {
cflags = [ "-Wno-unused-function" ]
}
if (is_linux) {
defines += [
"SYSCONFDIR=\"/etc\"",
"FALLBACK_CONFIG_DIRS=\"/etc/xdg\"",
"FALLBACK_DATA_DIRS=\"/usr/local/share:/usr/share\"",
]
}
}
# Vulkan loader
# -------------
config("vulkan_loader_config") {
include_dirs = [
vulkan_gen_dir,
"$angle_root/third_party/vulkan-headers/src/include",
"src/loader",
]
defines = [
"ANGLE_VK_DATA_DIR=\"$angle_data_dir\"",
"ANGLE_VK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"",
"API_NAME=\"Vulkan\"",
]
if (is_win) {
cflags = [ "/wd4201" ]
}
if (is_linux) {
# assume secure_getenv() is available
defines += [ "HAVE_SECURE_GETENV" ]
}
}
if (!is_android) {
if (angle_shared_libvulkan) {
library_type = "shared_library"
} else {
library_type = "static_library"
}
target(library_type, "libvulkan") {
sources = [
"src/loader/asm_offset.c",
"src/loader/cJSON.c",
"src/loader/cJSON.h",
"src/loader/debug_utils.c",
"src/loader/debug_utils.h",
"src/loader/dev_ext_trampoline.c",
"src/loader/extension_manual.c",
"src/loader/extension_manual.h",
"src/loader/gpa_helper.h",
"src/loader/loader.c",
"src/loader/loader.h",
"src/loader/murmurhash.c",
"src/loader/murmurhash.h",
"src/loader/phys_dev_ext.c",
"src/loader/trampoline.c",
# TODO(jmadill): Use assembler where available.
"src/loader/unknown_ext_chain.c",
"src/loader/vk_loader_platform.h",
"src/loader/wsi.c",
"src/loader/wsi.h",
]
if (is_win) {
sources += [
"src/loader/dirent_on_windows.c",
"src/loader/dirent_on_windows.h",
]
if (!is_clang) {
cflags = [
"/wd4054", # Type cast from function pointer
"/wd4055", # Type cast from data pointer
"/wd4100", # Unreferenced formal parameter
"/wd4152", # Nonstandard extension used (pointer conversion)
"/wd4201", # Nonstandard extension used: nameless struct/union
"/wd4214", # Nonstandard extension used: bit field types other than int
"/wd4232", # Nonstandard extension used: address of dllimport is not static
"/wd4305", # Type cast truncation
"/wd4706", # Assignment within conditional expression
"/wd4996", # Unsafe stdlib function
]
}
}
deps = [
":vulkan_generate_helper_files",
]
public_deps = [
"$angle_root/third_party/vulkan-headers:vulkan_headers",
]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
configs += [ ":vulkan_internal_config" ]
public_configs = [
"$angle_root:vulkan_config",
":vulkan_loader_config",
]
configs -= vulkan_undefine_configs
}
}
# Copyright 2018 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.
# BUILD settings for Vulkan Tools where Mock ICD is located
# Tools repo is at
# https://github.com/KhronosGroup/Vulkan-Tools
import("../../gni/angle.gni")
import("$angle_root/third_party/vulkan-headers/vulkan_headers_script_deps.gni")
# Vulkan-tools isn't ported to Fuchsia yet.
# TODO(spang): Port mock ICD to Fuchsia.
assert(!is_fuchsia)
vulkan_undefine_configs = []
if (is_win) {
vulkan_undefine_configs += [
"//build/config/win:nominmax",
"//build/config/win:unicode",
]
}
raw_vulkan_icd_dir = rebase_path("src", root_build_dir)
raw_vulkan_headers_dir =
rebase_path("$angle_root/third_party/vulkan-headers/src", root_build_dir)
vulkan_gen_dir = "$target_gen_dir/angle/vulkan"
raw_vulkan_gen_dir = rebase_path(vulkan_gen_dir, root_build_dir)
# Vulkan helper scripts
# ---------------------
helper_script_and_deps = [
[
"vulkan_gen_typemap_helper",
"vk_typemap_helper.h",
"vulkan_tools_helper_file_generator.py",
],
[
"vulkan_mock_icd_cpp",
"mock_icd.cpp",
"mock_icd_generator.py",
],
[
"vulkan_mock_icd_h",
"mock_icd.h",
"mock_icd_generator.py",
],
]
# Python scripts needed for codegen, copy them to a temp dir
# so that all dependencies are together
copy("python_gen_deps") {
sources = vulkan_registry_script_files + [
"src/scripts/common_codegen.py",
"src/scripts/kvt_genvk.py",
"src/scripts/mock_icd_generator.py",
"src/scripts/vulkan_tools_helper_file_generator.py",
]
outputs = [
"$vulkan_gen_dir/{{source_file_part}}",
]
}
foreach(script_and_dep, helper_script_and_deps) {
target_name = script_and_dep[0]
file = script_and_dep[1]
dep = script_and_dep[2]
target("action", target_name) {
public_deps = [
":python_gen_deps",
]
script = "$vulkan_gen_dir/kvt_genvk.py"
inputs = [
"$vulkan_gen_dir/$dep",
"$vulkan_gen_dir/common_codegen.py",
]
outputs = [
"$vulkan_gen_dir/$file",
]
args = [
"-o",
raw_vulkan_gen_dir,
"-registry",
"$raw_vulkan_headers_dir/registry/vk.xml",
"-scripts",
"$raw_vulkan_headers_dir/registry",
"$file",
"-quiet",
]
}
}
config("vulkan_generated_files_config") {
include_dirs = [ vulkan_gen_dir ]
}
group("vulkan_generate_helper_files") {
public_deps = [
"$angle_root/third_party/vulkan-headers:vulkan_headers",
]
public_configs = [ ":vulkan_generated_files_config" ]
foreach(script_and_dep, helper_script_and_deps) {
target_name = script_and_dep[0]
public_deps += [ ":$target_name" ]
}
}
config("vulkan_internal_config") {
defines = [ "VULKAN_NON_CMAKE_BUILD" ]
if (is_clang || !is_win) {
cflags = [ "-Wno-unused-function" ]
}
if (is_linux) {
defines += [
"SYSCONFDIR=\"/etc\"",
"FALLBACK_CONFIG_DIRS=\"/etc/xdg\"",
"FALLBACK_DATA_DIRS=\"/usr/local/share:/usr/share\"",
]
}
}
# Copy icd header to gen dir
copy("icd_header_dep") {
sources = [
"$angle_root/third_party/vulkan-headers/src/include/vulkan/vk_icd.h",
]
outputs = [
"$vulkan_gen_dir/vk_icd.h",
]
}
if (!is_android) {
# Vulkan Mock ICD
# ---------------
group("vulkan_generate_mock_icd_files") {
public_deps = [
":icd_header_dep",
":vulkan_generate_helper_files",
":vulkan_mock_icd_cpp",
":vulkan_mock_icd_h",
]
}
mock_icd_sources = [
"$vulkan_gen_dir/mock_icd.cpp",
"$vulkan_gen_dir/mock_icd.h",
]
shared_library("VkICD_mock_icd") {
configs -= vulkan_undefine_configs
public_configs = [ "$angle_root:vulkan_config" ]
deps = [
":vulkan_generate_mock_icd_files",
]
data_deps = [
":vulkan_gen_icd_json_file",
]
sources = mock_icd_sources
if (is_win) {
sources += [ "src/icd/VkICD_mock_icd.def" ]
}
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
action("vulkan_gen_icd_json_file") {
script = "$angle_root/scripts/generate_vulkan_layers_json.py"
sources = [
"../vulkan-headers/src/include/vulkan/vulkan_core.h",
]
args = [ "--icd" ]
if (is_win) {
sources += [ "src/icd/windows/VkICD_mock_icd.json" ]
args += [ "$raw_vulkan_icd_dir/icd/windows" ]
}
if (is_linux) {
sources += [ "src/icd/linux/VkICD_mock_icd.json" ]
args += [ "$raw_vulkan_icd_dir/icd/linux" ]
}
# The layer JSON files are part of the necessary data deps.
outputs = [
"$root_out_dir/$angle_data_dir/VkICD_mock_icd.json",
]
data = outputs
args += [ rebase_path("$root_out_dir/$angle_data_dir", root_build_dir) ] +
rebase_path(sources, root_build_dir)
}
}
//
// Copyright 2018 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 is a dummy file to enable building SPIRV tools when git is absent.
#pragma once
#define SPIRV_TOOLS_COMMIT_ID "0000000000000000000000000000000000000000"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment