How Chromium's GPU Blocklist Prevents Browser Crashes

This article explains how the Chromium web browser uses a built-in GPU blocklist to maintain system stability and prevent visual corruption. By identifying known buggy graphics drivers and specific hardware configurations at startup, Chromium can selectively disable hardware acceleration features, forcing the browser to rely on safer software-based rendering alternatives instead.

The Role of Hardware Acceleration

Modern web browsers use the Graphics Processing Unit (GPU) to speed up tasks like rendering web pages, playing videos, and running 3D graphics via WebGL. While offloading these tasks from the CPU to the GPU improves performance and battery life, it makes the browser heavily dependent on the host system's graphics drivers. Graphics drivers are complex pieces of software, and bugs within them can cause visual glitches, browser freezes, or even system-wide crashes like the Blue Screen of Death (BSOD).

What is the GPU Blocklist?

To protect users from faulty drivers, Chromium maintains a file within its source code called software_rendering_list.json. This file acts as a comprehensive database of known problematic hardware and driver combinations across Windows, macOS, Linux, Android, and ChromeOS.

Chromium developers populate this list based on crash reports, automated testing, and bug reports submitted by users and hardware vendors. Each entry in the blocklist specifies exact criteria, including:

  • Operating system and version
  • GPU vendor ID (e.g., Intel, AMD, NVIDIA)
  • GPU device ID (specific graphics card models)
  • Driver version numbers (e.g., versions older than a specific release)

How Chromium Detects and Blocks Buggy Drivers

When you launch a Chromium-based browser, it initiates a dedicated GPU process. Before rendering any web content, this process gathers information about your system's graphics hardware and installed driver versions.

Chromium then compares your system's profile against the rules defined in the software_rendering_list.json file. If your system matches an entry on the blocklist, Chromium intervenes before the buggy driver code can be executed.

Granular Feature Disabling

Chromium does not necessarily disable the GPU entirely when it finds a match on the blocklist. Instead, it uses a granular approach to preserve as much performance as possible. A driver might be perfectly stable when decoding video, for instance, but crash when executing complex 3D shaders.

Depending on the specific bug documented in the blocklist, Chromium will selectively disable only the affected features, such as:

  • 2D Canvas Acceleration: Disables GPU rendering for HTML5 canvas elements.
  • GPU Rasterization: Stops the GPU from converting vector graphics and text into pixels.
  • WebGL and WebGPU: Blocks hardware-accelerated 3D graphics APIs.
  • Hardware Video Decode/Encode: Prevents the GPU from processing video streams, which is a common source of crashes on older drivers.

The Fallback: Software Rendering

When a GPU feature is disabled by the blocklist, the browser must still display the web page correctly. Chromium achieves this by falling back to software rendering, which shifts the workload from the GPU back to the system's CPU.

For basic page rendering, Chromium uses its Skia graphics engine to draw pixels directly using the CPU. For complex 3D content like WebGL, Chromium utilizes a built-in software renderer called SwiftShader. SwiftShader emulates a GPU on the CPU, ensuring that 3D web applications still function without triggering the buggy graphics driver, albeit at a slower frame rate.

Driver Bug Workarounds

In addition to the main blocklist, Chromium maintains a secondary list called gpu_driver_bug_list.json. Instead of disabling a feature entirely, this list applies specific code workarounds. If a driver has a known bug when handling a specific graphics command, Chromium will alter how it issues that command to bypass the bug, allowing hardware acceleration to remain active safely.

Checking Your Browser's GPU Status

Users can inspect how the GPU blocklist is affecting their browser at any time. By typing chrome://gpu into the address bar, Chromium displays a detailed report showing which features are hardware-accelerated and which have been disabled due to blocklist rules. Advanced users can bypass this safety mechanism by enabling the chrome://flags/#ignore-gpu-blocklist flag, though doing so exposes the system to the exact crashes and visual corruption the blocklist was designed to prevent.