0

Add controls to remove SwiftShader as an automatic WebGL fallback.

Add a AllowSwiftShaderFallback finch feature as a killswitch. This
is currently *enabled by default* with a deprecation message.

Once AllowSwiftShaderFallback is disabled:

Disable falling back to SwiftShader as a result of multiple GPU crashes.
Instead, fall back to the display compositor.

Disable falling back to SwiftShader as a GL implementation unless it's
the only available implementation (current behaviour) AND
--allow-unsafe-swiftshader is passed to Chrome. This allows testing of
Chrome on systems without GPUs without exposing end users to
security issues in the SwANGLE stack.

Continue to allow SwiftShader to be used if it's explicitly requested
by command line with the --use-angle=swiftshader flag. This allows testing of Chrome's rasterization and WebGL using SwiftShader.

Bug: 40277080
Change-Id: I8b6f56acba1acb7a988232fb2f205a6be0da670f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5675974
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Arthur Sonzogni <arthursonzogni@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1350236}
This commit is contained in:
Geoff Lang
2024-09-03 17:31:21 +00:00
committed by Chromium LUCI CQ
parent e13a26037a
commit 1b6cf4c00b
24 changed files with 261 additions and 317 deletions

@ -47,7 +47,7 @@ constexpr char XrBrowserTestBase::kTestFileDir[];
constexpr char XrBrowserTestBase::kSwitchIgnoreRuntimeRequirements[];
const std::vector<std::string> XrBrowserTestBase::kRequiredTestSwitches{
"enable-gpu", "enable-pixel-output-in-tests",
"run-through-xr-wrapper-script"};
"run-through-xr-wrapper-script", "enable-unsafe-swiftshader"};
const std::vector<std::pair<std::string, std::string>>
XrBrowserTestBase::kRequiredTestSwitchesWithValues{
std::pair<std::string, std::string>("test-launcher-jobs", "1")};

@ -134,11 +134,11 @@ class AutofillRiskFingerprintTest : public content::ContentBrowserTest,
EXPECT_TRUE(machine.has_browser_build());
EXPECT_TRUE(machine.has_browser_feature());
if (content::GpuDataManager::GetInstance()->GpuAccessAllowed(nullptr)) {
ASSERT_TRUE(machine.has_graphics_card());
EXPECT_TRUE(machine.has_graphics_card());
}
if (machine.has_graphics_card()) {
EXPECT_TRUE(machine.graphics_card().has_vendor_id());
EXPECT_TRUE(machine.graphics_card().has_device_id());
} else {
EXPECT_FALSE(machine.has_graphics_card());
}
ASSERT_TRUE(fingerprint->has_transient_state());

@ -79,6 +79,7 @@
#include "ui/display/screen.h"
#include "ui/gfx/switches.h"
#include "ui/gl/buildflags.h"
#include "ui/gl/gl_features.h"
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_switches.h"
#include "ui/gl/gpu_preference.h"
@ -412,12 +413,10 @@ void RequestVideoMemoryUsageStats(
// Determines if SwiftShader is available as a fallback for WebGL.
bool SwiftShaderAllowed() {
#if BUILDFLAG(ENABLE_SWIFTSHADER)
return !base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableSoftwareRasterizer);
#else
return false;
#endif
const base::CommandLine* command_line =
base::CommandLine::ForCurrentProcess();
return !command_line->HasSwitch(switches::kDisableSoftwareRasterizer) &&
features::IsSwiftShaderAllowed(command_line);
}
// These values are logged to UMA. Entries should not be renumbered and numeric

