Use vulkan in cc filters tests on X11
Add enum option for Skia Vulkan, and enable filters pixeltests that are
passing on X11 with vulkan Swiftshader.
Bug: 963446
Change-Id: I31541555ef0123a3dd894180898d251720b807fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1641382
Reviewed-by: Saman Sami <samans@chromium.org>
Commit-Queue: Sean Gilhuly <sgilhuly@chromium.org>
Cr-Commit-Position: refs/heads/master@{#665928}
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 1aff6061..97de94d 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -769,6 +769,20 @@
data_deps = [
"//third_party/mesa_headers",
]
+
+ if (enable_vulkan) {
+ deps += [
+ "//gpu/vulkan:test_support",
+ "//gpu/vulkan/init",
+ ]
+ }
+
+ # TODO(samans): Support more configurations.
+ # CFI issue: https://crbug.com/967819
+ # x86 issue: https://crbug.com/967831
+ if (use_x11 && target_cpu != "x86" && !is_cfi) {
+ defines = [ "ENABLE_CC_VULKAN_TESTS" ]
+ }
}
cc_test("cc_perftests") {
diff --git a/cc/test/layer_tree_pixel_test.cc b/cc/test/layer_tree_pixel_test.cc
index 56f43c8..84a3139 100644
--- a/cc/test/layer_tree_pixel_test.cc
+++ b/cc/test/layer_tree_pixel_test.cc
@@ -51,7 +51,7 @@
scoped_refptr<viz::RasterContextProvider>) {
scoped_refptr<viz::TestInProcessContextProvider> compositor_context_provider;
scoped_refptr<viz::TestInProcessContextProvider> worker_context_provider;
- if (renderer_type_ == RENDERER_GL || renderer_type_ == RENDERER_SKIA_GL) {
+ if (!use_software_renderer()) {
compositor_context_provider =
base::MakeRefCounted<viz::TestInProcessContextProvider>(
/*enable_oop_rasterization=*/false, /*support_locking=*/false);
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index 1572f36..6edc96b6 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -42,6 +42,7 @@
#include "components/viz/test/fake_output_surface.h"
#include "components/viz/test/fake_skia_output_surface.h"
#include "components/viz/test/test_context_provider.h"
+#include "gpu/command_buffer/service/gpu_switches.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "ui/gfx/geometry/size_conversions.h"
@@ -1063,6 +1064,11 @@
settings_.enable_latency_recovery = false;
InitializeSettings(&settings_);
+ if (use_vulkan()) {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ ::switches::kEnableVulkan);
+ }
+
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(&LayerTreeTest::DoBeginTest, base::Unretained(this)));
diff --git a/cc/test/layer_tree_test.h b/cc/test/layer_tree_test.h
index 505ab985..964c15f 100644
--- a/cc/test/layer_tree_test.h
+++ b/cc/test/layer_tree_test.h
@@ -72,6 +72,7 @@
enum RendererType {
RENDERER_GL,
RENDERER_SKIA_GL,
+ RENDERER_SKIA_VK,
RENDERER_SOFTWARE,
};
@@ -81,6 +82,8 @@
return "GL";
case RENDERER_SKIA_GL:
return "Skia GL";
+ case RENDERER_SKIA_VK:
+ return "Skia Vulkan";
case RENDERER_SOFTWARE:
return "Software";
}
@@ -197,8 +200,12 @@
begin_frame_source_ = begin_frame_source;
}
- bool use_skia_renderer() { return renderer_type_ == RENDERER_SKIA_GL; }
+ bool use_skia_renderer() {
+ return renderer_type_ == RENDERER_SKIA_GL ||
+ renderer_type_ == RENDERER_SKIA_VK;
+ }
bool use_software_renderer() { return renderer_type_ == RENDERER_SOFTWARE; }
+ bool use_vulkan() { return renderer_type_ == RENDERER_SKIA_VK; }
RendererType renderer_type_ = RENDERER_GL;
diff --git a/cc/trees/layer_tree_host_pixeltest_filters.cc b/cc/trees/layer_tree_host_pixeltest_filters.cc
index 670b82e..2e585f1 100644
--- a/cc/trees/layer_tree_host_pixeltest_filters.cc
+++ b/cc/trees/layer_tree_host_pixeltest_filters.cc
@@ -38,6 +38,7 @@
case RENDERER_GL:
return "gl";
case RENDERER_SKIA_GL:
+ case RENDERER_SKIA_VK:
return "skia";
case RENDERER_SOFTWARE:
return "sw";
@@ -79,6 +80,20 @@
LayerTreeHostFiltersPixelTest,
::testing::Values(LayerTreeTest::RENDERER_GL,
LayerTreeTest::RENDERER_SKIA_GL,
+ LayerTreeTest::RENDERER_SOFTWARE
+#if defined(ENABLE_CC_VULKAN_TESTS)
+ ,
+ LayerTreeTest::RENDERER_SKIA_VK
+#endif
+ ));
+
+using LayerTreeHostFiltersPixelTestNonVulkan = LayerTreeHostFiltersPixelTest;
+
+// TODO(crbug.com/963446): Enable these tests for Vulkan.
+INSTANTIATE_TEST_SUITE_P(,
+ LayerTreeHostFiltersPixelTestNonVulkan,
+ ::testing::Values(LayerTreeTest::RENDERER_GL,
+ LayerTreeTest::RENDERER_SKIA_GL,
LayerTreeTest::RENDERER_SOFTWARE));
using LayerTreeHostFiltersPixelTestGL = LayerTreeHostFiltersPixelTest;
@@ -93,6 +108,19 @@
INSTANTIATE_TEST_SUITE_P(,
LayerTreeHostFiltersPixelTestGPU,
::testing::Values(LayerTreeTest::RENDERER_GL,
+ LayerTreeTest::RENDERER_SKIA_GL
+#if defined(ENABLE_CC_VULKAN_TESTS)
+ ,
+ LayerTreeTest::RENDERER_SKIA_VK
+#endif
+ ));
+
+using LayerTreeHostFiltersPixelTestGPUNonVulkan = LayerTreeHostFiltersPixelTest;
+
+// TODO(crbug.com/963446): Enable these tests for Vulkan.
+INSTANTIATE_TEST_SUITE_P(,
+ LayerTreeHostFiltersPixelTestGPUNonVulkan,
+ ::testing::Values(LayerTreeTest::RENDERER_GL,
LayerTreeTest::RENDERER_SKIA_GL));
TEST_P(LayerTreeHostFiltersPixelTestGPU, BackdropFilterBlurRect) {
@@ -135,7 +163,7 @@
base::FilePath(FILE_PATH_LITERAL("backdrop_filter_blur.png")));
}
-TEST_P(LayerTreeHostFiltersPixelTestGPU, BackdropFilterBlurRounded) {
+TEST_P(LayerTreeHostFiltersPixelTestGPUNonVulkan, BackdropFilterBlurRounded) {
scoped_refptr<SolidColorLayer> background =
CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
@@ -219,6 +247,9 @@
average_error_allowed_in_bad_pixels,
large_error_allowed,
small_error_allowed));
+#else
+ if (renderer_type() == RENDERER_SKIA_VK)
+ pixel_comparator_ = std::make_unique<FuzzyPixelOffByOneComparator>(true);
#endif
RunPixelTest(
@@ -298,7 +329,8 @@
base::FilePath(FILE_PATH_LITERAL("backdrop_filter_blur_off_axis.png")));
}
-TEST_P(LayerTreeHostFiltersPixelTest, BackdropFilterBoundsWithChildren) {
+TEST_P(LayerTreeHostFiltersPixelTestNonVulkan,
+ BackdropFilterBoundsWithChildren) {
scoped_refptr<SolidColorLayer> background =
CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
scoped_refptr<SolidColorLayer> green =
@@ -368,7 +400,12 @@
LayerTreeHostFiltersScaledPixelTest,
::testing::Values(LayerTreeTest::RENDERER_GL,
LayerTreeTest::RENDERER_SKIA_GL,
- LayerTreeTest::RENDERER_SOFTWARE));
+ LayerTreeTest::RENDERER_SOFTWARE
+#if defined(ENABLE_CC_VULKAN_TESTS)
+ ,
+ LayerTreeTest::RENDERER_SKIA_VK
+#endif
+ ));
TEST_P(LayerTreeHostFiltersScaledPixelTest, StandardDpi) {
RunPixelTestType(100, 1.f);
@@ -539,6 +576,9 @@
percentage_pixels_large_error, percentage_pixels_small_error,
average_error_allowed_in_bad_pixels, large_error_allowed,
small_error_allowed));
+#else
+ if (renderer_type() == RENDERER_SKIA_VK)
+ pixel_comparator_ = std::make_unique<FuzzyPixelOffByOneComparator>(true);
#endif
RunPixelTest(
@@ -547,7 +587,7 @@
.InsertBeforeExtensionASCII(GetRendererSuffix()));
}
-TEST_P(LayerTreeHostFiltersPixelTest, BackdropFilterRotated) {
+TEST_P(LayerTreeHostFiltersPixelTestNonVulkan, BackdropFilterRotated) {
// Add a white background with a rotated red rect in the center.
scoped_refptr<SolidColorLayer> background =
CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
@@ -757,6 +797,9 @@
percentage_pixels_large_error, percentage_pixels_small_error,
average_error_allowed_in_bad_pixels, large_error_allowed,
small_error_allowed));
+#else
+ if (renderer_type() == RENDERER_SKIA_VK)
+ pixel_comparator_ = std::make_unique<FuzzyPixelOffByOneComparator>(true);
#endif
RunPixelTest(renderer_type(), background,
@@ -764,7 +807,7 @@
.InsertBeforeExtensionASCII(GetRendererSuffix()));
}
-TEST_P(LayerTreeHostFiltersPixelTest, RotatedDropShadowFilter) {
+TEST_P(LayerTreeHostFiltersPixelTestNonVulkan, RotatedDropShadowFilter) {
scoped_refptr<SolidColorLayer> background =
CreateSolidColorLayer(gfx::Rect(300, 300), SK_ColorWHITE);
@@ -811,7 +854,7 @@
.InsertBeforeExtensionASCII(GetRendererSuffix()));
}
-TEST_P(LayerTreeHostFiltersPixelTest, TranslatedFilter) {
+TEST_P(LayerTreeHostFiltersPixelTestNonVulkan, TranslatedFilter) {
scoped_refptr<Layer> clip = Layer::Create();
clip->SetBounds(gfx::Size(300, 300));
clip->SetMasksToBounds(true);
@@ -974,6 +1017,9 @@
percentage_pixels_large_error, percentage_pixels_small_error,
average_error_allowed_in_bad_pixels, large_error_allowed,
small_error_allowed));
+#else
+ if (renderer_type() == RENDERER_SKIA_VK)
+ pixel_comparator_ = std::make_unique<FuzzyPixelOffByOneComparator>(true);
#endif
RunPixelTest(renderer_type(), filter_layer,
@@ -1038,7 +1084,12 @@
BackdropFilterWithDeviceScaleFactorTest,
::testing::Values(LayerTreeTest::RENDERER_GL,
LayerTreeTest::RENDERER_SKIA_GL,
- LayerTreeTest::RENDERER_SOFTWARE));
+ LayerTreeTest::RENDERER_SOFTWARE
+#if defined(ENABLE_CC_VULKAN_TESTS)
+ ,
+ LayerTreeTest::RENDERER_SKIA_VK
+#endif
+ ));
TEST_P(BackdropFilterWithDeviceScaleFactorTest, StandardDpi) {
RunPixelTestType(