Closed Bug 1109708 Opened 10 years ago Closed 8 years ago

WegGL not displaying on FF34 with older hardware

Categories

(Core :: Graphics: CanvasWebGL, defect)

34 Branch
x86
Windows 7
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: lukebenes, Unassigned)

References

Details

(Whiteboard: gfx-noted)

User Agent: Mozilla/5.0 (Windows NT 6.1; rv:34.0) Gecko/20100101 Firefox/34.0
Build ID: 20141126041045

Steps to reproduce:

Go to any WebGL game or demo like http://get.webgl.org/ 
or
http://people.mozilla.org/~eakhgari/es2gears.html


Actual results:

Page will load and FPS counter will run, but no WebGL content is displayed


Expected results:

WebGL content should be displayed like FF32 and earlier.

I have had no issue running WebGL demos and playinig WebGL games on this computer since FF4. It completely stopped working in FF33 ( Bug 1085153 ). And is now working but not displaying in FF34. 

Adapter Description	ATI MOBILITY RADEON X1400
Adapter Drivers	atiumdag atiumdva atitmmxx
Adapter RAM	Unknown
Device ID	0x7145
Direct2D Enabled	Blocked for your graphics driver version. Try updating your graphics driver to version 10.6 or newer.
DirectWrite Enabled	false (6.2.9200.16571)
Driver Date	2-10-2010
Driver Version	8.593.100.0
GPU #2 Active	false
GPU Accelerated Windows	0/3 Basic (OMTC) Blocked for your graphics driver version. Try updating your graphics driver to version 10.6 or newer.
Subsys ID	20031028
Vendor ID	0x1002
WebGL Renderer	Google Inc. -- ANGLE (ATI MOBILITY RADEON X1400 Direct3D9Ex vs_3_0 ps_3_0)
windowLayerManagerRemote	true
AzureCanvasBackend	skia
AzureContentBackend	cairo
AzureFallbackCanvasBackend	cairo
AzureSkiaAccelerated	0

Important Modified Preferences
webgl.force-enabled	true
Component: Untriaged → Canvas: WebGL
Product: Firefox → Core
Tested with nightly: 37.0a1 (2014-12-27)
and the WegGL canvas is still blank on most apps. Examples of apps that work FF32 but are broken on FF33+
http://kripken.github.io/box2d.js/webgl_demo/box2d.html?500
http://www.esenthel.com/
https://developer.mozilla.org/en-US/demos/detail/bananabread
http://kripken.github.io/ammo.js/examples/new/ammo.html

With 37.01a very simple demos like
http://people.mozilla.org/~eakhgari/es2gears.html and https://get.webgl.org/
are working, so progress is being made over FF34.
Tested again with 37.0a1 (2015-01-06). Same issues with complex scenes. They are black and/or missing objects. In addition to the 4 demos above, these also do not work with FF33-FF37 under Win7.

http://www.spacegoo.com/wingsuit/
http://alteredqualia.com/three/examples/webgl_materials_skin.html

Note all of these 6 demos worked in FF <= 32, IE 11 and Chrome 41.
Do things work if you disable OMTC?

ie. set layers.offmainthreadcomposition.enabled to false?
Also, if you could get a regression window for the change from "not working" to "now working but not displaying" that would be very valuable.

Here are the instructions:
http://mozilla.github.io/mozregression/
Jeff Muizelaar,
Thanks for looking into this. I tested both FF 35.0 and 38.0a1(2015-01-19) on Win 7 laptop with X1300. Toggling layers.offmainthreadcomposition.enabled = false resulted in no change. No complex WebGL apps rendered correctly including the 6 examples listed above. I quickly checked my XP desktop with FF 35 and toggling layers.offmainthreadcomposition.enabled did not help that machine either.

When I boot to Ubuntu, WebGL continues to work fine on FF35, so this is likely an ANGLE issue. I first noticed this issue with FF 33 see Bug 1085153.  Chrome at the time also stopped working. So I checked Chrome Canary and it was giving a black screen just like FF is now. But I just checked and all of the demos above are now working fine in Chrome 42.0.2280.2 canary. 

Chrome Canary reports ANGLE commit id 2a30ccefd0c4. Unless 38.0a1(2015-01-19) is running that version of ANGLE or a more recent one, I think that is the source of this problem. If you think it's something else, I can still run mozregression/.
Running mozregression will still be useful in confirming the issue even if it is ANGLE.
OK, I ran a mozregression using the following input:

Error, WebGLis unavailable Error Same as Bug 1085153 -> Good
No Error, Blank/Black WebGl canvas -> Bad

When I finished here were the results:


LOG: MainThread Bisector INFO Narrowed nightly regression window from [
2014-08-28, 2014-08-30] (2 days) to [2014-08-28, 2014-08-29] (1 days) (~0 steps
left)
LOG: MainThread Bisector INFO Got as far as we can go bisecting nightli
es...
LOG: MainThread Bisector INFO Last good revision: 3be45b58fc47
LOG: MainThread Bisector INFO First bad revision: d697d649c765
LOG: MainThread Bisector INFO Pushlog:
https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=3be45b58fc47&tocha
nge=d697d649c765