@ -7,6 +7,8 @@
#pragma allow_unsafe_buffers
#endif
#include "content/browser/gpu/gpu_data_manager_impl_private.h"
#include <stddef.h>
#include "base/command_line.h"
@ -17,7 +19,6 @@
#include "build/build_config.h"
#include "build/chromecast_buildflags.h"
#include "build/chromeos_buildflags.h"
#include "content/browser/gpu/gpu_data_manager_impl_private.h"
#include "content/browser/gpu/gpu_data_manager_testing_autogen.h"
#include "content/browser/gpu/gpu_data_manager_testing_entry_enums_autogen.h"
#include "content/public/browser/gpu_data_manager_observer.h"
@ -30,6 +31,8 @@
#include "gpu/config/gpu_switches.h"
#include "gpu/ipc/common/memory_stats.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_features.h"
#include "ui/gl/gl_switches.h"
#include "url/gurl.h"
// TODO(crbug.com/1293538): The IS_CAST_AUDIO_ONLY check should not need to be
@ -488,7 +491,21 @@ TEST_F(GpuDataManagerImplPrivateTest, FallbackFromGraphite) {
// not support falling back to software from Vulkan.
#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_IOS)
#if !BUILDFLAG(IS_FUCHSIA)
TEST_F(GpuDataManagerImplPrivateTest, FallbackToSwiftShader) {
TEST_F(GpuDataManagerImplPrivateTest, NoDefaultFallbackToSwiftShader) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndDisableFeature(features::kAllowSwiftShaderFallback);
ScopedGpuDataManagerImplPrivate manager;
EXPECT_EQ(gpu::GpuMode::HARDWARE_GL, manager->GetGpuMode());
manager->FallBackToNextGpuMode();
EXPECT_EQ(gpu::GpuMode::DISPLAY_COMPOSITOR, manager->GetGpuMode());
}
TEST_F(GpuDataManagerImplPrivateTest, ExplicitFallbackToSwiftShader) {
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableUnsafeSwiftShader);
ScopedGpuDataManagerImplPrivate manager;
EXPECT_EQ(gpu::GpuMode::HARDWARE_GL, manager->GetGpuMode());
@ -496,9 +513,32 @@ TEST_F(GpuDataManagerImplPrivateTest, FallbackToSwiftShader) {
EXPECT_EQ(gpu::GpuMode::SWIFTSHADER, manager->GetGpuMode());
}
TEST_F(GpuDataManagerImplPrivateTest, FallbackWithSwiftShaderDisabled) {
TEST_F(GpuDataManagerImplPrivateTest, FallbackWithSwiftShaderDisabledByFlags) {
// Make sure that we don't fall back to SwiftShader when it's disabled with
// --disable-software-rasterizer even if --allow-unsafe-swiftshader is used
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kDisableSoftwareRasterizer);
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableUnsafeSwiftShader);
ScopedGpuDataManagerImplPrivate manager;
EXPECT_EQ(gpu::GpuMode::HARDWARE_GL, manager->GetGpuMode());
manager->FallBackToNextGpuMode();
gpu::GpuMode expected_mode = gpu::GpuMode::DISPLAY_COMPOSITOR;
EXPECT_EQ(expected_mode, manager->GetGpuMode());
}
TEST_F(GpuDataManagerImplPrivateTest,
FallbackWithSwiftShaderDisabledByFeatures) {
// Make sure that we don't fall back to SwiftShader when it's disabled with
// --disable-software-rasterizer even the AllowSwiftShaderFallback feature is
// present.
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kDisableSoftwareRasterizer);
base::test::ScopedFeatureList feature_list;
feature_list.InitAndDisableFeature(features::kAllowSwiftShaderFallback);
ScopedGpuDataManagerImplPrivate manager;
EXPECT_EQ(gpu::GpuMode::HARDWARE_GL, manager->GetGpuMode());
@ -527,9 +567,12 @@ TEST_F(GpuDataManagerImplPrivateTest,
#if !defined(CAST_AUDIO_ONLY)
TEST_F(GpuDataManagerImplPrivateTest, GpuStartsWithGpuDisabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndDisableFeature(features::kAllowSwiftShaderFallback);
base::CommandLine::ForCurrentProcess()->AppendSwitch(switches::kDisableGpu);
ScopedGpuDataManagerImplPrivate manager;
EXPECT_EQ(gpu::GpuMode::SWIFTSHADER, manager->GetGpuMode());
EXPECT_EQ(gpu::GpuMode::DISPLAY_COMPOSITOR, manager->GetGpuMode());
}
#endif // !defined(CAST_AUDIO_ONLY)
#endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) &&
@ -569,7 +612,13 @@ TEST_F(GpuDataManagerImplPrivateTest, FallbackFromVulkanToGL) {
TEST_F(GpuDataManagerImplPrivateTest, VulkanInitializationFails) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(features::kVulkan);
feature_list.InitWithFeatures({features::kVulkan},
#if BUILDFLAG(ENABLE_SWIFTSHADER)
{features::kAllowSwiftShaderFallback});
#else
{});
#endif // BUILDFLAG(ENABLE_SWIFTSHADER)
ScopedGpuDataManagerImplPrivate manager;
EXPECT_EQ(gpu::GpuMode::HARDWARE_VULKAN, manager->GetGpuMode());
@ -581,11 +630,11 @@ TEST_F(GpuDataManagerImplPrivateTest, VulkanInitializationFails) {
// GpuDataManager should update its mode to be GL.
EXPECT_EQ(gpu::GpuMode::HARDWARE_GL, manager->GetGpuMode());
// The first fallback should go to SwiftShader on platforms where fallback to
// software is allowed.
// The first fallback should go to the display compositor on platforms where
// fallback to software is allowed.
#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_IOS)
manager->FallBackToNextGpuMode();
EXPECT_EQ(gpu::GpuMode::SWIFTSHADER, manager->GetGpuMode());
EXPECT_EQ(gpu::GpuMode::DISPLAY_COMPOSITOR, manager->GetGpuMode());
#endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) &&
// !BUILDFLAG(IS_IOS)
}
@ -593,7 +642,8 @@ TEST_F(GpuDataManagerImplPrivateTest, VulkanInitializationFails) {
#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_IOS)
TEST_F(GpuDataManagerImplPrivateTest, FallbackFromVulkanWithGLDisabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(features::kVulkan);
feature_list.InitWithFeatures({features::kVulkan},
{features::kAllowSwiftShaderFallback});
ScopedGpuDataManagerImplPrivate manager;
EXPECT_EQ(gpu::GpuMode::HARDWARE_VULKAN, manager->GetGpuMode());
@ -603,7 +653,7 @@ TEST_F(GpuDataManagerImplPrivateTest, FallbackFromVulkanWithGLDisabled) {
manager->UpdateGpuFeatureInfo(gpu_feature_info, std::nullopt);
manager->FallBackToNextGpuMode();
EXPECT_EQ(gpu::GpuMode::SWIFTSHADER, manager->GetGpuMode());
EXPECT_EQ(gpu::GpuMode::DISPLAY_COMPOSITOR, manager->GetGpuMode());
}
#endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) &&
// !BUILDFLAG(IS_IOS)

@ -81,6 +81,7 @@ class LaunchAsMojoClientBrowserTest : public ContentBrowserTest {
gl::kGLImplementationANGLEName);
command_line.AppendSwitchASCII(switches::kUseANGLE,
gl::kANGLEImplementationSwiftShaderName);
command_line.AppendSwitch(switches::kEnableUnsafeSwiftShader);
#endif
#if defined(MEMORY_SANITIZER)

@ -29,6 +29,7 @@
#include "media/media_buildflags.h"
#include "third_party/blink/public/common/features.h"
#include "ui/gfx/switches.h"
#include "ui/gl/gl_features.h"
#if BUILDFLAG(IS_CHROMEOS_LACROS)
#include "chromeos/startup/browser_params_proxy.h"
@ -82,7 +83,8 @@ const gpu::GpuPreferences GetGpuPreferencesFromCommandLine() {
!command_line->HasSwitch(switches::kDisableNv12DxgiVideo);
#endif
gpu_preferences.disable_software_rasterizer =
command_line->HasSwitch(switches::kDisableSoftwareRasterizer);
command_line->HasSwitch(switches::kDisableSoftwareRasterizer) ||
!features::IsSwiftShaderAllowed(command_line);
gpu_preferences.log_gpu_control_list_decisions =
command_line->HasSwitch(switches::kLogGpuControlListDecisions);
gpu_preferences.gpu_startup_dialog =

@ -721,8 +721,9 @@ class ContextLostIntegrationTest(gpu_integration_test.GpuIntegrationTest):
if not self.IsDualGPUMacLaptop():
logging.info('Skipping test because not running on dual-GPU Mac laptop')
self.skipTest('Not running on dual-GPU Mac laptop')
self.RestartBrowserIfNecessaryWithArgs(
[cba.DISABLE_DOMAIN_BLOCKING_FOR_3D_APIS])
self.RestartBrowserIfNecessaryWithArgs([
cba.DISABLE_DOMAIN_BLOCKING_FOR_3D_APIS, '--enable-unsafe-swiftshader'
])
active_vendor_id = self._GetActiveVendorId(False)
# Load WebGL content and switch to discrete GPU.
self._NavigateAndWaitForLoad(test_path)

@ -120,6 +120,8 @@ class GpuProcessIntegrationTest(gpu_integration_test.GpuIntegrationTest):
('GpuProcess_mac_webgl_terminated_high_performance',
'gpu/functional_blank.html'),
('GpuProcess_swiftshader_for_webgl', 'gpu/functional_webgl.html'),
('GpuProcess_no_swiftshader_for_webgl_without_flags',
'gpu/functional_webgl.html'),
('GpuProcess_webgl_disabled_extension',
'gpu/functional_webgl_disabled_extension.html'),
('GpuProcess_webgpu_iframe_removed', 'gpu/webgpu-iframe-removed.html'),
@ -311,7 +313,8 @@ class GpuProcessIntegrationTest(gpu_integration_test.GpuIntegrationTest):
def _GpuProcess_feature_status_under_swiftshader(self,
test_path: str) -> None:
# Hit test group 2 with entry 153 from kSoftwareRenderingListEntries.
self.RestartBrowserIfNecessaryWithArgs(['--gpu-blocklist-test-group=2'])
self.RestartBrowserIfNecessaryWithArgs(
['--gpu-blocklist-test-group=2', '--enable-unsafe-swiftshader'])
self._Navigate(test_path)
feature_status_list = _GetBrowserBridgeProperty(
self.tab, 'gpuInfo.featureStatus.featureStatus')
@ -472,9 +475,9 @@ class GpuProcessIntegrationTest(gpu_integration_test.GpuIntegrationTest):
# attempt to use an API which would start the GPU process.
args_list = (
# Triggering test_group 2 where WebGL is blocklisted.
['--gpu-blocklist-test-group=2'],
['--gpu-blocklist-test-group=2', '--enable-unsafe-swiftshader'],
# Explicitly disable GPU access.
[cba.DISABLE_GPU])
[cba.DISABLE_GPU, '--enable-unsafe-swiftshader'])
for args in args_list:
self.RestartBrowserIfNecessaryWithArgs(args)
self._NavigateAndWait(test_path)
@ -523,6 +526,48 @@ class GpuProcessIntegrationTest(gpu_integration_test.GpuIntegrationTest):
if tab.EvaluateJavaScript('!gl_context.getExtension("' + ext + '")'):
self.fail('Expected %s support' % ext)
def _GpuProcess_no_swiftshader_for_webgl_without_flags(
self, test_path: str) -> None:
# This test loads functional_webgl.html with GPU disabled and verifies that
# SwiftShader is not available without the --enable-unsafe-swiftshader flag
# or AllowSwiftShaderFallback killswitch.
# Because AllowSwiftShaderFallback is currently enabled by default, disable
# it to test the upcoming default behavior
disable_hardware_webgl_args_list = [
# Triggering test_group 2 where WebGL is blocklisted.
['--gpu-blocklist-test-group=2'],
# Explicitly disable GPU access.
[cba.DISABLE_GPU],
]
disable_swiftshader_fallback_feature = [
'--disable-features=AllowSwiftShaderFallback'
]
allow_swiftshader_args_list = [
['--enable-unsafe-swiftshader'],
['--use-gl=angle', '--use-angle=swiftshader'],
['--enable-features=AllowSwiftShaderFallback']
]
for disable_hardware_webgl_args in disable_hardware_webgl_args_list:
self.RestartBrowserIfNecessaryWithArgs(
disable_hardware_webgl_args + disable_swiftshader_fallback_feature)
self._NavigateAndWait(test_path)
renderer = self.tab.EvaluateJavaScript('gl_renderer')
if renderer:
self.fail('Expected no WebGL renderer; instead got ' + renderer)
for allow_swiftshader_args in allow_swiftshader_args_list:
self.RestartBrowserIfNecessaryWithArgs(disable_hardware_webgl_args +
allow_swiftshader_args)
self._NavigateAndWait(test_path)
# Validate the WebGL unmasked renderer string.
renderer = self.tab.EvaluateJavaScript('gl_renderer')
if not renderer:
self.fail('getParameter(UNMASKED_RENDERER_WEBGL) was null')
if 'SwiftShader' not in renderer:
self.fail('Expected SwiftShader renderer; instead got ' + renderer)
def _GpuProcess_webgl_disabled_extension(self, test_path: str) -> None:
# Hit exception from id 257 from kGpuDriverBugListEntries.
self.RestartBrowserIfNecessaryWithArgs([

@ -106,18 +106,15 @@ crbug.com/1448964 [ mac angle-metal ] GpuProcess_mac_webgl_terminated_high_perfo
# Android and Fuchsia do not support software fallback.
[ android ] GpuProcess_disable_gpu [ Skip ]
[ android ] GpuProcess_disable_gpu_and_swiftshader [ Skip ]
[ android ] GpuProcess_no_swiftshader_for_webgl_without_flags [ Skip ]
[ android ] GpuProcess_feature_status_under_swiftshader [ Skip ]
[ android ] GpuProcess_swiftshader_for_webgl [ Skip ]
[ fuchsia ] GpuProcess_disable_gpu [ Skip ]
[ fuchsia ] GpuProcess_disable_gpu_and_swiftshader [ Skip ]
[ fuchsia ] GpuProcess_no_swiftshader_for_webgl_without_flags [ Skip ]
[ fuchsia ] GpuProcess_feature_status_under_swiftshader [ Skip ]
[ fuchsia ] GpuProcess_swiftshader_for_webgl [ Skip ]
# SwiftShader is not supported on arm64.
[ win qualcomm-0x41333430 ] GpuProcess_swiftshader_for_webgl [ Skip ]
[ win qualcomm-0x36333630 ] GpuProcess_swiftshader_for_webgl [ Skip ]
[ win qualcomm-0x36334330 ] GpuProcess_swiftshader_for_webgl [ Skip ]
# Software Compositing is not supported on ChromeOS.
crbug.com/1084796 [ chromeos ] GpuProcess_readback_webgl_gpu_process [ Skip ]
@ -136,13 +133,11 @@ crbug.com/1305020 [ mac nvidia-0xfe9 ] GpuProcess_webgpu_iframe_removed [ Skip ]
# SwiftShader GL does not work on CrOS, wait for it to be replaced by SwANGLE.
crbug.com/1084794 [ chromeos ] GpuProcess_feature_status_under_swiftshader [ Skip ]
crbug.com/1084794 [ chromeos ] GpuProcess_swiftshader_for_webgl [ Skip ]
crbug.com/1084794 [ chromeos ] GpuProcess_no_swiftshader_for_webgl_without_flags [ Skip ]
# Seems to kill the system UI/otherwise make the device unusable.
crbug.com/1294065 [ android android-shield-android-tv ] GpuProcess_visibility [ Skip ]
# SwiftShader is disabled on Mac M1
crbug.com/1378476 [ mac mac-arm64 ] GpuProcess_swiftshader_for_webgl [ Skip ]
###################
# Failures/Flakes #
###################

@ -367,9 +367,6 @@ crbug.com/610951 [ android android-nexus-5x ] conformance/uniforms/uniform-sampl
# Skip test that breaks subsequent tests.
crbug.com/1043953 [ chromeos chromeos-board-amd64-generic ] conformance/textures/misc/texture-size-limit.html [ Skip ]
# SwiftShader is disabled on Mac M1
crbug.com/1378476 [ mac mac-arm64 angle-swiftshader ] conformance/rendering/gl-drawelements.html [ Skip ]
# Old hardware + use of validating decoder. Can be removed once the validating
# decoder has been unshipped on Mac.
crbug.com/1321312 [ mac nvidia-0xfe9 no-passthrough ] conformance/glsl/bugs/gl-fragcoord-multisampling-bug.html [ Skip ]

@ -2,7 +2,7 @@
SwiftShader is an open-source high-performance implementation of the Vulkan and OpenGL ES graphics APIs which runs purely on the CPU. Thus no graphics processor (GPU) is required for advanced (3D) graphics.
Chromium uses SwiftShader in two different ways:
When requested, Chromium uses SwiftShader in two different ways:
1) **As the OpenGL ES driver**
@ -12,12 +12,27 @@ When Chromium uses SwiftShader as the OpenGL ES driver, Chromium behaves as if i
When Chromium uses SwiftShader as the WebGL fallback, Chromium runs in all software mode and only uses SwiftShader to render WebGL content.
## Automatic SwiftShader WebGL fallback is deprecated
Allowing automatic fallback to WebGL backed by SwiftShader has been deprecated and WebGL context creation will soon fail instead of falling back to SwiftShader. This was done for two primary reasons:
1) SwiftShader is a high security risk due to JIT-ed code running in Chromium's GPU process.
2) Users have a poor experience when falling back from a high-performance GPU-backed WebGL to a CPU-backed implementation. Users have no control over this behavior and it is difficult to describe in bug reports.
SwiftShader is a useful tool for web developers to test their sites on systems that are headless or do not have a supported GPU. This use case will still be supported by opting in but is not intended for running untrusted content.
To opt-in to lower security guarantees and allow SwiftShader for WebGL, run the **chrome** executable with the following command line switch:
>**\-\-enable-unsafe-swiftshader**
During the deprecation period, a warning will appear in the javascript console when a WebGL context is created and backed with SwiftShader. Passing **\-\-enable-unsafe-swiftshader** will remove this warning message.
Chromium and other browsers do not guarantee WebGL availability. Please test and handle WebGL context creation failure and fall back to other web APIs such as Canvas2D or an appropriate message to the user.
## Relevant Chromium command line switches
When running the **chrome** executable from the command line, SwiftShader can be enabled using the following Switches:
1) As the OpenGL ES driver, SwANGLE (ANGLE + SwiftShader Vulkan)
>**\-\-use-gl=angle \-\-use-angle=swiftshader**
2) As the WebGL fallback, SwANGLE (ANGLE + SwiftShader Vulkan)
>**\-\-use-gl=angle \-\-use-angle=swiftshader-webgl**
2) As the **unsafe** WebGL fallback, SwANGLE (ANGLE + SwiftShader Vulkan)
>**\-\-use-gl=angle \-\-use-angle=swiftshader-webgl \-\-enable-unsafe-swiftshader***
3) As the Vulkan driver (requires the [enable_swiftshader_vulkan](https://source.chromium.org/chromium/chromium/src/+/main:gpu/vulkan/features.gni;l=16) feature)
>**--use-vulkan=swiftshader**

@ -1041,6 +1041,19 @@ gpu::ContextResult GLES2DecoderPassthroughImpl::Initialize(
ui::GpuSwitchingManager::GetInstance()->AddObserver(this);
}
// Deprecation warning for SwiftShader WebGL fallback
if (feature_info_->IsWebGLContext() &&
gl::GetANGLEImplementation() == gl::ANGLEImplementation::kSwiftShader &&
!base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableUnsafeSwiftShader)) {
constexpr const char* kSwiftShaderFallbackDeprcationMessage =
"Automatic fallback to software WebGL has been deprecated. Please use "
"the --enable-unsafe-swiftshader flag to opt in to lower security "
"guarantees for trusted content.";
logger_.LogMessage(__FILE__, __LINE__,
kSwiftShaderFallbackDeprcationMessage);
}
set_initialized();
return gpu::ContextResult::kSuccess;
}

