From 38016632a14e4e45434928c36084d06844a08ed8 Mon Sep 17 00:00:00 2001 From: Jamie Madill Date: Wed, 11 Nov 2020 08:04:45 -0500 Subject: [PATCH] Vulkan: Enable async feature in end2end_tests. This adds a new async-command-queue-enabled config that we run against most of the GLES tests in angle_end2end_tests. The tests now test both with and without the threaded command queue. Bug: b/172704839 Change-Id: Ife75f8328f23ac150cddf8ad8a6c4b8fc2d83986 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2532655 Reviewed-by: Tim Van Patten Reviewed-by: Courtney Goeltzenleuchter Commit-Queue: Jamie Madill --- .../gl_tests/VulkanExternalImageTest.cpp | 24 +++++++++++++++++++ src/tests/test_utils/ANGLETest.h | 5 ++++ src/tests/test_utils/angle_test_configs.cpp | 5 ++++ src/tests/test_utils/angle_test_configs.h | 7 ++++++ src/tests/test_utils/angle_test_instantiate.h | 17 +++++++------ util/EGLPlatformParameters.h | 1 + util/EGLWindow.cpp | 7 ++++++ 7 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/tests/gl_tests/VulkanExternalImageTest.cpp b/src/tests/gl_tests/VulkanExternalImageTest.cpp index 25003e5f0..45da3c5b5 100644 --- a/src/tests/gl_tests/VulkanExternalImageTest.cpp +++ b/src/tests/gl_tests/VulkanExternalImageTest.cpp @@ -758,6 +758,10 @@ TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdWithSemaphores) { ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_semaphore_fd")); + + // http://issuetracker.google.com/173004081 + ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsLinux() && isAsyncCommandQueueFeatureEnabled()); + RunShouldClearWithSemaphoresTest(false, kDefaultImageCreateFlags, kDefaultImageUsageFlags, isSwiftshader(), enableDebugLayers()); @@ -770,6 +774,10 @@ TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdWithSemaphoresWithFlags) ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_semaphore_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_memory_object_flags")); + + // http://issuetracker.google.com/173004081 + ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsLinux() && isAsyncCommandQueueFeatureEnabled()); + RunShouldClearWithSemaphoresTest(true, kDefaultImageCreateFlags, kDefaultImageUsageFlags, isSwiftshader(), enableDebugLayers()); @@ -781,6 +789,10 @@ TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdWithSemaphoresNoStorage) ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_semaphore_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_memory_object_flags")); + + // http://issuetracker.google.com/173004081 + ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsLinux() && isAsyncCommandQueueFeatureEnabled()); + RunShouldClearWithSemaphoresTest(true, kDefaultImageCreateFlags, kNoStorageImageUsageFlags, isSwiftshader(), enableDebugLayers()); @@ -793,6 +805,10 @@ TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdWithSemaphoresMutableNoStorag ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_semaphore_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_memory_object_flags")); + + // http://issuetracker.google.com/173004081 + ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsLinux() && isAsyncCommandQueueFeatureEnabled()); + RunShouldClearWithSemaphoresTest(true, kMutableImageCreateFlags, kNoStorageImageUsageFlags, isSwiftshader(), enableDebugLayers()); @@ -978,6 +994,10 @@ TEST_P(VulkanExternalImageTest, ShouldDrawOpaqueFdWithSemaphores) { ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_semaphore_fd")); + + // http://issuetracker.google.com/173004081 + ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsLinux() && isAsyncCommandQueueFeatureEnabled()); + runShouldDrawTest(isSwiftshader(), enableDebugLayers()); } @@ -1143,6 +1163,10 @@ TEST_P(VulkanExternalImageTest, WaitSemaphoresRetainsContentOpaqueFd) { ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_semaphore_fd")); + + // http://issuetracker.google.com/173004081 + ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsLinux() && isAsyncCommandQueueFeatureEnabled()); + runWaitSemaphoresRetainsContentTest(isSwiftshader(), enableDebugLayers()); } diff --git a/src/tests/test_utils/ANGLETest.h b/src/tests/test_utils/ANGLETest.h index 9fa1434f7..8f5e3fc65 100644 --- a/src/tests/test_utils/ANGLETest.h +++ b/src/tests/test_utils/ANGLETest.h @@ -512,6 +512,11 @@ class ANGLETestBase mCurrentParams->isSwiftshader(); } + bool isAsyncCommandQueueFeatureEnabled() const + { + return mCurrentParams->eglParameters.asyncCommandQueueFeatureVulkan == EGL_TRUE; + } + bool platformSupportsMultithreading() const; private: diff --git a/src/tests/test_utils/angle_test_configs.cpp b/src/tests/test_utils/angle_test_configs.cpp index 52def5291..fe573b5fa 100644 --- a/src/tests/test_utils/angle_test_configs.cpp +++ b/src/tests/test_utils/angle_test_configs.cpp @@ -234,6 +234,11 @@ std::ostream &operator<<(std::ostream &stream, const PlatformParameters &pp) break; } + if (pp.eglParameters.asyncCommandQueueFeatureVulkan == EGL_TRUE) + { + stream << "_AsyncQueue"; + } + if (pp.eglParameters.hasExplicitMemBarrierFeatureMtl == EGL_FALSE) { stream << "_NoMetalExplicitMemoryBarrier"; diff --git a/src/tests/test_utils/angle_test_configs.h b/src/tests/test_utils/angle_test_configs.h index 6cd8e30ea..dfe2870f9 100644 --- a/src/tests/test_utils/angle_test_configs.h +++ b/src/tests/test_utils/angle_test_configs.h @@ -271,6 +271,13 @@ inline PlatformParameters WithEmulatedPrerotation(const PlatformParameters ¶ prerotation.eglParameters.emulatedPrerotation = rotation; return prerotation; } + +inline PlatformParameters WithAsyncCommandQueueFeatureVulkan(const PlatformParameters ¶ms) +{ + PlatformParameters withAsyncCommandQueue = params; + withAsyncCommandQueue.eglParameters.asyncCommandQueueFeatureVulkan = EGL_TRUE; + return withAsyncCommandQueue; +} } // namespace angle #endif // ANGLE_TEST_CONFIGS_H_ diff --git a/src/tests/test_utils/angle_test_instantiate.h b/src/tests/test_utils/angle_test_instantiate.h index 527264ae5..1c8e8f61c 100644 --- a/src/tests/test_utils/angle_test_instantiate.h +++ b/src/tests/test_utils/angle_test_instantiate.h @@ -133,18 +133,21 @@ struct CombinedPrintToStringParamName INSTANTIATE_TEST_SUITE_P(, testName, testing::ValuesIn(::angle::FilterTestParams(valuesin)), \ testing::PrintToStringParamName()) -#define ANGLE_ALL_TEST_PLATFORMS_ES1 \ - ES1_D3D11(), ES1_OPENGL(), ES1_OPENGLES(), ES1_VULKAN(), ES1_VULKAN_SWIFTSHADER() +#define ANGLE_ALL_TEST_PLATFORMS_ES1 \ + ES1_D3D11(), ES1_OPENGL(), ES1_OPENGLES(), ES1_VULKAN(), ES1_VULKAN_SWIFTSHADER(), \ + WithAsyncCommandQueueFeatureVulkan(ES1_VULKAN()) #define ANGLE_ALL_TEST_PLATFORMS_ES2 \ ES2_D3D9(), ES2_D3D11(), ES2_OPENGL(), ES2_OPENGLES(), ES2_VULKAN(), ES2_VULKAN_SWIFTSHADER(), \ - ES2_METAL() + ES2_METAL(), WithAsyncCommandQueueFeatureVulkan(ES2_VULKAN()) -#define ANGLE_ALL_TEST_PLATFORMS_ES3 \ - ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES(), ES3_VULKAN(), ES3_VULKAN_SWIFTSHADER(), ES3_METAL() +#define ANGLE_ALL_TEST_PLATFORMS_ES3 \ + ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES(), ES3_VULKAN(), ES3_VULKAN_SWIFTSHADER(), \ + ES3_METAL(), WithAsyncCommandQueueFeatureVulkan(ES3_VULKAN()) -#define ANGLE_ALL_TEST_PLATFORMS_ES31 \ - ES31_D3D11(), ES31_OPENGL(), ES31_OPENGLES(), ES31_VULKAN(), ES31_VULKAN_SWIFTSHADER() +#define ANGLE_ALL_TEST_PLATFORMS_ES31 \ + ES31_D3D11(), ES31_OPENGL(), ES31_OPENGLES(), ES31_VULKAN(), ES31_VULKAN_SWIFTSHADER(), \ + WithAsyncCommandQueueFeatureVulkan(ES31_VULKAN()) #define ANGLE_ALL_TEST_PLATFORMS_NULL ES2_NULL(), ES3_NULL(), ES31_NULL() diff --git a/util/EGLPlatformParameters.h b/util/EGLPlatformParameters.h index f852fc420..ce16857ac 100644 --- a/util/EGLPlatformParameters.h +++ b/util/EGLPlatformParameters.h @@ -80,6 +80,7 @@ struct EGLPlatformParameters EGLint shaderStencilOutputFeature = EGL_DONT_CARE; EGLint genMultipleMipsPerPassFeature = EGL_DONT_CARE; uint32_t emulatedPrerotation = 0; // Can be 0, 90, 180 or 270 + EGLint asyncCommandQueueFeatureVulkan = EGL_DONT_CARE; EGLint hasExplicitMemBarrierFeatureMtl = EGL_DONT_CARE; EGLint hasCheapRenderPassFeatureMtl = EGL_DONT_CARE; EGLint forceBufferGPUStorageFeatureMtl = EGL_DONT_CARE; diff --git a/util/EGLWindow.cpp b/util/EGLWindow.cpp index a7d6fc9f4..2c198cee6 100644 --- a/util/EGLWindow.cpp +++ b/util/EGLWindow.cpp @@ -221,6 +221,13 @@ bool EGLWindow::initializeDisplay(OSWindow *osWindow, break; } + if (params.asyncCommandQueueFeatureVulkan == EGL_TRUE) + { + // TODO(jmadill): Update feature names. b/172704839 + enabledFeatureOverrides.push_back("commandProcessor"); + enabledFeatureOverrides.push_back("asynchronousCommandProcessing"); + } + if (params.hasExplicitMemBarrierFeatureMtl == EGL_FALSE) { disabledFeatureOverrides.push_back("has_explicit_mem_barrier_mtl");