Commit 2ed71c81 by Jamie Madill Committed by Commit Bot

Vulkan: Isolate DisplayVk.h from Display.cpp.

With this change we no longer can access Vulkan (or Volk) headers in the ANGLE front-end. The only header that needs to be visible is the new "DisplayVk_api.h". This will simplify a bit of Volk integration. Also reworks how the entry points and headers are exposed to the tests. Bug: angleproject:3740 Change-Id: Ic1434f304619427ed6ad6370bc090ceb7858df94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1936707 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTobin Ehlis <tobine@google.com>
parent 2a72553d
......@@ -1135,7 +1135,7 @@ foreach(is_shared_library,
if (is_fuchsia) {
sources += util_fuchsia_sources
public_deps += [
"$angle_root/src/common/fuchsia_egl",
"src/common/fuchsia_egl",
"//third_party/fuchsia-sdk/sdk:async_loop_cpp",
"//third_party/fuchsia-sdk/sdk:async_loop_default",
"//third_party/fuchsia-sdk/sdk:fdio",
......
......@@ -68,19 +68,7 @@
#endif // defined(ANGLE_ENABLE_NULL)
#if defined(ANGLE_ENABLE_VULKAN)
# if defined(ANGLE_PLATFORM_WINDOWS)
# include "libANGLE/renderer/vulkan/win32/DisplayVkWin32.h"
# elif defined(ANGLE_PLATFORM_LINUX)
# include "libANGLE/renderer/vulkan/xcb/DisplayVkXcb.h"
# elif defined(ANGLE_PLATFORM_ANDROID)
# include "libANGLE/renderer/vulkan/android/DisplayVkAndroid.h"
# elif defined(ANGLE_PLATFORM_FUCHSIA)
# include "libANGLE/renderer/vulkan/fuchsia/DisplayVkFuchsia.h"
# elif defined(ANGLE_PLATFORM_GGP)
# include "libANGLE/renderer/vulkan/ggp/DisplayVkGGP.h"
# else
# error Unsupported Vulkan platform.
# endif
# include "libANGLE/renderer/vulkan/DisplayVk_api.h"
#endif // defined(ANGLE_ENABLE_VULKAN)
#if defined(ANGLE_ENABLE_METAL)
......@@ -277,15 +265,30 @@ rx::DisplayImpl *CreateDisplayFromAttribs(const AttributeMap &attribMap, const D
case EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE:
#if defined(ANGLE_ENABLE_VULKAN)
# if defined(ANGLE_PLATFORM_WINDOWS)
impl = new rx::DisplayVkWin32(state);
if (rx::IsVulkanWin32DisplayAvailable())
{
impl = rx::CreateVulkanWin32Display(state);
}
# elif defined(ANGLE_PLATFORM_LINUX)
impl = new rx::DisplayVkXcb(state);
if (rx::IsVulkanXcbDisplayAvailable())
{
impl = rx::CreateVulkanXcbDisplay(state);
}
# elif defined(ANGLE_PLATFORM_ANDROID)
impl = new rx::DisplayVkAndroid(state);
if (rx::IsVulkanAndroidDisplayAvailable())
{
impl = rx::CreateVulkanAndroidDisplay(state);
}
# elif defined(ANGLE_PLATFORM_FUCHSIA)
impl = new rx::DisplayVkFuchsia(state);
if (rx::IsVulkanFuchsiaDisplayAvailable())
{
impl = rx::CreateVulkanFuchsiaDisplay(state);
}
# elif defined(ANGLE_PLATFORM_GGP)
impl = new rx::DisplayVkGGP(state);
if (rx::IsVulkanGGPDisplayAvailable())
{
impl = rx::CreateVulkanGGPDisplay(state);
}
# else
# error Unsupported Vulkan platform.
# endif
......
......@@ -35,6 +35,7 @@ _vulkan_backend_sources = [
"DeviceVk.h",
"DisplayVk.cpp",
"DisplayVk.h",
"DisplayVk_api.h",
"FenceNVVk.cpp",
"FenceNVVk.h",
"FramebufferVk.cpp",
......@@ -216,44 +217,25 @@ if (angle_swiftshader) {
}
}
# Use this target to include everything ANGLE needs for Vulkan.
group("angle_vulkan") {
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/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",
]
} else if (!is_android) {
public_deps += [ "$angle_root/third_party/vulkan-loader/src:libvulkan" ]
}
}
......@@ -272,27 +254,44 @@ angle_source_set("angle_vulkan_backend") {
sources = _vulkan_backend_sources
libs = []
deps = [
":angle_vulkan",
":angle_vulkan_entry_points",
"$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",
"$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" ]
}
configs += [ ":vulkan_config" ]
data_deps = []
# Include generated shaders.
import("vk_internal_shaders_autogen.gni")
sources += angle_vulkan_internal_shaders
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" ]
}
if (angle_enable_vulkan_validation_layers) {
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_swiftshader) {
data_deps += [
":angle_swiftshader_icd",
"$swiftshader_dir/src/Vulkan:swiftshader_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.
//
// DisplayVk_api.h:
// Defines the Vulkan Display APIs to be used by the code outside the back-end.
//
#ifndef LIBANGLE_RENDERER_VULKAN_DISPLAYVK_API_H_
#define LIBANGLE_RENDERER_VULKAN_DISPLAYVK_API_H_
#include "libANGLE/renderer/DisplayImpl.h"
namespace rx
{
#if defined(ANGLE_PLATFORM_WINDOWS)
bool IsVulkanWin32DisplayAvailable();
DisplayImpl *CreateVulkanWin32Display(const egl::DisplayState &state);
#endif // defined(ANGLE_PLATFORM_WINDOWS)
#if defined(ANGLE_PLATFORM_LINUX)
bool IsVulkanXcbDisplayAvailable();
DisplayImpl *CreateVulkanXcbDisplay(const egl::DisplayState &state);
#endif // defined(ANGLE_PLATFORM_LINUX)
#if defined(ANGLE_PLATFORM_ANDROID)
bool IsVulkanAndroidDisplayAvailable();
DisplayImpl *CreateVulkanAndroidDisplay(const egl::DisplayState &state);
#endif // defined(ANGLE_PLATFORM_ANDROID)
#if defined(ANGLE_PLATFORM_FUCHSIA)
bool IsVulkanFuchsiaDisplayAvailable();
DisplayImpl *CreateVulkanFuchsiaDisplay(const egl::DisplayState &state);
#endif // defined(ANGLE_PLATFORM_FUCHSIA)
#if defined(ANGLE_PLATFORM_GGP)
bool IsVulkanGGPDisplayAvailable();
DisplayImpl *CreateVulkanGGPDisplay(const egl::DisplayState &state);
#endif // defined(ANGLE_PLATFORM_GGP)
} // namespace rx
#endif /* LIBANGLE_RENDERER_VULKAN_DISPLAYVK_API_H_ */
......@@ -99,4 +99,13 @@ const char *DisplayVkAndroid::getWSIExtension() const
return VK_KHR_ANDROID_SURFACE_EXTENSION_NAME;
}
bool IsVulkanAndroidDisplayAvailable()
{
return true;
}
DisplayImpl *CreateVulkanAndroidDisplay(const egl::DisplayState &state)
{
return new DisplayVkAndroid(state);
}
} // namespace rx
......@@ -52,4 +52,13 @@ const char *DisplayVkFuchsia::getWSILayer() const
return "VK_LAYER_FUCHSIA_imagepipe_swapchain";
}
bool IsVulkanFuchsiaDisplayAvailable()
{
return true;
}
DisplayImpl *CreateVulkanFuchsiaDisplay(const egl::DisplayState &state)
{
return new DisplayVkFuchsia(state);
}
} // namespace rx
......@@ -44,4 +44,14 @@ const char *DisplayVkGGP::getWSIExtension() const
{
return VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME;
}
bool IsVulkanGGPDisplayAvailable()
{
return true;
}
DisplayImpl *CreateVulkanGGPDisplay(const egl::DisplayState &state)
{
return new DisplayVkGGP(state);
}
} // namespace rx
......@@ -167,4 +167,13 @@ const char *DisplayVkWin32::getWSIExtension() const
return VK_KHR_WIN32_SURFACE_EXTENSION_NAME;
}
bool IsVulkanWin32DisplayAvailable()
{
return true;
}
DisplayImpl *CreateVulkanWin32Display(const egl::DisplayState &state)
{
return new DisplayVkWin32(state);
}
} // namespace rx
......@@ -112,4 +112,13 @@ const char *DisplayVkXcb::getWSIExtension() const
return VK_KHR_XCB_SURFACE_EXTENSION_NAME;
}
bool IsVulkanXcbDisplayAvailable()
{
return true;
}
DisplayImpl *CreateVulkanXcbDisplay(const egl::DisplayState &state)
{
return new DisplayVkXcb(state);
}
} // namespace rx
......@@ -134,9 +134,6 @@ if (is_win || is_linux || is_mac || is_android || is_fuchsia) {
if (angle_use_x11) {
sources += angle_end2end_tests_x11_sources
}
if (angle_enable_vulkan) {
sources += angle_end2end_tests_vulkan_sources
}
configs += [
"${angle_root}:libANGLE_config",
......@@ -158,7 +155,14 @@ if (is_win || is_linux || is_mac || is_android || is_fuchsia) {
]
if (angle_enable_vulkan) {
deps += [ "${angle_root}/src/libANGLE/renderer/vulkan:angle_vulkan" ]
sources += [
"gl_tests/VulkanExternalImageTest.cpp",
"test_utils/VulkanExternalHelper.cpp",
"test_utils/VulkanExternalHelper.h",
]
deps += [
"$angle_root/src/libANGLE/renderer/vulkan:angle_vulkan_entry_points",
]
}
}
}
......@@ -175,10 +179,6 @@ if (is_win || is_linux || is_mac || is_android) {
sources += angle_white_box_tests_win_sources
}
if (angle_enable_vulkan) {
sources += angle_white_box_tests_vulkan_sources
}
if (is_mac) {
sources += angle_white_box_tests_mac_sources
}
......@@ -196,6 +196,13 @@ if (is_win || is_linux || is_mac || is_android) {
"${angle_root}:preprocessor",
"${angle_root}:translator",
]
if (angle_enable_vulkan) {
sources += angle_white_box_tests_vulkan_sources
deps += [
"$angle_root/src/libANGLE/renderer/vulkan:angle_vulkan_entry_points",
]
}
}
}
......@@ -222,7 +229,10 @@ if (is_win || is_linux || is_android || is_mac) {
if (angle_enable_vulkan) {
sources += angle_white_box_perf_tests_vulkan_sources
deps += [ "${angle_glslang_dir}:glslang_sources" ]
deps += [
"$angle_glslang_dir:glslang_sources",
"$angle_root/src/libANGLE/renderer/vulkan:angle_vulkan_entry_points",
]
}
configs += [
......
......@@ -176,8 +176,3 @@ angle_end2end_tests_win_sources = [
"egl_tests/media/yuvtest.inl",
]
angle_end2end_tests_x11_sources = [ "egl_tests/EGLX11VisualTest.cpp" ]
angle_end2end_tests_vulkan_sources = [
"gl_tests/VulkanExternalImageTest.cpp",
"test_utils/VulkanExternalHelper.cpp",
"test_utils/VulkanExternalHelper.h",
]
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