google / google/filament

Handle more gracefully backend errors

Open
#3,135 8 comments 0 reactions 1 assignee Claimed by @pixelflinger View on GitHub
Dominant language
C++
Stars
20.5k
Forks
2.3k
Avg merge
2d 14h
Merged PRs (30d)
83

Description

**Describe the bug**
We're trying to render a basic 3D model and while it works on most devices, some devices such as Moto G6 Play have an error like the following in its logs:

```
09-29 16:55:04.183 7486 7839 E Filament: COMPILE ERROR:
09-29 16:55:04.184 7486 7839 E Filament: Fragment shader compilation failed.
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:90: 'Error' : Cannot offset into the vector
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:90: 'Error' : Cannot offset into the vector
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:90: '=' : cannot convert from '3-component vector of float' to 'float'
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:93: 'Error' : Cannot offset into the vector
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:93: 'Error' : Cannot offset into the vector
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:93: 'Error' : Cannot offset into the vector
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:93: 'constructor' : too many arguments
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:93: 'Error' : Cannot offset into the vector
09-29 16:55:04.184 7486 7839 E Filament: ERROR: 0:93: '*' : w
09-29 16:55:04.184 7486 7839 E Filament: 1: #version 300 es
09-29 16:55:04.185 7486 7839 E Filament: 2: precision mediump float;
09-29 16:55:04.185 7486 7839 E Filament: 3: precision mediump int;
09-29 16:55:04.185 7486 7839 E Filament: 4: struct PostProcessInputs
09-29 16:55:04.185 7486 7839 E Filament: 5: {
09-29 16:55:04.185 7486 7839 E Filament: 6: vec4 color;
09-29 16:55:04.185 7486 7839 E Filament: 7: };
09-29 16:55:04.187 7486 7839 E Filament: 8: const vec3 _172[16] = vec3[](vec3(-0.40120899677276611328125, 0.9159870147705078125, 0.031720198690891265869140625), vec3(0.84313297271728515625, -0.537703990936279296875, 0.087920702993869781494140625), vec3(0.4575429856777191162109375, 0.889187991619110107421875, 0.01769370026886463165283203125), vec3(0.976761996746063232421875, -0.21432499587535858154296875, 0.093010701239109039306640625), vec3(-0.05964539945125579833984375, 0.998220026493072509765625, 0.026174999773502349853515625), vec3(0.704176008701324462890625, 0.710025012493133544921875, 0.107385002076625823974609375), vec3(-0.707961022853851318359375, 0.70625102519989013671875, 0.03754340112209320068359375), vec3(0.9094259738922119140625, 0.4158659875392913818359375, 0.102259002625942230224609375), vec3(0.924619972705841064453125, 0.38089001178741455078125, 0.0063620698638260364532470703125), vec3(-0.09386239945888519287109375, 0.995585024356842041015625, 0.0267156995832920074462890625), vec3(-0.905196011066436767578125, -0.4249930083751678466796875, 0.0562839992344379425048828125), vec3(0.19610400497913360595703125, 0.980583012104034423828125, 0.115615002810955047607421875), vec3(-0.7520020008087158203125, -0.65916097164154052734375, 0.0605199001729488372802734375), vec3(-0.575920999050140380859375, 0.81750500202178955078125, 0.1269100010395050048828125), vec3(0.7945950031280517578125, -0.607140004634857177734375, 0.086689300835132598876953125), vec3(0.1788440048694610595703125, 0.983877003192901611328125, 0.115860998630523681640625));
09-29 16:55:04.187 7486 7839 E Filament: 9: const vec3 _317[7] = vec3[](vec3(0.9663259983062744140625, 0.257322013378143310546875, 0.0769231021404266357421875), vec3(-0.697179973125457763671875, 0.716895997524261474609375, 0.23076899349689483642578125), vec3(0.975223004817962646484375, 0.2212260067462921142578125, 0.384615004062652587890625), vec3(0.982770979404449462890625, 0.18482600152492523193359375, 0.538461983203887939453125), vec3(-0.6130549907684326171875, 0.79004001617431640625, 0.692308008670806884765625), vec3(0.997237026691436767578125, 0.074288897216320037841796875, 0.8461539745330810546875), vec3(1.0, -1.1602700169532909058034420013428e-06, 1.0));
09-29 16:55:04.187 7486 7839 E Filament: 10: layout(std140) uniform FrameUniforms
09-29 16:55:04.187 7486 7839 E Filament: 11: {
09-29 16:55:04.187 7486 7839 E Filament: 12: highp mat4 viewFromWorldMatrix;
09-29 16:55:04.187 7486 7839 E Filament: 13: highp mat4 worldFromViewMatrix;
09-29 16:55:04.187 7486 7839 E Filament: 14: highp mat4 clipFromViewMatrix;
09-29 16:55:04.187 7486 7839 E Filament: 15: highp mat4 viewFromClipMatrix;
09-29 16:55:04.187 7486 7839 E Filament: 16: highp mat4 clipFromWorldMatrix;
09-29 16:55:04.187 7486 7839 E Filament: 17: highp mat4 worldFromClipMatrix;
09-29 16:55:04.187 7486 7839 E Filament: 18: highp mat4 lightFromWorldMatrix;
09-29 16:55:04.187 7486 7839 E Filament: 19: highp vec4 resolution;
09-29 16:55:04.187 7486 7839 E Filament: 20: highp vec3 cameraPosition;
09-29 16:55:04.187 7486 7839 E Filament: 21: highp float time;
09-29 16:55:04.187 7486 7839 E Filament: 22: vec4 lightColorIntensity;
09-29 16:55:04.187 7486 7839 E Filament: 23: vec4 sun;
09-29 16:55:04.188 7486 7839 E Filament: 24: vec3 lightDirection;
09-29 16:55:04.188 7486 7839 E Filament: 25: uint fParamsX;
09-29 16:55:04.188 7486 7839 E Filament: 26: vec3 shadowBias;
09-29 16:55:04.188 7486 7839 E Filament: 27: float oneOverFroxelDimensionY;
09-29 16:55:04.188 7486 7839 E Filament: 28: vec4 zParams;
09-29 16:55:04.188 7486 7839 E Filament: 29: uvec2 fParams;
09-29 16:55:04.188 7486 7839 E Filament: 30: vec2 origin;
09-29 16:55:04.188 7486 7839 E Filament: 31: float oneOverFroxelDimension;
09-29 16:55:04.189 7486 7839 E Filament: 32: float iblLuminance;
09-29 16:55:04.189 7486 7839 E Filament: 33: float exposure;
09-29 16:55:04.189 7486 7839 E Filament: 34: float ev100;
09-29 16:55:04.189 7486 7839 E Filament: 35: vec3 iblSH[9];
09-29 16:55:04.189 7486 7839 E Filament: 36: vec4 userTime;
09-29 16:55:04.189 7486 7839 E Filament: 37: vec2 iblMaxMipLevel;
09-29 16:55:04.189 7486 7839 E Filament: 38: vec2 padding0;
09-29 16:55:04.189 7486 7839 E Filament: 39: vec3 worldOffset;
09-29 16:55:04.189 7486 7839 E Filament: 40: float padding1;
09-29 16:55:04.189 7486 7839 E Filament: 41: vec4 padding2[15];
09-29 16:55:04.189 7486 7839 E Filament: 42: } frameUniforms;
09-29 16:55:04.189 7486 7839 E Filament: 43: layout(std140) uniform MaterialParams
09-29 16:55:04.189 7486 7839 E Filament: 44: {
09-29 16:55:04.189 7486 7839 E Filament: 45: vec4 resolution;
09-29 16:55:04.189 7486 7839 E Filament: 46: float radius;
09-29 16:55:04.189 7486 7839 E Filament: 47: float invRadiusSquared;
09-29 16:55:04.189 7486 7839 E Filament: 48: float projectionScaleRadius;
09-29 16:55:04.189 7486 7839 E Filament: 49: float bias;
09-29 16:55:04.190 7486 7839 E Filament: 50: float power;
09-29 16:55:04.190 7486 7839 E Filament: 51: int maxLevel;
09-29 16:55:04.190 7486 7839 E Filament: 52: } materialParams;
09-29 16:55:04.190 7486 7839 E Filament: 53: uniform highp sampler2D materialParams_depth;
09-29 16:55:04.190 7486 7839 E Filament: 54: in highp vec4 variable_vertex;
09-29 16:55:04.190 7486 7839 E Filament: 55: layout(location = 0) out vec4 fragColor;
09-29 16:55:04.190 7486 7839 E Filament: 56: in highp vec2 vertex_uv;
09-29 16:55:04.190 7486 7839 E Filament: 57: PostProcessInputs _1081;
09-29 16:55:04.190 7486 7839 E Filament: 58: vec2 _1088;
09-29 16:55:04.190 7486 7839 E Filament: 59: void main()
09-29 16:55:04.190 7486 7839 E Filament: 60: {
09-29 16:55:04.190 7486 7839 E Filament: 61: PostProcessInputs _1034 = _1081;
09-29 16:55:04.190 7486 7839 E Filament: 62: _1034.color = vec4(1.0);
09-29 16:55:04.190 7486 7839 E Filament: 63: highp float _650 = -frameUniforms.clipFromViewMatrix[3].z;
09-29 16:55:04.190 7486 7839 E Filament: 64: highp float _656 = _650 / min(-5.9604644775390625e-08, ((texture(materialParams_depth, variable_vertex.xy, 0.0).x * 2.0) - 1.0) + frameUniforms.clipFromViewMatrix[2].z);
09-29 16:55:04.190 7486 7839 E Filament: 65: vec2 _665 = (variable_vertex.xy * 2.0) - vec2(1.0);
09-29 16:55:04.190 7486 7839 E Filament: 66: highp vec2 _1040 = _1088;
09-29 16:55:04.190 7486 7839 E Filament: 67: _1040.x = _665.x * frameUniforms.viewFromClipMatrix[0].x;
09-29 16:55:04.190 7486 7839 E Filament: 68: highp vec2 _1044 = _1040;
09-29 16:55:04.190 7486 7839 E Filament: 69: _1044.y = _665.y * frameUniforms.viewFromClipMatrix[1].y;
09-29 16:55:04.190 7486 7839 E Filament: 70: highp vec3 _686 = vec3(_1044 * (-_656), _656);
09-29 16:55:04.190 7486 7839 E Filament: 71: vec2 _704 = variable_vertex.xy + vec2(materialParams.resolution.z, 0.0);
09-29 16:55:04.190 7486 7839 E Filament: 72: vec2 _708 = variable_vertex.xy + vec2(0.0, materialParams.resolution.w);
09-29 16:55:04.190 7486 7839 E Filament: 73: highp float _745 = _650 / min(-5.9604644775390625e-08, ((texture(materialParams_depth, _704, 0.0).x * 2.0) - 1.0) + frameUniforms.clipFromViewMatrix[2].z);
09-29 16:55:04.190 7486 7839 E Filament: 74: vec2 _754 = (_704 * 2.0) - vec2(1.0);
09-29 16:55:04.190 7486 7839 E Filament: 75: highp vec2 _1050 = _1088;
09-29 16:55:04.190 7486 7839 E Filament: 76: _1050.x = _754.x * frameUniforms.viewFromClipMatrix[0].x;
09-29 16:55:04.190 7486 7839 E Filament: 77: highp vec2 _1054 = _1050;
09-29 16:55:04.190 7486 7839 E Filament: 78: _1054.y = _754.y * frameUniforms.viewFromClipMatrix[1].y;
09-29 16:55:04.190 7486 7839 E Filament: 79: highp float _800 = _650 / min(-5.9604644775390625e-08, ((texture(materialParams_depth, _708, 0.0).x * 2.0) - 1.0) + frameUniforms.clipFromViewMatrix[2].z);
09-29 16:55:04.190 7486 7839 E Filament: 80: vec2 _809 = (_708 * 2.0) - vec2(1.0);
09-29 16:55:04.190 7486 7839 E Filament: 81: highp vec2 _1060 = _1088;
09-29 16:55:04.190 7486 7839 E Filament: 82: _1060.x = _809.x * frameUniforms.viewFromClipMatrix[0].x;
09-29 16:55:04.190 7486 7839 E Filament: 83: highp vec2 _1064 = _1060;
09-29 16:55:04.190 7486 7839 E Filament: 84: _1064.y = _809.y * frameUniforms.viewFromClipMatrix[1].y;
09-29 16:55:04.190 7486 7839 E Filament: 85: uint _849 = (uint(gl_FragCoord.x) & 3u) + ((uint(gl_FragCoord.y) & 3u) * 4u);
09-29 16:55:04.190 7486 7839 E Filament: 86: float _1083;
09-29 16:55:04.190 7486 7839 E Filament: 87: _1083 = 0.0;
09-29 16:55:04.190 7486 7839 E Filament: 88: for (uint _1082 = 0u; _1082 < 7u; )
09-29 16:55:04.190 7486 7839 E Filament: 89: {
09-29 16:55:04.190 7486 7839 E Filament: 90: float _963 = _317[_1082].z + _172[_849].z;
09-29 16:55:04.190 7486 7839 E Filament: 91: float _970 = _963 * _963;
09-29 16:55:04.190 7486 7839 E Filament: 92: float _878 = max(1.0, _970 * (-(materialParams.projectionScaleRadius / _656)));
09-29 16:55:04.190 7486 7839 E Filament: 93: ivec2 _884 = ivec2(variable_vertex.xy * materialParams.resolution.xy) + ivec2(vec3(mat2(vec2(_172[_849].xy), vec2(-_172[_849].y, _172[_849].x)) * _317[_1082].xy, _970).xy * _878);
09-29 16:55:04.190 7486 7839 E Filament: 94: int _899 = clamp(int(floor(log2(_878))) - 3, 0, materialParams.maxLevel);
09-29 16:55:04.190 7486 7839 E Filament: 95: highp float _999 = _650 / min(-5.9604644775390625e-08, ((texelFetch(materialParams_depth, clamp(_884 >> ivec2(_899), ivec2(0), textureSize(materialParams_depth, _899) - ivec2(1)), _899).x * 2.0) - 1.0) + frameUniforms.clipFromViewMatrix[2].z);
09-29 16:55:04.190 7486 7839 E Filament: 96: vec2 _1008 = (((vec2(_884) + vec2(0.5)) * materialParams.resolution.zw) * 2.0) - vec2(1.0);
09-29 16:55:04.190 7486 7839 E Filament: 97: highp vec2 _1073 = _1088;
09-29 16:55:04.190 7486 7839 E Filament: 98: _1073.x = _1008.x * frameUniforms.viewFromClipMatrix[0].x;
09-29 16:55:04.191 7486 7839 E Filament: 99: highp vec2 _1077 = _1073;
09-29 16:55:04.191 7486 7839 E Filament: 100: _1077.y = _1008.y * frameUniforms.viewFromClipMatrix[1].y;
09-29 16:55:04.191 7486 7839 E Filament: 101: highp vec3 _917 = vec3(_1077 * (-_999), _999) - _686;
09-29 16:55:04.191 7486 7839 E Filament: 102: float _920 = dot(_917, _917);
09-29 16:55:04.191 7486 7839 E Filament: 103: _1083 += ((clamp(1.0 - (_920 * materialParams.invRadiusSquared), 0.0, 1.0) * max(0.0, dot(_917, normalize(cross(vec3(_1054 * (-_745), _745) - _686, vec3(_1064 * (-_800), _800) - _686))) - materialParams.bias)) / (_920 + 0.014999999664723873138427734375));
09-29 16:55:04.191 7486 7839 E Filament: 104: _1082++;
09-29 16:55:04.191 7486 7839 E Filament: 105: continue;
09-29 16:55:04.191 7486 7839 E Filament: 106: }
09-29 16:55:04.191 7486 7839 E Filament: 107: float _625 = 1.0 - (_1083 * 0.14285714924335479736328125);
09-29 16:55:04.191 7486 7839 E Filament: 108: PostProcessInputs _1079 = _1034;
09-29 16:55:04.191 7486 7839 E Filament: 109: _1079.color.x = mix(_625, _625 * _625, materialParams.power);
09-29 16:55:04.191 7486 7839 E Filament: 110: fragColor = _1079.color;
09-29 16:55:04.191 7486 7839 E Filament: 111: }
```

**To Reproduce**
Steps to reproduce the behavior:
Call render on specific phones. The phone thinks the render happened fine, but will output said logs and not show the model.

**Expected behavior**
Rather than silently failing, is it possible to throw an exception up? Or is there a way to currently detect whether a render successfully happened or not?

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Smartphone (please complete the following information):**
- Device: [e.g. Pixel 2] Moto G6 play
- OS: [e.g. Android Pie 9.0] Android 8.0.0

**Additional context**
Add any other context about the problem here.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.