Firefox 33 RuntimeError: Program failed to link. Link log: Failed to create D3D shaders.

Firefox 33 on Windows 8.1 x64 cannot run Cesium. I get the following error when trying the demos as well as my own code:

An error occurred while rendering. Rendering has stopped.
RuntimeError: Program failed to link. Link log: Failed to create D3D shaders.

RuntimeError@http://cesiumjs.org/Cesium/Source/Core/RuntimeError.js:42:19

createAndLinkProgram@http://cesiumjs.org/Cesium/Source/Renderer/ShaderProgram.js:688:1 initialize@http://cesiumjs.org/Cesium/Source/Renderer/ShaderProgram.js:861:23 ShaderProgram.prototype._bind@http://cesiumjs.org/Cesium/Source/Renderer/ShaderProgram.js:878:9 beginDraw@http://cesiumjs.org/Cesium/Source/Renderer/Context.js:1785:9 Context.prototype.draw@http://cesiumjs.org/Cesium/Source/Renderer/Context.js:1852:9 DrawCommand.prototype.execute@http://cesiumjs.org/Cesium/Source/Renderer/DrawCommand.js:185:9 reprojectToGeographic@http://cesiumjs.org/Cesium/Source/Scene/ImageryLayer.js:910:9 ImageryLayer.prototype._reprojectTexture@http://cesiumjs.org/Cesium/Source/Scene/ImageryLayer.js:670:42 TileImagery.prototype.processStateMachine@http://cesiumjs.org/Cesium/Source/Scene/TileImagery.js:63:13 GlobeSurfaceTile.processStateMachine@http://cesiumjs.org/Cesium/Source/Scene/GlobeSurfaceTile.js:345:39 GlobeSurfaceTileProvider.prototype.loadTile@http://cesiumjs.org/Cesium/Source/Scene/GlobeSurfaceTileProvider.js:375:9 processTileLoadQueue@http://cesiumjs.org/Cesium/Source/Scene/QuadtreePrimitive.js:446:13 QuadtreePrimitive.prototype.update@http://cesiumjs.org/Cesium/Source/Scene/QuadtreePrimitive.js:197:9 Globe.prototype.update@http://cesiumjs.org/Cesium/Source/Scene/Globe.js:984:13 updatePrimitives@http://cesiumjs.org/Cesium/Source/Scene/Scene.js:1308:13 render@http://cesiumjs.org/Cesium/Source/Scene/Scene.js:1364:9 Scene.prototype.render@http://cesiumjs.org/Cesium/Source/Scene/Scene.js:1404:13 CesiumWidget.prototype.render@http://cesiumjs.org/Cesium/Source/Widgets/CesiumWidget/CesiumWidget.js:605:13 render@http://cesiumjs.org/Cesium/Source/Widgets/CesiumWidget/CesiumWidget.js:70:25

``

Here are my browser’s stats from WebGL Report:
Platform: Win32 Browser User Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Context Name: webgl GL Version: WebGL 1.0 Shading Language Version: WebGL GLSL ES 1.0 Vendor: Mozilla Renderer: Mozilla Antialiasing: Available ANGLE: Yes, D3D9 Major Performance Caveat: Not implemented

Vertex Shader
Max Vertex Attributes: 16
Max Vertex Uniform Vectors: 254
Max Vertex Texture Image Units: 4
Max Varying Vectors: 10
Best float precision: [-2127, 2127] (23)

Rasterizer
Aliased Line Width Range: [1, 1]
Aliased Point Size Range: [1, 8192]

Fragment Shader
Max Fragment Uniform Vectors: 221
Max Texture Image Units: 16
float/int precision: highp/highp
Best float precision: [-2127, 2127] (23)

Framebuffer
Max Color Buffers: 1
RGBA Bits: [8, 8, 8, 8]
Depth / Stencil Bits: [24, 8]
Max Render Buffer Size: 16384
Max Viewport Dimensions: [16384, 16384]

Textures
Max Texture Size: 16384
Max Cube Map Texture Size: 16384
Max Combined Texture Image Units: 20
Max Anisotropy: 16

``

Other WebGL implementations seem to work ok, like /https://www.shadertoy.com/

Bart

It’s not just Windows 8.1, it’s broken for me in 7 as well. I’m going to triage this and hopefully we can get Firefox devs to look at it ASAP (assuming we don’t find the problem to be on our end).

I just wrote up a Cesium issue for this: https://github.com/AnalyticalGraphicsInc/cesium/issues/2197

However, I’m fairly confident that this is an ANGLE related Firefox bug and something they need to fix on their end. I’m going to look into filing a Firefox bug for them too look at.

Ok, thanks. Thought I was going crazy when Cesium worked in IE and not Firefox.

Bart

This is definitely a regression in Firefox 33 (bugzilla issue is in the Cesium issue Matt listed above), but it doesn’t appear that they will be able to backport the fix to versions earlier than Aurora (35). So, we’ve put a workaround in place that will be part of Cesium 1.3 that works around the issue in 33 & 34 by falling back to the less precise shader used to reproject imagery on those browsers.