[go: nahoru, domu]

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(