botcheckme

Your browser is drawing with software graphics

SwiftShader and llvmpipe are what a browser falls back to when there is no usable graphics chip. That is what a container looks like — and it is also what a laptop with acceleration switched off looks like.

This row has a setting behind it and the setting is called hardware acceleration. Turn it on, restart the browser fully, and read again — that clears it for most people who see it, and the rest of this page is for the ones it does not clear.

When a page asks for WebGL, the browser reports the name of the adapter it is drawing with. On an ordinary machine that string names a real piece of hardware. On a machine without one, it names a software rasteriser: SwiftShader on Chromium, llvmpipe on Mesa, or a basic renderer on Windows.

A vendor reading that string does not conclude “this person turned off acceleration”. It concludes “this is very probably a server”, because servers are where browsers run without graphics chips, and servers are where automation runs.

Why acceleration ends up off

  • It was switched off deliberately, usually to stop a flickering or tearing bug, and never switched back on.
  • The graphics driver crashed often enough that the browser blocklisted it automatically, and now falls back silently.
  • The machine is a virtual desktop, a remote session, or a VM without GPU passthrough — in which case there is genuinely no chip to use.
  • A privacy extension is spoofing the renderer string to a generic value, which lands you here for a completely different reason.

How do I check whether hardware acceleration is actually on?

The settings toggle tells you what was asked for. It does not tell you what happened, and the gap between those two is where most of this row lives — a browser that was told to accelerate and could not will not raise an error, it will quietly rasterise everything on the processor and carry on.

Chromium browsers publish the answer at the internal address chrome://gpu (edge://gpu, brave://gpu). The top block lists each graphics feature as hardware accelerated, software only, or disabled, and further down there is a plain-language reason for anything that was turned off — including whether your driver was blocklisted and why. Firefox has the same thing under about:support, in the Graphics section.

Read one line specifically: the renderer or adapter name. If it says SwiftShader, llvmpipe, Microsoft Basic Render Driver or similar, the fallback happened. If it names a chip, this row is not about you.

Turning it back on

  1. Chrome, Edge, Brave and other Chromium browsers: Settings → System → “Use graphics acceleration when available”. Turn it on and restart the browser fully.
  2. Firefox: Settings → General → Performance. Untick “Use recommended performance settings”, then tick “Use hardware acceleration when available”. Restart.
  3. Safari: acceleration is not user-configurable. If your row shows a software renderer on Safari, it is a virtual machine or a remote session.
  4. If it is already on and you still get a software renderer, update your graphics driver. A browser falls back when the driver refuses to initialise, and it does so without telling you.

Why doesn’t turning it on stick?

Because the toggle is a request and the browser is allowed to refuse it. Three refusals are common and each has a different remedy.

The driver is on the browser's blocklist. Browsers ship a list of driver versions known to crash, and a machine whose driver is on it falls back permanently no matter what the toggle says. chrome://gpu names the blocklist entry. The fix is a driver update from the chip vendor rather than from your operating system's update service, which frequently ships an older build.

The browser did not restart properly. Closing every window is not the same as quitting on macOS, and on Windows a background process can keep the old settings alive. Quit from the menu, or check for a leftover process, then reopen.

Power management turned it off. Some laptops disable the discrete graphics chip on battery, and some operating-system battery savers restrict what a browser may use. Plug in and read again before concluding anything — that also happens to be the execution-budget row's first fix, and the two rows share a cause more often than they look like they should.

Remote desktops, virtual machines and cloud PCs

If you reach this machine over a remote session, a large part of this page does not apply and it is better to say so than to send you round a settings screen. A remote desktop draws on the machine you are sitting at, not the one the browser runs on, so the browser genuinely has no chip and reports exactly that.

The same is true of a virtual machine without graphics passthrough, of most cloud development environments, and of a browser running inside a container for whatever reason. The renderer string is telling the truth. A vendor reading it as “probably a server” is not making a mistake about the machine — it is making a mistake about the person, which is the difference this whole site is about.

There is no setting here. The row will stay on your reading and it should. What you can do is clear everything else, so that the software renderer is the only unusual thing about the request rather than the fourth.

Does a privacy extension that spoofs the renderer help?

It moves you from one unusual answer to a different unusual answer, and typically to a worse one. Extensions that generalise the renderer string tend to report a value that is either implausible for the rest of the machine or identical for everyone running that extension, and a check that compares the renderer against the other graphics capabilities it can read will find the two do not agree.

A disagreement is worse than an oddity. An odd renderer says the machine is unusual; a renderer that contradicts the rest of the reading says something is rewriting answers, which is the one thing an anti-bot check is unambiguously built to act on. If you have such an extension and this row is firing, turning it off is the change to test first.

