Commit 1f08ab28 by Jamie Madill Committed by Commit Bot

Re-land "GN: Componentize vulkan back-end build."

Re-land fixes angle_end2end_tests disabling Vulkan. This moves the build configuration into the Vulkan back-end dir. This should be a little easier to maintain as all Vulkan-related config is in one place. Note that this should not interfere with Skia's build as they do not import the Vulkan back-end sources. One additional possiblity that this enables is testing other compile-time permutations of the Vulkan back-end more easily. For example we could make a simple change to enable compile testing of the Vulkan back-end with custom command buffers disabled. Also fixes a few errors affecting less tested configs. Bug: angleproject:3943 Change-Id: I0161668abcc58fcf529dde120998d4b99445fdd5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1838454Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 901aa3fa
......@@ -29,9 +29,6 @@ declare_args() {
# Don't build extra (test, samples etc) for Windows UWP. We don't have
# infrastructure (e.g. windowing helper functions) in place to run them.
angle_build_all = !angle_is_winuwp
# Currently SwiftShader's Vulkan front-end doesn't build on Android.
angle_swiftshader = !is_android
}
if (!build_with_chromium && angle_build_all) {
......@@ -103,12 +100,6 @@ config("internal_config") {
defines += [ "ANGLE_IS_32_BIT_CPU" ]
}
if (angle_enable_vulkan) {
if (angle_enable_vulkan_gpu_trace_events) {
defines += [ "ANGLE_ENABLE_VULKAN_GPU_TRACE_EVENTS=1" ]
}
}
if (angle_enable_trace) {
defines += [ "ANGLE_ENABLE_DEBUG_TRACE=1" ]
}
......@@ -207,6 +198,7 @@ angle_static_library("preprocessor") {
public_deps = [
":angle_common",
":angle_translator_headers",
]
}
......@@ -301,11 +293,18 @@ config("angle_image_util_config") {
]
}
angle_source_set("angle_image_util_headers") {
sources = libangle_image_util_headers
public_deps = [
":angle_common",
]
}
angle_static_library("angle_image_util") {
sources = libangle_image_util_sources
public_configs += [ ":angle_image_util_config" ]
public_deps = [
":angle_common",
":angle_image_util_headers",
]
}
......@@ -387,6 +386,13 @@ angle_static_library("angle_gpu_info_util") {
}
}
angle_source_set("angle_translator_headers") {
sources = angle_translator_exported_headers
public_deps = [
":includes",
]
}
angle_static_library("translator") {
sources = angle_translator_sources
defines = []
......@@ -420,6 +426,7 @@ angle_static_library("translator") {
public_deps = [
":angle_common",
":angle_translator_headers",
]
if (is_win) {
......@@ -506,15 +513,13 @@ config("angle_backend_config") {
defines += [ "ANGLE_ENABLE_OPENGL_NULL" ]
}
}
if (angle_enable_vulkan) {
defines += [ "ANGLE_ENABLE_VULKAN" ]
if (angle_enable_custom_vulkan_cmd_buffers) {
defines += [ "ANGLE_USE_CUSTOM_VULKAN_CMD_BUFFERS=1" ]
}
}
if (angle_enable_null) {
defines += [ "ANGLE_ENABLE_NULL" ]
}
if (angle_enable_vulkan) {
configs = [ "src/libANGLE/renderer/vulkan:angle_vulkan_backend_config" ]
}
}
config("libANGLE_config") {
......@@ -546,111 +551,12 @@ config("libANGLE_config") {
}
}
if (angle_enable_vulkan) {
config("vulkan_config") {
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=\"swiftshader/libvk_swiftshader_icd.json\"",
]
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",
]
script = "scripts/generate_vulkan_layers_json.py"
sources = [
"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/swiftshader/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/swiftshader", 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",
]
}
}
angle_source_set("libANGLE_headers") {
sources = libangle_headers
public_deps = [
":angle_common",
":angle_translator_headers",
]
}
angle_source_set("libANGLE_base") {
......@@ -667,6 +573,7 @@ angle_source_set("libANGLE_base") {
":angle_common",
":angle_gpu_info_util",
":angle_version",
":libANGLE_headers",
":translator",
]
deps = [
......@@ -674,6 +581,10 @@ angle_source_set("libANGLE_base") {
":includes",
]
if (angle_enable_vulkan) {
public_deps += [ "src/libANGLE/renderer/vulkan:angle_vulkan_backend" ]
}
# Enable extra Chromium style warnings for libANGLE.
if (is_clang) {
suppressed_configs -= [ "//build/config/clang:find_bad_constructs" ]
......@@ -748,39 +659,6 @@ angle_source_set("libANGLE_base") {
}
}
if (angle_enable_vulkan) {
sources += libangle_vulkan_sources
if (is_win) {
sources += libangle_vulkan_win32_sources
}
if (is_linux) {
sources += libangle_vulkan_xcb_sources
}
if (is_fuchsia) {
sources += libangle_vulkan_fuchsia_sources
deps += [
"$angle_root/src/common/fuchsia_egl",
"$angle_root/src/common/fuchsia_egl:backend",
]
}
if (is_android) {
sources += libangle_vulkan_android_sources
libs += [ "vulkan" ]
}
deps += [
":angle_vulkan",
"${angle_glslang_dir}:glslang_default_resource_limits_sources",
"${angle_glslang_dir}:glslang_sources",
"${angle_spirv_tools_dir}:spvtools_val",
]
public_deps +=
[ "$angle_root/third_party/vulkan-headers/src:vulkan_headers" ]
# Include generated shaders.
import("src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.gni")
sources += angle_vulkan_internal_shaders
}
if (angle_enable_null) {
sources += libangle_null_sources
}
......@@ -1189,8 +1067,8 @@ foreach(is_shared_library,
if (is_fuchsia) {
sources += util_fuchsia_sources
public_deps += [
":angle_vulkan",
"$angle_root/src/common/fuchsia_egl",
"src/libANGLE/renderer/vulkan:angle_vulkan",
"//third_party/fuchsia-sdk/sdk:async_loop_cpp",
"//third_party/fuchsia-sdk/sdk:async_loop_default",
"//third_party/fuchsia-sdk/sdk:fdio",
......
......@@ -87,14 +87,6 @@ declare_args() {
angle_enable_vulkan && !is_ubsan && !is_tsan && !is_asan &&
(is_debug || dcheck_always_on)
if (angle_enable_vulkan) {
# Enable Vulkan GPU trace event capability
angle_enable_vulkan_gpu_trace_events = false
# Enable custom (cpu-side) secondary command buffers
angle_enable_custom_vulkan_cmd_buffers = true
}
# Disable overlay by default
angle_enable_overlay = false
}
......
{
"src/libANGLE/renderer/vulkan/gen_vk_internal_shaders.py":
"b05fa7c291a7c05d9bb1dd075990275b",
"8a13b2f4f77d51928db01eceb2c4ad44",
"src/libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000000.inc":
"31832c377e532cd5ea05aab57154b8f8",
"src/libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000001.inc":
......
......@@ -2,6 +2,13 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
angle_translator_exported_headers = [
"include/GLSLANG/ShaderLang.h",
"include/GLSLANG/ShaderVars.h",
"src/compiler/translator/blocklayout.h",
"src/compiler/translator/blocklayoutHLSL.h",
]
angle_translator_sources = [
"include/EGL/egl.h",
"include/EGL/eglext.h",
......@@ -13,8 +20,6 @@ angle_translator_sources = [
"include/GLES3/gl3platform.h",
"include/GLES3/gl31.h",
"include/GLES3/gl32.h",
"include/GLSLANG/ShaderLang.h",
"include/GLSLANG/ShaderVars.h",
"include/KHR/khrplatform.h",
"include/angle_gl.h",
"src/compiler/translator/BaseTypes.h",
......@@ -102,7 +107,6 @@ angle_translator_sources = [
"src/compiler/translator/VariablePacker.cpp",
"src/compiler/translator/VariablePacker.h",
"src/compiler/translator/blocklayout.cpp",
"src/compiler/translator/blocklayout.h",
"src/compiler/translator/glslang.h",
"src/compiler/translator/glslang_lex.cpp",
"src/compiler/translator/glslang_tab.cpp",
......@@ -247,7 +251,6 @@ angle_translator_hlsl_sources = [
"src/compiler/translator/AtomicCounterFunctionHLSL.cpp",
"src/compiler/translator/AtomicCounterFunctionHLSL.h",
"src/compiler/translator/blocklayoutHLSL.cpp",
"src/compiler/translator/blocklayoutHLSL.h",
"src/compiler/translator/BuiltInFunctionEmulatorHLSL.cpp",
"src/compiler/translator/BuiltInFunctionEmulatorHLSL.h",
"src/compiler/translator/OutputHLSL.cpp",
......
# 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("../../../../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.
angle_swiftshader = !is_android
}
_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",
"GlslangWrapper.cpp",
"GlslangWrapper.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_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 (is_linux) {
_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",
]
}
config("vulkan_config") {
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=\"swiftshader/libvk_swiftshader_icd.json\"",
]
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",
]
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/swiftshader/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/swiftshader", 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_glslang_dir:glslang_default_resource_limits_sources",
"$angle_glslang_dir:glslang_sources",
"$angle_root:angle_image_util",
"$angle_spirv_tools_dir:spvtools_val",
]
public_deps = [
"$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
}
......@@ -596,7 +596,7 @@ def get_destroy_call(shader_and_variation):
def shader_path(shader):
return '"src/libANGLE/renderer/vulkan/%s"' % slash(shader)
return '"%s"' % slash(shader)
def main():
......
......@@ -281,13 +281,17 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
VkDeviceSize offset,
uint32_t drawCount,
uint32_t stride);
void drawIndirect(const Buffer &buffer,
VkDeviceSize offset,
uint32_t drawCount,
uint32_t stride);
VkResult end();
void endQuery(VkQueryPool queryPool, uint32_t query);
void endRenderPass();
void executeCommands(uint32_t commandBufferCount, const CommandBuffer *commandBuffers);
void getMemoryUsageStats(size_t *usedMemoryOut, size_t *allocatedMemoryOut);
void getMemoryUsageStats(size_t *usedMemoryOut, size_t *allocatedMemoryOut) const;
void executionBarrier(VkPipelineStageFlags stageMask);
......@@ -808,7 +812,7 @@ ANGLE_INLINE void CommandBuffer::executeCommands(uint32_t commandBufferCount,
}
ANGLE_INLINE void CommandBuffer::getMemoryUsageStats(size_t *usedMemoryOut,
size_t *allocatedMemoryOut)
size_t *allocatedMemoryOut) const
{
// No data available.
*usedMemoryOut = 0;
......@@ -979,6 +983,15 @@ ANGLE_INLINE void CommandBuffer::drawIndexedIndirect(const Buffer &buffer,
vkCmdDrawIndexedIndirect(mHandle, buffer.getHandle(), offset, drawCount, stride);
}
ANGLE_INLINE void CommandBuffer::drawIndirect(const Buffer &buffer,
VkDeviceSize offset,
uint32_t drawCount,
uint32_t stride)
{
ASSERT(valid());
vkCmdDrawIndirect(mHandle, buffer.getHandle(), offset, drawCount, stride);
}
ANGLE_INLINE void CommandBuffer::dispatch(uint32_t groupCountX,
uint32_t groupCountY,
uint32_t groupCountZ)
......
......@@ -159,7 +159,7 @@ if (is_win || is_linux || is_mac || is_android || is_fuchsia) {
use_native_activity = true
}
if (angle_enable_vulkan) {
deps += [ "${angle_root}:angle_vulkan" ]
deps += [ "${angle_root}/src/libANGLE/renderer/vulkan:angle_vulkan" ]
}
}
}
......
......@@ -17,7 +17,6 @@
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include "GLSLANG/ShaderLang.h"
#include "angle_test_instantiate.h"
#include "util/EGLPlatformParameters.h"
......
......@@ -238,7 +238,7 @@ if (!is_android) {
configs += [ "//build/config/compiler:no_chromium_code" ]
configs += [ ":vulkan_internal_config" ]
public_configs = [
"$angle_root:vulkan_config",
"$angle_root/src/libANGLE/renderer/vulkan:vulkan_config",
":vulkan_loader_config",
]
configs -= vulkan_undefine_configs
......
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