The last good commit gave an error message and the first bad commit displayed a blank openGL canvas. Could this the the commit that stopped the error message? 
Jeff Gilbert — Bug 996266 - Fall back from failed WebGL context creation attribs. - r=kamidphish,bjacob

The initial cause of WebGL to stop working in FF33 was a bump in ANGLE version, correct?
Jeff G, can you check which aspects Jeff M is covering, and lets split up the work and get this handled, angle problem or not...
Flags: needinfo?(jgilbert)
This is multi-monitor system?  I assume things are still bad with a single display?
@Milan Sreckovic
Both my Radeon X800 XP Desktop and my X1300 Win 7 laptop have a single display. These demos all work fine on FF <=32 and Chrome Canary.
Sorry, Luke, my bad.  I mixed the windows and displays.
:jrmuizel

Is there any additional data like console msgs or debug info that I can give you guys to help determine why WebGL is broken on FF32+? 

http://codepen.io/anon/pen/XJMQwV

Seems like a simple test case. Also Chrome passes all of the following 1.0.2 WebGL Conformance test, but FF fails with older hardware:

conformance/context/context-attributes-alpha-depth-stencil-antialias.html (96 of 101 passed)

    failed: gl.getParameter(gl.DEPTH_BITS) >= 16 should be true. Was false.
    failed: gl.getParameter(gl.STENCIL_BITS) >= 8 should be true. Was false.
    failed: gl.getParameter(gl.DEPTH_BITS) >= 16 should be true. Was false.
    failed: gl.getParameter(gl.STENCIL_BITS) >= 8 should be true. Was false.
    failed: gl.getParameter(gl.DEPTH_BITS) >= 16 should be true. Was false.

Bug 1024151 only resolved this issue on newer hardware. Could it be causing the black screen? 

conformance/renderbuffers/framebuffer-object-attachment.html (454 of 481 passed)

    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.
    failed: should be green
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.
    failed: getError expected: NO_ERROR. Was INVALID_FRAMEBUFFER_OPERATION :
    failed: should be green
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.
    failed: should be green
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.
    failed: getError expected: NO_ERROR. Was INVALID_FRAMEBUFFER_OPERATION :
    failed: should be green
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.
    failed: should be green
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.
    failed: getError expected: NO_ERROR. Was INVALID_FRAMEBUFFER_OPERATION :
    failed: should be green
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.
    failed: should be green
    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.
    failed: getError expected: NO_ERROR. Was INVALID_FRAMEBUFFER_OPERATION :
    failed: should be green
    failed: getError expected: NO_ERROR. Was INVALID_FRAMEBUFFER_OPERATION : 

conformance/renderbuffers/framebuffer-state-restoration.html (15 of 19 passed)

    failed: should still be green
    failed: should still be green
    failed: should still be green
    failed: should still be green

conformance/state/gl-object-get-calls.html (100 of 101 passed)

    failed: gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36053. Was 36054.


conformance/textures/copy-tex-image-2d-formats.html (39 of 51 passed)

    failed: getError expected: NO_ERROR. Was OUT_OF_MEMORY : should be able to copyTexImage2D LUMINANCE from RGBA
    failed: should be 64,64,64,255
    failed: getError expected: NO_ERROR. Was OUT_OF_MEMORY : should be able to copyTexImage2D LUMINANCE_ALPHA from RGBA
    failed: should be 64,64,64,127
    failed: getError expected: NO_ERROR. Was OUT_OF_MEMORY : should be able to copyTexImage2D LUMINANCE from RGB
    failed: should be 64,64,64,255
    failed: getError expected: NO_ERROR. Was OUT_OF_MEMORY : should be able to copyTexImage2D LUMINANCE from RGBA
    failed: should be 64,64,64,255
    failed: getError expected: NO_ERROR. Was OUT_OF_MEMORY : should be able to copyTexImage2D LUMINANCE_ALPHA from RGBA
    failed: should be 64,64,64,127
    failed: getError expected: NO_ERROR. Was OUT_OF_MEMORY : should be able to copyTexImage2D LUMINANCE from RGB
    failed: should be 64,64,64,255


Any of these failures hint at what's going on?
I'll try to look into this next week.
Flags: needinfo?(jmuizelaar)
Can you post your about:support from FF32? I assume the above about:support information is from FF33?
Flags: needinfo?(lukebenes)
Adapter Description	ATI MOBILITY RADEON X1400
Adapter Drivers	atiumdag atiumdva atitmmxx
Adapter RAM	Unknown
Device ID	0x7145
Direct2D Enabled	Blocked for your graphics driver version. Try updating your graphics driver to version 9.6 or newer.
DirectWrite Enabled	false (6.2.9200.16571)
Driver Date	2-10-2010
Driver Version	8.593.100.0
GPU #2 Active	false
GPU Accelerated Windows	0/3 Basic (OMTC) Blocked for your graphics driver version. Try updating your graphics driver to version 9.6 or newer.
Subsys ID	20031028
Vendor ID	0x1002
WebGL Renderer	Google Inc. -- ANGLE (ATI MOBILITY RADEON X1400 Direct3D9Ex vs_3_0 ps_3_0)
windowLayerManagerRemote	true
AzureCanvasBackend	skia
AzureContentBackend	cairo
AzureFallbackCanvasBackend	cairo
AzureSkiaAccelerated	0

