diff --git a/BUILD.gn b/BUILD.gn index 3ff8b7cce3..18fa67ac6c 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -556,6 +556,9 @@ if (angle_enable_vulkan) { if (is_android) { libs = [ "vulkan" ] } + if (angle_enable_vulkan_validation_layers) { + defines += [ "ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT" ] + } } if (angle_swiftshader) { @@ -611,16 +614,16 @@ 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" ] deps = [] data_deps = [] if (!is_android && !is_fuchsia) { - deps += [ "$angle_root/third_party/vulkan-loader:libvulkan" ] - data_deps += [ "$angle_root/third_party/vulkan-tools:VkICD_mock_icd" ] + 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:vulkan_loader_config" ] + [ "$angle_root/third_party/vulkan-loader/src:vulkan_loader_config" ] } if (is_fuchsia) { public_deps += [ @@ -634,9 +637,9 @@ if (angle_enable_vulkan) { if (is_fuchsia) { deps += [ "//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" ] } } } @@ -770,7 +773,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") @@ -1302,8 +1306,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}", + ] } } diff --git a/DEPS b/DEPS index e20f56bfd9..54423c280e 100644 --- a/DEPS +++ b/DEPS @@ -30,16 +30,16 @@ vars = { 'spirv_tools_revision': '85c67b5e08eea1818767f174515612464740a53c', # Current revision of Khronos Vulkan-Headers. - 'vulkan_headers_revision': '982f0f84dccf6f281b48318c77261a9028000126', + 'vulkan_headers_revision': '5b44df19e040fca0048ab30c553a8c2d2cb9623e', # Current revision of Khronos Vulkan-Loader. - 'vulkan_loader_revision': '2f0abfcf9eb04018e6e92125a70bc28665aa17fe', + 'vulkan_loader_revision': 'b5a0995324fa9fb2a6152197b442400e7d7be5b6', # Current revision of Khronos Vulkan-Tools. - 'vulkan_tools_revision': 'f392e71b994036c92b896c2a62cc63d042b7f9b1', + 'vulkan_tools_revision': '40cd2166a44647a4283517e31af4589410c654eb', # Current revision of Khronos Vulkan-ValidationLayers. - 'vulkan_validation_revision': 'ff80a937c8a505abbdddb95d8ffaa446820c8391', + 'vulkan_validation_revision': '9fba37afae13a11bd49ae942bf82e5bf1098e381', } deps = { diff --git a/android/angle_apk.gni b/android/angle_apk.gni index 39f3c8a8d0..c561c4050d 100644 --- a/android/angle_apk.gni +++ b/android/angle_apk.gni @@ -5,13 +5,7 @@ import("//build/config/android/rules.gni") import("//third_party/angle/gni/angle.gni") -vulkan_validation_layers = [ - "VkLayer_core_validation", - "VkLayer_object_lifetimes", - "VkLayer_stateless_validation", - "VkLayer_thread_safety", - "VkLayer_unique_objects", -] +vulkan_validation_layers = [ "VkLayer_khronos_validation" ] angle_libraries = [ "libEGL", diff --git a/build_overrides/vulkan_loader.gni b/build_overrides/vulkan_loader.gni new file mode 100644 index 0000000000..580eda1dd5 --- /dev/null +++ b/build_overrides/vulkan_loader.gni @@ -0,0 +1,10 @@ +# 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_gen_subdir = "angle/vulkan" +vulkan_loader_shared = angle_shared_libvulkan diff --git a/build_overrides/vulkan_tools.gni b/build_overrides/vulkan_tools.gni new file mode 100644 index 0000000000..4691eae7a6 --- /dev/null +++ b/build_overrides/vulkan_tools.gni @@ -0,0 +1,10 @@ +# 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" diff --git a/build_overrides/vulkan_validation_layers.gni b/build_overrides/vulkan_validation_layers.gni new file mode 100644 index 0000000000..5d691b90bc --- /dev/null +++ b/build_overrides/vulkan_validation_layers.gni @@ -0,0 +1,12 @@ +# 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" diff --git a/dotfile_settings.gni b/dotfile_settings.gni index 8c370c36f5..baf6e60467 100644 --- a/dotfile_settings.gni +++ b/dotfile_settings.gni @@ -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"), ] } diff --git a/scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json b/scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json index 3ba56240c0..d5f8ef7372 100644 --- a/scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json +++ b/scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json @@ -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" + "db16f42dab8a7a1ee88c42a90f0c02c2" } \ No newline at end of file diff --git a/src/libANGLE/renderer/renderer_utils.cpp b/src/libANGLE/renderer/renderer_utils.cpp index e34f3fbbd3..c5b7eee5f4 100644 --- a/src/libANGLE/renderer/renderer_utils.cpp +++ b/src/libANGLE/renderer/renderer_utils.cpp @@ -306,12 +306,12 @@ bool ShouldUseDebugLayers(const egl::AttributeMap &attribs) EGLAttrib debugSetting = attribs.get(EGL_PLATFORM_ANGLE_DEBUG_LAYERS_ENABLED_ANGLE, EGL_DONT_CARE); -// Prefer to enable debug layers if compiling in Debug, and disabled in Release. -#if defined(ANGLE_ENABLE_ASSERTS) + // Prefer to enable debug layers when available. +#if defined(ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT) return (debugSetting != EGL_FALSE); #else return (debugSetting == EGL_TRUE); -#endif // defined(ANGLE_ENABLE_ASSERTS) +#endif // defined(ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT) } bool ShouldUseVirtualizedContexts(const egl::AttributeMap &attribs, bool defaultValue) diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp index e560618d5d..ecdabff7d5 100644 --- a/src/libANGLE/renderer/vulkan/RendererVk.cpp +++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp @@ -119,6 +119,14 @@ constexpr const char *kSkippedMessages[] = { "UNASSIGNED-CoreValidation-Shader-PointSizeMissing", // http://anglebug.com/3832 "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428", + // http://anglebug.com/3450 + "VUID-vkDestroySemaphore-semaphore-parameter", + // http://anglebug.com/3924 + "UNASSIGNED-Threading-Info", + // http://anglebug.com/3925 + "VUID-vkDestroyDescriptorPool-descriptorPool-parameter", + "VUID-vkDestroyBuffer-buffer-parameter", + "VUID-vkDestroyImage-image-parameter", }; // Suppress validation errors that are known @@ -603,7 +611,13 @@ angle::Result RendererVk::initialize(DisplayVk *displayVk, const egl::AttributeMap &attribs = mDisplay->getAttributeMap(); ScopedVkLoaderEnvironment scopedEnvironment(ShouldUseDebugLayers(attribs), ChooseICDFromAttribs(attribs)); +#if defined(ANGLE_PLATFORM_WINDOWS) && !defined(_WIN64) + // TODO: Re-enable validation layers on 32bit Windows + // http://anglebug.com/3946, http://anglebug.com/3924 + mEnableValidationLayers = false; +#else mEnableValidationLayers = scopedEnvironment.canEnableValidationLayers(); +#endif mEnabledICD = scopedEnvironment.getEnabledICD(); // Gather global layer properties. @@ -671,10 +685,15 @@ 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) + // TODO: Enable DebugUtils on 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); @@ -740,7 +759,16 @@ angle::Result RendererVk::initialize(DisplayVk *displayVk, enabledInstanceExtensions.empty() ? nullptr : enabledInstanceExtensions.data(); instanceInfo.enabledLayerCount = static_cast(enabledInstanceLayerNames.size()); instanceInfo.ppEnabledLayerNames = enabledInstanceLayerNames.data(); - +#if defined(ANGLE_PLATFORM_ANDROID) && !defined(ANGLE_IS_64_BIT_CPU) + // TODO: Re-enable validation layers on 32-bit Android + // http://anglebug.com/3924 + VkValidationFeatureDisableEXT vkValFeaturesDisable = VK_VALIDATION_FEATURE_DISABLE_ALL_EXT; + VkValidationFeaturesEXT validationFeatures = {}; + validationFeatures.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT; + validationFeatures.disabledValidationFeatureCount = 1; + validationFeatures.pDisabledValidationFeatures = &vkValFeaturesDisable; + instanceInfo.pNext = &validationFeatures; +#endif ANGLE_VK_TRY(displayVk, vkCreateInstance(&instanceInfo, nullptr, &mInstance)); if (enableDebugUtils) diff --git a/src/libANGLE/renderer/vulkan/vk_utils.cpp b/src/libANGLE/renderer/vulkan/vk_utils.cpp index 7427c92edd..178aed614b 100644 --- a/src/libANGLE/renderer/vulkan/vk_utils.cpp +++ b/src/libANGLE/renderer/vulkan/vk_utils.cpp @@ -52,9 +52,10 @@ 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"; -const char *g_VkValidationLayerNames[] = { +// Unified layer that includes full validation layer stack +const char *g_VkKhronosValidationLayerName = "VK_LAYER_KHRONOS_validation"; +const char *g_VkStandardValidationLayerName = "VK_LAYER_LUNARG_standard_validation"; +const char *g_VkValidationLayerNames[] = { "VK_LAYER_GOOGLE_threading", "VK_LAYER_LUNARG_parameter_validation", "VK_LAYER_LUNARG_object_tracker", "VK_LAYER_LUNARG_core_validation", "VK_LAYER_GOOGLE_unique_objects"}; @@ -72,9 +73,14 @@ bool HasValidationLayer(const std::vector &layerProps, const return false; } +bool HasKhronosValidationLayer(const std::vector &layerProps) +{ + return HasValidationLayer(layerProps, g_VkKhronosValidationLayerName); +} + bool HasStandardValidationLayer(const std::vector &layerProps) { - return HasValidationLayer(layerProps, g_VkStdValidationLayerName); + return HasValidationLayer(layerProps, g_VkStandardValidationLayerName); } bool HasValidationLayers(const std::vector &layerProps) @@ -215,9 +221,14 @@ bool GetAvailableValidationLayers(const std::vector &layerPro bool mustHaveLayers, VulkanLayerVector *enabledLayerNames) { - if (HasStandardValidationLayer(layerProps)) + // Favor unified Khronos layer, but fallback to standard validation + if (HasKhronosValidationLayer(layerProps)) + { + enabledLayerNames->push_back(g_VkKhronosValidationLayerName); + } + else if (HasStandardValidationLayer(layerProps)) { - enabledLayerNames->push_back(g_VkStdValidationLayerName); + enabledLayerNames->push_back(g_VkStandardValidationLayerName); } else if (HasValidationLayers(layerProps)) { diff --git a/src/tests/test_utils/angle_test_configs.cpp b/src/tests/test_utils/angle_test_configs.cpp index 210a0a9617..ccd67b8024 100644 --- a/src/tests/test_utils/angle_test_configs.cpp +++ b/src/tests/test_utils/angle_test_configs.cpp @@ -41,8 +41,12 @@ EGLint PlatformParameters::getRenderer() const void PlatformParameters::initDefaultParameters() { +#if defined(ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT) // Default debug layers to enabled in tests. eglParameters.debugLayersEnabled = EGL_TRUE; +#else + eglParameters.debugLayersEnabled = EGL_FALSE; +#endif // defined(ANGLE_ENABLE_VULKAN_VALIDATION_LAYERS_BY_DEFAULT) } bool operator<(const PlatformParameters &a, const PlatformParameters &b) diff --git a/third_party/vulkan-headers/BUILD.gn b/third_party/vulkan-headers/BUILD.gn deleted file mode 100644 index e61be5643f..0000000000 --- a/third_party/vulkan-headers/BUILD.gn +++ /dev/null @@ -1,40 +0,0 @@ -# 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" ] -} diff --git a/third_party/vulkan-headers/vulkan_headers_script_deps.gni b/third_party/vulkan-headers/vulkan_headers_script_deps.gni deleted file mode 100644 index 552bf6edf4..0000000000 --- a/third_party/vulkan-headers/vulkan_headers_script_deps.gni +++ /dev/null @@ -1,13 +0,0 @@ -# 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", -] diff --git a/third_party/vulkan-tools/BUILD.gn b/third_party/vulkan-tools/BUILD.gn deleted file mode 100644 index 0fe1abd18e..0000000000 --- a/third_party/vulkan-tools/BUILD.gn +++ /dev/null @@ -1,192 +0,0 @@ -# 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) - } -} diff --git a/third_party/vulkan-validation-layers/BUILD.gn b/third_party/vulkan-validation-layers/BUILD.gn deleted file mode 100644 index 36e0800d42..0000000000 --- a/third_party/vulkan-validation-layers/BUILD.gn +++ /dev/null @@ -1,521 +0,0 @@ -# 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 Validation Layers -# Validation repo is at -# https://github.com/KhronosGroup/Vulkan-ValidationLayers - -import("../../gni/angle.gni") - -# Fuchsia has non-upstream changes to the vulkan layers, so we don't want -# to build it from upstream sources. -assert(!is_fuchsia) - -import("$angle_root/third_party/vulkan-headers/vulkan_headers_script_deps.gni") - -vulkan_undefine_configs = [] -if (is_win) { - vulkan_undefine_configs += [ - "//build/config/win:nominmax", - "//build/config/win:unicode", - ] -} - -raw_root_out_dir = rebase_path(root_out_dir, root_build_dir) -raw_data_dir = rebase_path("$root_out_dir/$angle_data_dir", 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_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", - "layer_dispatch_table_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_thread_safety_h", - "thread_safety.h", - "thread_safety_generator.py", - ], - [ - "vulkan_gen_thread_safety_cpp", - "thread_safety.cpp", - "thread_safety_generator.py", - ], - [ - "vulkan_gen_typemap_helper", - "vk_typemap_helper.h", - "helper_file_generator.py", - ], - [ - "vulkan_gen_object_tracker_h", - "object_tracker.h", - "object_tracker_generator.py", - ], - [ - "vulkan_gen_object_tracker_cpp", - "object_tracker.cpp", - "object_tracker_generator.py", - ], - [ - "vulkan_gen_parameter_validation_cpp", - "parameter_validation.cpp", - "parameter_validation_generator.py", - ], - [ - "vulkan_gen_parameter_validation_h", - "parameter_validation.h", - "parameter_validation_generator.py", - ], - [ - "vulkan_gen_layer_chassis_h", - "chassis.h", - "layer_chassis_generator.py", - ], - [ - "vulkan_gen_layer_chassis_cpp", - "chassis.cpp", - "layer_chassis_generator.py", - ], - [ - "vulkan_gen_layer_chassis_dispatch_h", - "layer_chassis_dispatch.h", - "layer_chassis_dispatch_generator.py", - ], - [ - "vulkan_gen_layer_chassis_dispatch_cpp", - "layer_chassis_dispatch.cpp", - "layer_chassis_dispatch_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/dispatch_table_helper_generator.py", - "src/scripts/helper_file_generator.py", - "src/scripts/layer_dispatch_table_generator.py", - "src/scripts/lvl_genvk.py", - "src/scripts/object_tracker_generator.py", - "src/scripts/parameter_validation_generator.py", - "src/scripts/thread_safety_generator.py", - "src/scripts/layer_chassis_generator.py", - "src/scripts/layer_chassis_dispatch_generator.py", - ] - outputs = [ - "$vulkan_gen_dir/{{source_file_part}}", - ] -} - -# This special action is needed to remove previously-generated header files. -# Otherwise the cpp files can pick up the old header files and cause build -# failures. -action("vulkan_clean_gen_headers") { - script = "$angle_root/scripts/remove_files.py" - deps = [ - ":python_gen_deps", - ] - outputs = [ - "$vulkan_gen_dir/vk_validation_error_messages_h_is_removed", - ] - args = [ - "$raw_vulkan_gen_dir/vk_validation_error_messages_h_is_removed", - "$raw_vulkan_gen_dir/vk_validation_error_messages.h", - ] -} - -# This special action is needed to remove old VVL objects that are now renamed. -action("vulkan_clean_old_validation_layer_objects") { - script = "$angle_root/scripts/remove_files.py" - - # inputs is a (random) new file since the vvl roll, used to ensure the cleanup is done only once - inputs = [ - "src/layers/gpu_validation.cpp", - ] - outputs = [ - "$vulkan_gen_dir/old_vvl_files_are_removed", - ] - args = [ - "$raw_vulkan_gen_dir/old_vvl_files_are_removed", - "$raw_root_out_dir/libVkLayer*", - "$raw_root_out_dir/VkLayer*", - "$raw_data_dir/VkLayer*.json", - ] -} - -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", - ":vulkan_clean_gen_headers", - ":vulkan_clean_old_validation_layer_objects", - ] - script = "$vulkan_gen_dir/lvl_genvk.py" - inputs = [ - "$vulkan_gen_dir/$dep", - "$vulkan_gen_dir/common_codegen.py", - "src/layers/vk_validation_error_messages.h", - ] - 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", - ] - } -} - -raw_spirv_tools_dir = rebase_path("${angle_spirv_tools_dir}", root_build_dir) - -spirv_git_is_present = exec_script("$angle_root/src/commit_id.py", - [ - "check", - raw_spirv_tools_dir, - ], - "value") - -spirv_use_commit_id = spirv_git_is_present == 1 - -if (spirv_use_commit_id) { - # This could be generalized to a foreach if other revisions are added. - action("spirv_tools_external_revision_generate") { - script = "src/scripts/external_revision_generator.py" - inputs = [ - "//DEPS", - ] - outputs = [ - "$vulkan_gen_dir/spirv_tools_commit_id.h", - ] - args = [ - "--git_dir", - "$raw_spirv_tools_dir", - "-s", - "SPIRV_TOOLS_COMMIT_ID", - "-o", - "$raw_vulkan_gen_dir/spirv_tools_commit_id.h", - ] - } -} else { - copy("spirv_tools_external_revision_generate") { - sources = [ - "dummy_spirv_tools_commit_id.h", - ] - outputs = [ - "$vulkan_gen_dir/spirv_tools_commit_id.h", - ] - } -} - -config("vulkan_generated_files_config") { - include_dirs = [ vulkan_gen_dir ] -} - -group("vulkan_generate_helper_files") { - public_deps = [ - ":spirv_tools_external_revision_generate", - "$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", - "API_NAME=\"Vulkan\"", - ] - 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\"", - ] - } -} - -# The validation layers -# --------------------- - -config("vulkan_layer_config") { - include_dirs = [ "src/layers" ] -} - -core_validation_sources = [ - # This file is manually included in the layer - # "$vulkan_gen_dir/vk_safe_struct.cpp", - "$vulkan_gen_dir/vk_safe_struct.h", - "src/layers/buffer_validation.cpp", - "src/layers/buffer_validation.h", - "src/layers/core_validation.cpp", - "src/layers/core_validation.h", - "src/layers/convert_to_renderpass2.cpp", - "src/layers/descriptor_sets.cpp", - "src/layers/descriptor_sets.h", - "src/layers/gpu_validation.cpp", - "src/layers/gpu_validation.h", - "src/layers/shader_validation.cpp", - "src/layers/shader_validation.h", - "src/layers/xxhash.c", - "src/layers/xxhash.h", -] - -object_lifetimes_sources = [ - "$vulkan_gen_dir/object_tracker.cpp", - "$vulkan_gen_dir/object_tracker.h", - "src/layers/object_tracker_utils.cpp", -] - -stateless_validation_sources = [ - "$vulkan_gen_dir/parameter_validation.cpp", - "$vulkan_gen_dir/parameter_validation.h", - "src/layers/parameter_validation_utils.cpp", -] - -thread_safety_sources = [ - "$vulkan_gen_dir/thread_safety.cpp", - "$vulkan_gen_dir/thread_safety.h", -] - -unique_objects_sources = [] - -chassis_sources = [ - "$vulkan_gen_dir/chassis.cpp", - "$vulkan_gen_dir/chassis.h", - "$vulkan_gen_dir/layer_chassis_dispatch.cpp", - "$vulkan_gen_dir/layer_chassis_dispatch.h", -] - -core_validation_deps = [ ":vulkan_core_validation_glslang" ] - -object_lifetimes_deps = [ - ":vulkan_gen_object_tracker_cpp", - ":vulkan_gen_object_tracker_h", -] - -stateless_validation_deps = [ ":vulkan_gen_stateless_validation" ] - -thread_safety_deps = [ - ":vulkan_gen_thread_safety_cpp", - ":vulkan_gen_thread_safety_h", -] - -unique_objects_deps = [] - -chassis_deps = [ - ":vulkan_gen_layer_chassis_cpp", - ":vulkan_gen_layer_chassis_h", - ":vulkan_gen_layer_chassis_dispatch_cpp", - ":vulkan_gen_layer_chassis_dispatch_h", -] - -layers = [ - [ - "core_validation", - core_validation_sources + chassis_sources, - core_validation_deps + chassis_deps, - [ "BUILD_CORE_VALIDATION" ], - ], - [ - "object_lifetimes", - object_lifetimes_sources + chassis_sources, - object_lifetimes_deps + chassis_deps, - [ "BUILD_OBJECT_TRACKER" ], - ], - [ - "stateless_validation", - stateless_validation_sources + chassis_sources, - stateless_validation_deps + chassis_deps, - [ "BUILD_PARAMETER_VALIDATION" ], - ], - [ - "thread_safety", - thread_safety_sources + chassis_sources, - thread_safety_deps + chassis_deps, - [ "BUILD_THREAD_SAFETY" ], - ], - [ - "unique_objects", - unique_objects_sources + chassis_sources, - unique_objects_deps + chassis_deps, - [ "LAYER_CHASSIS_CAN_WRAP_HANDLES" ], - ], -] - -if (!is_android) { - raw_vulkan_layers_dir = rebase_path("src", root_build_dir) - - action("vulkan_gen_json_files") { - script = "$angle_root/scripts/generate_vulkan_layers_json.py" - public_deps = [ - ":vulkan_clean_old_validation_layer_objects", - ] - json_names = [ - "VkLayer_core_validation.json", - "VkLayer_object_lifetimes.json", - "VkLayer_stateless_validation.json", - "VkLayer_standard_validation.json", - "VkLayer_thread_safety.json", - "VkLayer_unique_objects.json", - ] - sources = [ - "../vulkan-headers/src/include/vulkan/vulkan_core.h", - ] - outputs = [] - foreach(json_name, json_names) { - sources += [ "src/layers/json/$json_name.in" ] - outputs += [ "$root_out_dir/$angle_data_dir/$json_name" ] - } - args = [ - "$raw_vulkan_layers_dir/layers/json", - rebase_path("$root_out_dir/$angle_data_dir", root_build_dir), - ] + rebase_path(sources, root_build_dir) - - # The layer JSON files are part of the necessary data deps. - data = outputs - } -} - -source_set("vulkan_layer_utils") { - sources = [ - "src/layers/vk_format_utils.cpp", - "src/layers/vk_format_utils.h", - "src/layers/vk_layer_config.cpp", - "src/layers/vk_layer_config.h", - "src/layers/vk_layer_extension_utils.cpp", - "src/layers/vk_layer_extension_utils.h", - "src/layers/vk_layer_utils.cpp", - "src/layers/vk_layer_utils.h", - ] - public_configs = [ - "$angle_root:vulkan_config", - ":vulkan_internal_config", - ] - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - public_deps = [ - ":vulkan_generate_helper_files", - ] - configs -= vulkan_undefine_configs -} - -config("vulkan_core_validation_config") { - include_dirs = [ "${angle_glslang_dir}" ] -} - -source_set("vulkan_core_validation_glslang") { - public_deps = [ - "${angle_spirv_tools_dir}:spvtools", - "${angle_spirv_tools_dir}:spvtools_opt", - "${angle_spirv_tools_dir}:spvtools_val", - ] - public_configs = [ ":vulkan_core_validation_config" ] -} - -config("vulkan_stateless_validation_config") { - if (is_clang) { - cflags_cc = [ "-Wno-unused-const-variable" ] - } -} - -source_set("vulkan_gen_stateless_validation") { - deps = [ - ":vulkan_gen_parameter_validation_cpp", - ":vulkan_gen_parameter_validation_h", - ] - public_configs = [ ":vulkan_stateless_validation_config" ] -} - -foreach(layer_info, layers) { - name = layer_info[0] - shared_library("VkLayer_$name") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - configs -= vulkan_undefine_configs - public_configs = [ ":vulkan_layer_config" ] - deps = [ - ":vulkan_layer_utils", - ] - if (layer_info[2] != "") { - deps += layer_info[2] - } - sources = layer_info[1] - if (is_win) { - sources += [ "src/layers/VkLayer_$name.def" ] - } - if (is_linux || is_android) { - ldflags = [ "-Wl,-Bsymbolic,--exclude-libs,ALL" ] - } - if (is_android) { - libs = [ - "log", - "nativewindow", - ] - configs -= [ "//build/config/android:hide_all_but_jni_onload" ] - } - defines = layer_info[3] - } -} - -group("vulkan_validation_layers") { - data_deps = [] - foreach(layer_info, layers) { - name = layer_info[0] - data_deps += [ ":VkLayer_$name" ] - } -} diff --git a/third_party/vulkan-validation-layers/dummy_spirv_tools_commit_id.h b/third_party/vulkan-validation-layers/dummy_spirv_tools_commit_id.h deleted file mode 100644 index e1793bdff5..0000000000 --- a/third_party/vulkan-validation-layers/dummy_spirv_tools_commit_id.h +++ /dev/null @@ -1,10 +0,0 @@ -// -// 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"