If there is no chip to switch on

On a remote desktop, a cloud workstation or a VM without passthrough, this row will never clear and no setting will change it. That is one of the rows this site is honest about: some readings are properties of the machine you are given, not of a checkbox you missed.

Graphics renderer

Your browser is drawing with the processor instead of a graphics chip.

  1. In your browser's settings, search for 'hardware acceleration' and switch it back on, then restart the browser.
  2. If it is already on, update your graphics driver — a browser falls back to software when the driver refuses to start.
  3. On a remote desktop or a virtual machine there may be no graphics chip to use. That is not something you can switch on.
What an ordinary browser shows
the name of a real graphics chip
Whose fix this is
Changeable from a settings screen on this machine
The word this prints on your plate
SOFT

This is the general case. Read your own browser and the row will say whether it applies to you, in your machine's own values.

A row's place on your reading is one multiplication, and both halves of it are published. Neither half is a measurement.

Surprisal −log₂ of an assumed probability of 0.0200 for “the browser is drawing with a software renderer”
5.64 bits
Challenge weight Software graphics instead of a GPU — how much a bot check is judged to act on it
0.60
Rank The product. It orders the rows and nothing else.
3.39

Why that assumption

Taken unchanged from the shared rubric's GPU prior, which assumes SwiftShader and llvmpipe at p=0.02 against any other specific renderer string at p=0.0025.

Why that weight

SwiftShader and llvmpipe are what a browser falls back to inside a container, and vendors know it. It is also what a laptop with hardware acceleration switched off looks like, which is why this row exists at all.

Every assumption, with its number → · Every weight, and what is deliberately not measured →

Questions about the “Graphics renderer” row

Why does a website think I’m a bot after I turned off hardware acceleration?
Because the browser then names a software rasteriser — SwiftShader, llvmpipe, a basic render driver — as the thing it draws with, and the machines that ordinarily report those strings are servers rather than laptops. The check is not reading your setting; it is reading the consequence of it, and the consequence is indistinguishable from a browser with no graphics chip at all.
How do I know if hardware acceleration is really on?
Open chrome://gpu in a Chromium browser, or about:support in Firefox, and read the renderer or adapter name. A real chip name means it is working. SwiftShader, llvmpipe or Microsoft Basic Render Driver means the browser fell back, whatever the settings screen claims — and the same page will usually tell you why, including whether your driver was blocklisted.
Will turning hardware acceleration back on stop the captchas?
It clears this row, and if this row was ranked first on your reading that is frequently enough to change the outcome. It does nothing for the address you connect from or for a clock that disagrees with your VPN. The reading ranks them precisely so you can tell whether this is the one worth restarting your browser for.
I’m on a remote desktop or a virtual machine. Can I fix this at all?
Not this row. There is no graphics chip in the session, the renderer string is accurate, and no setting invents hardware. What is worth doing is clearing everything that does have a setting behind it, so the software renderer becomes the only unusual thing about your request rather than one of several that compound.
Should I use an extension that hides my graphics card?
It usually makes this worse. A spoofed renderer tends to contradict the other graphics capabilities the same page can read, and a contradiction is acted on harder than an oddity — an odd machine is merely unusual, but answers that cannot all be true suggest something is rewriting them. If you have one installed and this row is firing, turn it off and read again before changing anything else.

READ AT PRIOR TABLE ED. 1.0.0 · 2026-10-13 · ASSUMED, NOT MEASURED

The rank is taken against 15 written assumptions about how common each value is and 16 written weights about how much each one matters. 9 of them we think are probably wrong. Real counts from the browsers these sites have read appear beside a row, never inside its rank. Read the assumptions →

The rows you cannot fix from a settings page

A VPN you need for work, an address your ISP shares with a thousand other subscribers, a laptop with no graphics chip, a hardened profile that breaks the sites it was meant to protect — none of these have a checkbox. What is left is to present a reading that is internally consistent and ordinary on purpose, instead of one that is accidentally strange.

Donut Browser does that at the engine level: its Wayfern Chromium fork applies the fingerprint through CDP injection rather than patching JavaScript in the page, and it refuses to launch a profile whose proxy exit country, time zone and language contradict the profile's own fingerprint — which is the top row of most readings on this site. It is AGPL-3.0, it has no telemetry of any kind, and it runs on macOS, Windows and Linux.

Stated plainly: this site has no test results showing what any particular anti-bot service does with any particular browser, and neither does Donut Browser's own repository. What can be checked is the source, which is public.