So quick recap. WebGL worked FF 4-32. In FF 33 and chrome 40 -> "WebGL it is disabled or unavailable" Chrome 41 WEbGL worked as before, but FF gives a black screen with the ANGLE backend.
Flags: needinfo?(lukebenes)
I'm not going to get a chance to look at this more this week as we had some emergency work to do for FF37
Flags: needinfo?(jmuizelaar)
:jrmuizel
OK, no rush. Looking through the bug tracker, I think I found where the issue was reported and fixed for Chrome's ANGLE. 
https://code.google.com/p/chromium/issues/detail?id=412221
This was fixed by by removing fallback format support for D3D9 texture formats

a chrome dev with ATI hardware reported these errors in chrome:
[300:4944:1009/035140:ERROR:gles2_cmd_decoder.cc(3666)] : GLES2DecoderImpl::ResizeOffscreenFrameBuffer failed because offscreen FBO was incomplete.
[300:4944:1009/035140:ERROR:gles2_cmd_decoder.cc(2591)] : Could not allocate offscreen buffer storage.

This jives with the buffer and texture webgl conformance tests that fail on ATI hardware.

Are there plans to sync with upstream ANGLE instead of just cherry picking patches?
I took a look at the web console log. The errors match the issue the framebuffer issue Chrome devs fixed in ANGLE:


all the three.js demos:
Error: WebGL: clear: incomplete framebuffer three.js:17970:2
Error: WebGL: drawElements: incomplete framebuffer three.js:20415:4
Error: WebGL: readPixels: incomplete framebuffer


http://www.esenthel.com/
Error: WebGL: renderbufferStorage: `internalFormat`: Invalid enum: 0x81a6 (DEPTH_COMPONENT24). Application.js:14020:52
Error: WebGL: renderbufferStorage: `internalFormat`: Invalid enum: 0x81a7 (DEPTH_COMPONENT32). Application.js:14020:52
Error: WebGL: clear: incomplete framebuffer

Are there plans to synchronize the ANGLE code base, or could we cherry pick the related patches for 
https://code.google.com/p/chromium/issues/detail?id=412221 ?
Flags: needinfo?(jmuizelaar)
Flags: needinfo?(jmuizelaar)
Flags: needinfo?(jmuizelaar)
Depends on: 1179280
(In reply to Luke from comment #19)
> :jrmuizel
> OK, no rush. Looking through the bug tracker, I think I found where the
> issue was reported and fixed for Chrome's ANGLE. 
> https://code.google.com/p/chromium/issues/detail?id=412221
> This was fixed by by removing fallback format support for D3D9 texture
> formats
> 
> a chrome dev with ATI hardware reported these errors in chrome:
> [300:4944:1009/035140:ERROR:gles2_cmd_decoder.cc(3666)] :
> GLES2DecoderImpl::ResizeOffscreenFrameBuffer failed because offscreen FBO
> was incomplete.
> [300:4944:1009/035140:ERROR:gles2_cmd_decoder.cc(2591)] : Could not allocate
> offscreen buffer storage.
> 
> This jives with the buffer and texture webgl conformance tests that fail on
> ATI hardware.
> 
> Are there plans to sync with upstream ANGLE instead of just cherry picking
> patches?

If this is the case, we probably have the fix for this from our more recent ANGLE updates. Please retest?
Flags: needinfo?(lukebenes)
Flags: needinfo?(jmuizelaar)
Flags: needinfo?(jgilbert)
:jgilbert]

I'm happy to report that all of the simple tests such as:
http://codepen.io/anon/pen/XJMQwV
http://jsfiddle.net/f17Lz5ux/1316/
http://www.goodboydigital.com/pixijs/examples/25/
along with the bananabread demo

Are working again now along with the webgl conformance tests that failed with framebuffer errors

Unfortunately, now http://www.esenthel.com and all of the three.js demos stopped working with new issues.

These demos are still working fine in Chrome, so hopefully this will be fixed in the next angle update.
Flags: needinfo?(lukebenes)
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
(In reply to Luke from comment #22)
> ...
> 
> Unfortunately, now http://www.esenthel.com and all of the three.js demos
> stopped working with new issues.
> 
> These demos are still working fine in Chrome, so hopefully this will be
> fixed in the next angle update.

Any chance you could open a Core/Canvas: WebGL bug for this?  I want to make sure we don't miss it, while we're chasing a few other three.js related problems (just make sure there is three.js in the description.)

Thanks!
You need to log in before you can comment on or make changes to this bug.