@ -2011,6 +2011,7 @@
"--test-launcher-jobs=1",
"--test-launcher-retry-limit=0",
"--enable-pixel-output-in-tests",
"--enable-unsafe-swiftshader",
],
},
"xvfb_py_unittests": {

@ -2191,6 +2191,7 @@ targets.binaries.windowed_test_launcher(
"--test-launcher-jobs=1",
"--test-launcher-retry-limit=0",
"--enable-pixel-output-in-tests",
"--enable-unsafe-swiftshader",
],
)

@ -1965,6 +1965,9 @@ class Port(object):
if DISABLE_THREADED_ANIMATION_FLAG in args:
args.remove(DISABLE_THREADED_ANIMATION_FLAG)
# Always support running web tests using SwiftShader for compositing or WebGL
args.append('--enable-unsafe-swiftshader')
startup_trace_file = self.startup_trace_file_for_test(test_name)
if startup_trace_file is not None:
tracing_categories = self.get_option('enable_tracing')

@ -1854,39 +1854,42 @@ class PortTest(LoggingTestCase):
def test_args_for_test(self):
port = self.make_port(with_tests=True)
self.assertEqual(
['--disable-threaded-compositing', '--disable-threaded-animation'],
port.args_for_test('non/virtual'))
self.assertEqual(
['--disable-threaded-compositing', '--disable-threaded-animation'],
port.args_for_test('passes/text.html'))
self.assertEqual(
['--disable-threaded-compositing', '--disable-threaded-animation'],
port.args_for_test('virtual/non-existing/test.html'))
self.assertEqual([
'--disable-threaded-compositing', '--disable-threaded-animation',
'--enable-unsafe-swiftshader'
], port.args_for_test('non/virtual'))
self.assertEqual([
'--disable-threaded-compositing', '--disable-threaded-animation',
'--enable-unsafe-swiftshader'
], port.args_for_test('passes/text.html'))
self.assertEqual([
'--disable-threaded-compositing', '--disable-threaded-animation',
'--enable-unsafe-swiftshader'
], port.args_for_test('virtual/non-existing/test.html'))
self.assertEqual([
'--virtual-arg', '--disable-threaded-compositing',
'--disable-threaded-animation'
'--disable-threaded-animation', '--enable-unsafe-swiftshader'
], port.args_for_test('virtual/virtual_passes/passes/text.html'))
self.assertEqual([
'--virtual-arg', '--disable-threaded-compositing',
'--disable-threaded-animation'
'--disable-threaded-animation', '--enable-unsafe-swiftshader'
], port.args_for_test('virtual/virtual_passes/passes/any.html'))
self.assertEqual([
'--virtual-arg', '--disable-threaded-compositing',
'--disable-threaded-animation'
'--disable-threaded-animation', '--enable-unsafe-swiftshader'
], port.args_for_test('virtual/virtual_passes/passes/'))
self.assertEqual([
'--virtual-arg', '--disable-threaded-compositing',
'--disable-threaded-animation'
'--disable-threaded-animation', '--enable-unsafe-swiftshader'
], port.args_for_test('virtual/virtual_passes/passes'))
self.assertEqual([
'--virtual-arg', '--disable-threaded-compositing',
'--disable-threaded-animation'
'--disable-threaded-animation', '--enable-unsafe-swiftshader'
], port.args_for_test('virtual/virtual_passes/'))
self.assertEqual([
'--virtual-arg', '--disable-threaded-compositing',
'--disable-threaded-animation'
'--disable-threaded-animation', '--enable-unsafe-swiftshader'
], port.args_for_test('virtual/virtual_passes'))
def test_missing_virtual_test_suite_file(self):
@ -2222,6 +2225,7 @@ class PortTest(LoggingTestCase):
self.assertEqual([
'--disable-threaded-compositing',
'--disable-threaded-animation',
'--enable-unsafe-swiftshader',
'--trace-startup=*,-blink',
'--trace-startup-duration=0',
'--trace-startup-file=trace_layout_test_non_virtual_TIME.pftrace',

@ -1684,9 +1684,6 @@ crbug.com/1373766 external/wpt/credential-management/fedcm-multi-idp/* [ Skip ]
# explicitly be marked Pass in order to bypass the expected Skip of the default
# version.
crbug.com/1393294 printing/webgl-oversized-printing.html [ Skip ]
# SwiftShader for WebGL is not available for ARM Macs
crbug.com/1378476 [ Mac11-arm64 ] virtual/webgl-oversized-printing/printing/webgl-oversized-printing.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] virtual/webgl-oversized-printing/printing/webgl-oversized-printing.html [ Skip ]
# The test causes a 1 GB allocation in the GPU process on Windows
# which often fails, so skip it on this configuration.
# Use the same reason as the Mac suppressions to avoid an incorrect presubmit check.
@ -1742,260 +1739,6 @@ external/wpt/worklets/animation-worklet-import.https.html [ Skip ]
external/wpt/worklets/animation-worklet-referrer.https.html [ Skip ]
external/wpt/worklets/animation-worklet-service-worker-interception.https.html [ Skip ]
# SwiftShader for WebGL is not available for ARM on MacOS and Windows
crbug.com/1378476 [ Win11-arm64 ] compositing/backface-visibility/backface-visibility-webgl.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] compositing/backface-visibility/backface-visibility-webgl.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] compositing/backface-visibility/backface-visibility-webgl.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] compositing/backface-visibility/backface-visibility-webgl.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] compositing/draws-content/webgl-background-layer.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] compositing/draws-content/webgl-background-layer.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] compositing/draws-content/webgl-background-layer.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] compositing/draws-content/webgl-background-layer.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] compositing/draws-content/webgl-simple-background.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] compositing/draws-content/webgl-simple-background.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] compositing/draws-content/webgl-simple-background.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] compositing/draws-content/webgl-simple-background.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] compositing/visibility/visibility-simple-webgl-layer.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] compositing/visibility/visibility-simple-webgl-layer.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] compositing/visibility/visibility-simple-webgl-layer.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] compositing/visibility/visibility-simple-webgl-layer.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] compositing/webgl/* [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] compositing/webgl/* [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] compositing/webgl/* [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] compositing/webgl/* [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.w.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/webcodecs/videoFrame-texImage.any.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/webcodecs/videoFrame-texImage.any.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/webcodecs/videoFrame-texImage.any.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/webcodecs/videoFrame-texImage.any.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/webcodecs/videoFrame-texImage.any.worker.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/webcodecs/videoFrame-texImage.any.worker.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/webcodecs/videoFrame-texImage.any.worker.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/webcodecs/videoFrame-texImage.any.worker.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] external/wpt/webxr/* [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] external/wpt/webxr/* [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] external/wpt/webxr/* [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] external/wpt/webxr/* [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/arraybuffer/webgl2_size_check.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/arraybuffer/webgl2_size_check.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/arraybuffer/webgl2_size_check.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/arraybuffer/webgl2_size_check.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas-api/OffscreenCanvas-getContext-in-worker.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas-api/OffscreenCanvas-getContext-in-worker.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas-api/OffscreenCanvas-getContext-in-worker.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas-api/OffscreenCanvas-getContext-in-worker.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas-api/OffscreenCanvas-getContext.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas-api/OffscreenCanvas-getContext.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas-api/OffscreenCanvas-getContext.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas-api/OffscreenCanvas-getContext.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas-api/offscreencanvas.transferrable-webgl-exception.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas-api/offscreencanvas.transferrable-webgl-exception.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas-api/offscreencanvas.transferrable-webgl-exception.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas-api/offscreencanvas.transferrable-webgl-exception.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas/bug1280361.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas/bug1280361.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas/bug1280361.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas/bug1280361.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas/bug1283434.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas/bug1283434.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas/bug1283434.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas/bug1283434.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas/canvas-createImageBitmap-webgl.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas/canvas-createImageBitmap-webgl.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas/canvas-createImageBitmap-webgl.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas/canvas-createImageBitmap-webgl.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas/color-space/canvas-webgl-imagetex.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas/color-space/canvas-webgl-imagetex.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas/color-space/canvas-webgl-imagetex.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas/color-space/canvas-webgl-imagetex.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas/OffscreenCanvas-2d-drawImage.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas/OffscreenCanvas-2d-drawImage.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas/OffscreenCanvas-2d-drawImage.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas/OffscreenCanvas-2d-drawImage.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas/rendering-contexts-back-references.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas/rendering-contexts-back-references.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas/rendering-contexts-back-references.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas/rendering-contexts-back-references.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/canvas/webgl/* [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/canvas/webgl/* [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/canvas/webgl/* [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/canvas/webgl/* [ Skip ]
crbug.com/1295317 [ Win11-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Skip ]
crbug.com/1295317 [ Mac13-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Skip ]
crbug.com/1295317 [ Mac12-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Skip ]
crbug.com/1295317 [ Mac11-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/* [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/* [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/* [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/* [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] http/tests/canvas/webgl/origin-clean-conformance.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] http/tests/canvas/webgl/origin-clean-conformance.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] http/tests/canvas/webgl/origin-clean-conformance.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] http/tests/canvas/webgl/origin-clean-conformance.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] inspector-protocol/timeline/gpu-tasks.js [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] inspector-protocol/timeline/gpu-tasks.js [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] inspector-protocol/timeline/gpu-tasks.js [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] inspector-protocol/timeline/gpu-tasks.js [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] http/tests/security/cross-origin-OffscreenCanvasWebGL-texImage2D.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] http/tests/security/cross-origin-OffscreenCanvasWebGL-texImage2D.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] http/tests/security/cross-origin-OffscreenCanvasWebGL-texImage2D.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] http/tests/security/cross-origin-OffscreenCanvasWebGL-texImage2D.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] http/tests/security/webgl-cross-origin-ImageBitmap-blocked.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] http/tests/security/webgl-cross-origin-ImageBitmap-blocked.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] http/tests/security/webgl-cross-origin-ImageBitmap-blocked.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] http/tests/security/webgl-cross-origin-ImageBitmap-blocked.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] http/tests/security/webgl-remote-read-remote-image-allowed-with-credentials.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] http/tests/security/webgl-remote-read-remote-image-allowed-with-credentials.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] http/tests/security/webgl-remote-read-remote-image-allowed-with-credentials.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] http/tests/security/webgl-remote-read-remote-image-allowed-with-credentials.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] http/tests/security/webgl-remote-read-remote-image-allowed.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] http/tests/security/webgl-remote-read-remote-image-allowed.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] http/tests/security/webgl-remote-read-remote-image-allowed.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] http/tests/security/webgl-remote-read-remote-image-allowed.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] images/color-profile-munsell-adobe-to-srgb-webgl.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] images/color-profile-munsell-adobe-to-srgb-webgl.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] images/color-profile-munsell-adobe-to-srgb-webgl.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] images/color-profile-munsell-adobe-to-srgb-webgl.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] images/webgl-teximage2d.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] images/webgl-teximage2d.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] images/webgl-teximage2d.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] images/webgl-teximage2d.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] inspector-protocol/debugger/domdebugger-webgl-breakpoint.js [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] inspector-protocol/debugger/domdebugger-webgl-breakpoint.js [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] inspector-protocol/debugger/domdebugger-webgl-breakpoint.js [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] inspector-protocol/debugger/domdebugger-webgl-breakpoint.js [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] printing/webgl-repeated-printing-preservedrawingbuffer.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] printing/webgl-repeated-printing-preservedrawingbuffer.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] printing/webgl-repeated-printing-preservedrawingbuffer.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] printing/webgl-repeated-printing-preservedrawingbuffer.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] printing/webgl-repeated-printing.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] printing/webgl-repeated-printing.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] printing/webgl-repeated-printing.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] printing/webgl-repeated-printing.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] wpt_internal/webxr/* [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] wpt_internal/webxr/* [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] wpt_internal/webxr/* [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] wpt_internal/webxr/* [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] compositing/webgl/webgl-with-accelerated-background-color.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] compositing/webgl/webgl-with-accelerated-background-color.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] compositing/webgl/webgl-with-accelerated-background-color.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] compositing/webgl/webgl-with-accelerated-background-color.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/canvas-to-data-url.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/canvas-to-data-url.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/canvas-to-data-url.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/canvas-to-data-url.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/context-destroyed-crash.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/context-destroyed-crash.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/context-destroyed-crash.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/context-destroyed-crash.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/offscreenCanvas-context-lost-restored-worker.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/offscreenCanvas-context-lost-restored-worker.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/offscreenCanvas-context-lost-restored-worker.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/offscreenCanvas-context-lost-restored-worker.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/offscreenCanvas-context-lost-worker.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/offscreenCanvas-context-lost-worker.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/offscreenCanvas-context-lost-worker.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/offscreenCanvas-context-lost-worker.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/offscreenCanvas-transferToImageBitmap-invalid-mailbox.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/offscreenCanvas-transferToImageBitmap-invalid-mailbox.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/offscreenCanvas-transferToImageBitmap-invalid-mailbox.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/offscreenCanvas-transferToImageBitmap-invalid-mailbox.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/texImage-imageBitmap-from-blob-resize.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/texImage-imageBitmap-from-blob-resize.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/texImage-imageBitmap-from-blob-resize.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/texImage-imageBitmap-from-blob-resize.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/texImage-imageBitmap-from-canvas-resize.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/texImage-imageBitmap-from-canvas-resize.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/texImage-imageBitmap-from-canvas-resize.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/texImage-imageBitmap-from-canvas-resize.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/texImage-imageBitmap-from-image-resize.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/texImage-imageBitmap-from-image-resize.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/texImage-imageBitmap-from-image-resize.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/texImage-imageBitmap-from-image-resize.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/texImage-imageBitmap-from-image.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/texImage-imageBitmap-from-image.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/texImage-imageBitmap-from-image.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/texImage-imageBitmap-from-image.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/texImage-imageBitmap-from-offscreen-canvas-resize.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/texImage-imageBitmap-from-offscreen-canvas-resize.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/texImage-imageBitmap-from-offscreen-canvas-resize.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/texImage-imageBitmap-from-offscreen-canvas-resize.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/texImage-imageBitmap-from-video-resize.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/texImage-imageBitmap-from-video-resize.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/texImage-imageBitmap-from-video-resize.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/texImage-imageBitmap-from-video-resize.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/webgl-composite-modes-repaint.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/webgl-composite-modes-repaint.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/webgl-composite-modes-repaint.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/webgl-composite-modes-repaint.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/webgl-composite-modes-tabswitching.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/webgl-composite-modes-tabswitching.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/webgl-composite-modes-tabswitching.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/webgl-composite-modes-tabswitching.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/webgl-texture-binding-preserved.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/webgl-texture-binding-preserved.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/webgl-texture-binding-preserved.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/webgl-texture-binding-preserved.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] fast/webgl/webgl-viewport-parameters-preserved.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] fast/webgl/webgl-viewport-parameters-preserved.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] fast/webgl/webgl-viewport-parameters-preserved.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] fast/webgl/webgl-viewport-parameters-preserved.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-main.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-main.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-main.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-main.html [ Skip ]
crbug.com/1378476 [ Mac11-arm64 ] virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-worker.html [ Skip ]
crbug.com/1378476 [ Mac12-arm64 ] virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-worker.html [ Skip ]
crbug.com/1378476 [ Win11-arm64 ] virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-worker.html [ Skip ]
crbug.com/1378476 [ Mac13-arm64 ] virtual/threaded/fast/idleToBlob/OffscreenCanvas-convertToBlob-webgl-worker.html [ Skip ]
# Chrome for Testing specific tests that only run on Linux due to requiring FlagSpecific overrides.
crbug.com/1446931 [ Android ] inspector-protocol/heap-profiler/heap-snapshot-exposes-cpp-internals.js [ Skip ]
crbug.com/1446931 [ Fuchsia ] inspector-protocol/heap-profiler/heap-snapshot-exposes-cpp-internals.js [ Skip ]

@ -16,6 +16,7 @@
#include "ui/gl/egl_util.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_display.h"
#include "ui/gl/gl_features.h"
#include "ui/gl/gl_fence.h"
#include "ui/gl/gl_gl_api_implementation.h"
#include "ui/gl/gl_surface_egl.h"
@ -204,10 +205,13 @@ bool GLContextEGL::InitializeImpl(GLSurface* compatible_surface,
bool is_swangle = IsSoftwareGLImplementation(GetGLImplementationParts());
if (attribs.webgl_compatibility_context && is_swangle &&
IsARMSwiftShaderPlatform()) {
IsARMSwiftShaderPlatform() &&
!features::IsSwiftShaderAllowedByCommandLine(
base::CommandLine::ForCurrentProcess())) {
// crbug.com/1378476: LLVM 10 is used as the JIT compiler for SwiftShader,
// which doesn't fully support ARM. Disable Swiftshader on ARM CPUs for
// WebGL until LLVM is upgraded.
// Allow SwiftShader if explicitly requested by command line for testing.
DVLOG(1) << __FUNCTION__
<< ": Software WebGL contexts are not supported on ARM CPUs.";
return false;

@ -234,4 +234,46 @@ void GetANGLEFeaturesFromCommandLineAndFinch(
#endif
}
#if BUILDFLAG(ENABLE_SWIFTSHADER)
bool IsSwiftShaderAllowedByCommandLine(const base::CommandLine* command_line) {
// If the switch to opt-into unsafe SwiftShader is present, always allow
// SwiftShader.
if (command_line->HasSwitch(switches::kEnableUnsafeSwiftShader)) {
return true;
}
std::string angle_name =
command_line->GetSwitchValueASCII(switches::kUseANGLE);
if (angle_name == gl::kANGLEImplementationSwiftShaderName) {
// If SwiftShader is specifically requested with the --use-angle command
// line flag, allow it.
return true;
}
return false;
}
// Allow fallback to SwfitShader without command line flags during the
// deprecation period.
BASE_FEATURE(kAllowSwiftShaderFallback,
"AllowSwiftShaderFallback",
base::FEATURE_ENABLED_BY_DEFAULT);
bool IsSwiftShaderAllowedByFeature() {
return base::FeatureList::IsEnabled(kAllowSwiftShaderFallback);
}
#else
bool IsSwiftShaderAllowedByCommandLine(const base::CommandLine*) {
return false;
}
bool IsSwiftShaderAllowedByFeature() {
return false;
}
#endif
bool IsSwiftShaderAllowed(const base::CommandLine* command_line) {
return IsSwiftShaderAllowedByCommandLine(command_line) ||
IsSwiftShaderAllowedByFeature();
}
} // namespace features

@ -43,6 +43,24 @@ GL_EXPORT void GetANGLEFeaturesFromCommandLineAndFinch(
std::vector<std::string>& enabled_angle_features,
std::vector<std::string>& disabled_angle_features);
#if BUILDFLAG(ENABLE_SWIFTSHADER)
GL_EXPORT BASE_DECLARE_FEATURE(kAllowSwiftShaderFallback);
#endif
// If SwiftShader should be allowed as a GL implementation or WebGL fallback via
// command line flags. Disallowed by default unless explicitly requested with
// --use-angle=swiftshader[-for-webgl], --enable-unsafe-swiftshader
GL_EXPORT bool IsSwiftShaderAllowedByCommandLine(
const base::CommandLine* command_line);
// If SwiftShader should be allowed due to the AllowSwiftShaderFallback
// killswitch feature.
GL_EXPORT bool IsSwiftShaderAllowedByFeature();
// SwiftShader is allowed by either IsSwiftShaderAllowedByCommandLine or
// IsSwiftShaderAllowedByFeature.
GL_EXPORT bool IsSwiftShaderAllowed(const base::CommandLine* command_line);
} // namespace features
#endif // UI_GL_GL_FEATURES_H_

@ -23,6 +23,7 @@
#include "build/chromeos_buildflags.h"
#include "ui/gl/buildflags.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_features.h"
#include "ui/gl/gl_gl_api_implementation.h"
#include "ui/gl/gl_version_info.h"

@ -141,6 +141,9 @@ const char kEnableDirectCompositionVideoOverlays[] =
// only used on Windows, as LUID is a Windows specific structure.
const char kUseAdapterLuid[] = "use-adapter-luid";
// Allow usage of SwiftShader for WebGL
const char kEnableUnsafeSwiftShader[] = "enable-unsafe-swiftshader";
// Used for overriding the swap chain format for direct composition SDR video
// overlays.
const char kDirectCompositionVideoSwapChainFormat[] =
@ -162,6 +165,7 @@ const char* const kGLSwitchesCopiedFromGpuProcessHost[] = {
kEnableSwapBuffersWithBounds,
kEnableDirectCompositionVideoOverlays,
kDirectCompositionVideoSwapChainFormat,
kEnableUnsafeSwiftShader,
};
const size_t kGLSwitchesCopiedFromGpuProcessHostNumSwitches =
std::size(kGLSwitchesCopiedFromGpuProcessHost);

@ -72,6 +72,7 @@ GL_EXPORT extern const char kDisableGLExtensions[];
GL_EXPORT extern const char kEnableSwapBuffersWithBounds[];
GL_EXPORT extern const char kEnableDirectCompositionVideoOverlays[];
GL_EXPORT extern const char kUseAdapterLuid[];
GL_EXPORT extern const char kEnableUnsafeSwiftShader[];
GL_EXPORT extern const char kDirectCompositionVideoSwapChainFormat[];

@ -15,6 +15,7 @@
#include "base/strings/string_util.h"
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#include "ui/gl/gl_features.h"
#include "ui/gl/gl_share_group.h"
#include "ui/gl/gl_surface.h"
#include "ui/gl/gl_utils.h"
@ -51,11 +52,11 @@ GLImplementationParts GetRequestedGLImplementation() {
// If the passthrough command decoder is enabled, put ANGLE first if allowed
if (UsePassthroughCommandDecoder(cmd)) {
std::vector<GLImplementationParts> angle_impls = {};
bool software_gl_allowed = false;
bool software_gl_in_allow_list = false;
auto iter = allowed_impls.begin();
while (iter != allowed_impls.end()) {
if ((*iter) == GetSoftwareGLImplementation()) {
software_gl_allowed = true;
software_gl_in_allow_list = true;
allowed_impls.erase(iter);
} else if (iter->gl == kGLImplementationEGLANGLE) {
angle_impls.emplace_back(*iter);
@ -67,8 +68,9 @@ GLImplementationParts GetRequestedGLImplementation() {
allowed_impls.insert(allowed_impls.begin(), angle_impls.begin(),
angle_impls.end());
// Insert software implementations at the end, after all other hardware
// implementations
if (software_gl_allowed) {
// implementations. If SwiftShader is not allowed as a fallback, don't
// re-insert it.
if (software_gl_in_allow_list && features::IsSwiftShaderAllowed(cmd)) {
allowed_impls.emplace_back(GetSoftwareGLImplementation());
}
}
@ -85,6 +87,8 @@ GLImplementationParts GetRequestedGLImplementation() {
if (!impl_from_cmdline)
return allowed_impls[0];
// Allow software GL if explicitly requested by command line, even if it's not
// in the allowed_impls list.
if (IsSoftwareGLImplementation(*impl_from_cmdline))
return *impl_from_cmdline;