Closed Bug 1615574 Opened 4 years ago Closed 3 years ago

Potential program binary issues on Adreno 3xx


(Core :: Graphics: WebRender, defect, P3)




89 Branch
Tracking Status
firefox89 --- fixed


(Reporter: jnicol, Assigned: jnicol)


(Blocks 2 open bugs)



(1 file)

From my brief testing on an Adreno 3xx I seem to recall seeing some warning messages about glProgramBinary. And yesterday I was browsing chrome's GPU driver bug list and saw this:

Program binaries contain incorrect bound attribute locations on Adreno 3xx GPUs

They seem to disable their program cache on Adreno 3xx as a result. It would be a real shame to have to do the same, for performance reasons. So this will need some investiation before shipping to those devices.

The priority flag is not set for this bug.
:jbonisteel, could you have a look please?

For more information, please visit auto_nag documentation.

Flags: needinfo?(jbonisteel)
Priority: -- → P3
Flags: needinfo?(jbonisteel)
Blocks: wr-adreno3xx
No longer blocks: wr-android

Here's a link to the chrome bug which caused them to block it:

I've never seen any correctness or stability issues due to this, just lots of spam in the logcat because glProgramBinary fails, so we need to recompile the shader again. It's consistent which shaders fail to be loaded by glProgramBinary, and it's pretty much all of them. (only very basic ones are successful, such as the debug overdraw variants).

I'm not sure if we're seeing the same issue as chrome or not. But in any case we should just disable the shader cache on Adreno 3xx. Even if there are no correctness or stability issues, it's a waste of time attempting to cache the shaders when it's only going to fail.

Loading cached shaders with glProgramBinary fails consistently for all
but the most trivial of our shaders on Adreno 3xx, so caching and
attempting to load them is a waste of time. Chromium and other
projects also appear to have disabled their shader caches on Adreno
3xx due to bugs.

This patch moves the gfx.webrender.program-binary-disk pref
declaration from all.js to StaticPrefList.yaml. Rather than directly
using the value of the pref to decide whether to create the shader
cache, we now initialize a Feature in gfxConfigManager with a default
value from the pref and then configure it from the blocklist. On
Android we block the feature on Adreno 3xx devices. The pref remains
true by default on Android and Windows, and false by default on Linux
and Macos.

Assignee: nobody → jnicol
Pushed by
Disable webrender shader cache on Adreno 3xx. r=aosmond
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → 89 Branch
You need to log in before you can comment on or make changes to this bug.