Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skia shader compilation error in Linux #3925

Closed
shenzhui007 opened this issue Dec 5, 2023 · 3 comments
Closed

Skia shader compilation error in Linux #3925

shenzhui007 opened this issue Dec 5, 2023 · 3 comments
Assignees
Labels
Status: Pending Type: Bug Something isn't working

Comments

@shenzhui007
Copy link

What happened?

I was able to open the interface successfully in the past few months. However, when I ran the command "./notesnook_linux_x86_64.AppImage" one day, I noticed that the interface failed to render. I pressed CTRL+SHIFT+I and took a screenshot. I also tried older versions, but they all failed.

The solution is to delete the folder "/home/$user/.config/Notesnoke" and then log in again. Everything goes well after that.

I hope this can be helpful.

Screenshot_2023-12-05_07-09-46

Steps to reproduce the problem

My OS is Kali Linux which is a Debian-based system.
run ./notesnook_linux_x86_64.AppImage

Version

v2.6.12

Platform/OS

Linux

Relevant log output

App ready. Opening window.
https protocol inteception "successful"
[51101:1205/070051.798010:ERROR:object_proxy.cc(590)] Failed to call method: org.freedesktop.portal.Settings.Read: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop
Intercepting request: https://app.notesnook.com/
Intercepting request: https://app.notesnook.com/assets/index-df75c6aa.js
Intercepting request: https://app.notesnook.com/assets/index-0f3945e349bb.css
[51133:1205/070052.237361:ERROR:shared_context_state.cc(81)] Skia shader compilation error
------------------------
// Vertex SKSL
#extension GL_NV_shader_noperspective_interpolation: require
const float PRECISION = 4.000000;
const float MAX_FIXED_RESOLVE_LEVEL = 5.000000;
const float MAX_FIXED_SEGMENTS = 32.000000;
uniform float4 sk_RTAdjust;uniform float4 uaffineMatrix_S0;uniform float2 utranslate_S0;in float2 resolveLevel_and_idx;in float4 p01;in float4 p23;in float2 fanPointAttrib;float wangs_formula_max_fdiff_p2(float2 p0, float2 p1, float2 p2, float2 p3,float2x2 matrix) {float2 d0 = matrix * (fma(float2(-2), p1, p2) + p0);float2 d1 = matrix * (fma(float2(-2), p2, p3) + p1);return max(dot(d0,d0), dot(d1,d1));}float wangs_formula_cubic(float _precision_, float2 p0, float2 p1, float2 p2, float2 p3,float2x2 matrix) {float m = wangs_formula_max_fdiff_p2(p0, p1, p2, p3, matrix);return max(ceil(sqrt(0.75 * _precision_ * sqrt(m))), 1.0);}float wangs_formula_cubic_log2(float _precision_, float2 p0, float2 p1, float2 p2, float2 p3,float2x2 matrix) {float m = wangs_formula_max_fdiff_p2(p0, p1, p2, p3, matrix);return ceil(log2(max(0.5625 * _precision_ * _precision_ * m, 1.0)) * .25);}float wangs_formula_conic_p2(float _precision_, float2 p0, float2 p1, float2 p2, float w) {float2 C = (min(min(p0, p1), p2) + max(max(p0, p1), p2)) * 0.5;p0 -= C;p1 -= C;p2 -= C;float m = sqrt(max(max(dot(p0,p0), dot(p1,p1)), dot(p2,p2)));float2 dp = fma(float2(-2.0 * w), p1, p0) + p2;float dw = abs(fma(-2.0, w, 2.0));float rp_minus_1 = max(0.0, fma(m, _precision_, -1.0));float numer = length(dp) * _precision_ + rp_minus_1 * dw;float denom = 4 * min(w, 1.0);return numer/denom;}float wangs_formula_conic(float _precision_, float2 p0, float2 p1, float2 p2, float w) {float n2 = wangs_formula_conic_p2(_precision_, p0, p1, p2, w);return max(ceil(sqrt(n2)), 1.0);}float wangs_formula_conic_log2(float _precision_, float2 p0, float2 p1, float2 p2, float w) {float n2 = wangs_formula_conic_p2(_precision_, p0, p1, p2, w);return ceil(log2(max(n2, 1.0)) * .5);}bool is_conic_curve() { return isinf(p23.w); }bool is_triangular_conic_curve() { return isinf(p23.z); }float ldexp_portable(float x, float p) {return x * exp2(p);}void main() {// Primitive Processor tessellate_MiddleOutShader
float2x2 AFFINE_MATRIX = float2x2(uaffineMatrix_S0.xy, uaffineMatrix_S0.zw);float2 TRANSLATE = utranslate_S0;float resolveLevel = resolveLevel_and_idx.x;float idxInResolveLevel = resolveLevel_and_idx.y;float2 localcoord;if (resolveLevel < 0) {localcoord = fanPointAttrib;} else if (is_triangular_conic_curve()) {localcoord = (resolveLevel != 0) ? p01.zw: (idxInResolveLevel != 0) ? p23.xy: p01.xy;} else {float2 p0=p01.xy, p1=p01.zw, p2=p23.xy, p3=p23.zw;float w = -1;float maxResolveLevel;if (is_conic_curve()) {w = p3.x;maxResolveLevel = wangs_formula_conic_log2(PRECISION, AFFINE_MATRIX * p0,AFFINE_MATRIX * p1,AFFINE_MATRIX * p2, w);p1 *= w;p3 = p2;} else {maxResolveLevel = wangs_formula_cubic_log2(PRECISION, p0, p1, p2, p3,AFFINE_MATRIX);}if (resolveLevel > maxResolveLevel) {idxInResolveLevel = floor(ldexp_portable(idxInResolveLevel,maxResolveLevel - resolveLevel));resolveLevel = maxResolveLevel;}float fixedVertexID = floor(.5 + ldexp_portable(idxInResolveLevel, MAX_FIXED_RESOLVE_LEVEL - resolveLevel));if (0 < fixedVertexID && fixedVertexID < MAX_FIXED_SEGMENTS) {float T = fixedVertexID * (1 / MAX_FIXED_SEGMENTS);float2 ab = mix(p0, p1, T);float2 bc = mix(p1, p2, T);float2 cd = mix(p2, p3, T);float2 abc = mix(ab, bc, T);float2 bcd = mix(bc, cd, T);float2 abcd = mix(abc, bcd, T);float u = mix(1.0, w, T);float v = w + 1 - u;float uv = mix(u, v, T);localcoord = (w < 0) ?abcd:abc/uv;} else {localcoord = (fixedVertexID == 0) ? p0.xy : p3.xy;}}float2 vertexpos = AFFINE_MATRIX * localcoord + TRANSLATE;sk_Position = vertexpos.xy01;}
// Fragment SKSL
#extension GL_NV_shader_noperspective_interpolation: require
uniform half4 ucolor_S0;void main() {// Stage 0, tessellate_MiddleOutShader
half4 outputColor_S0 = ucolor_S0;const half4 outputCoverage_S0 = half4(1);{ // Xfer Processor: Disable Color
}}
// Vertex GLSL
#version 300 es

#extension GL_NV_shader_noperspective_interpolation : require
precision mediump float;
precision mediump sampler2D;
const highp float PRECISION = 4.0;
const highp float MAX_FIXED_RESOLVE_LEVEL = 5.0;
const highp float MAX_FIXED_SEGMENTS = 32.0;
uniform highp vec4 sk_RTAdjust;
uniform highp vec4 uaffineMatrix_S0;
uniform highp vec2 utranslate_S0;
in highp vec2 resolveLevel_and_idx;
in highp vec4 p01;
in highp vec4 p23;
in highp vec2 fanPointAttrib;
highp float wangs_formula_max_fdiff_p2_ff2f2f2f2f22(highp vec2 p0, highp vec2 p1, highp vec2 p2, highp vec2 p3, highp mat2 matrix) {
    highp vec2 d0 = matrix * (((vec2(-2.0)) * (p1) + (p2)) + p0);
    highp vec2 d1 = matrix * (((vec2(-2.0)) * (p2) + (p3)) + p1);
    return max(dot(d0, d0), dot(d1, d1));
}
highp float wangs_formula_conic_p2_fff2f2f2f(highp float _precision_, highp vec2 p0, highp vec2 p1, highp vec2 p2, highp float w) {
    highp vec2 C = (min(min(p0, p1), p2) + max(max(p0, p1), p2)) * 0.5;
    p0 -= C;
    p1 -= C;
    p2 -= C;
    highp float m = sqrt(max(max(dot(p0, p0), dot(p1, p1)), dot(p2, p2)));
    highp vec2 dp = ((vec2(-2.0 * w)) * (p1) + (p0)) + p2;
    highp float dw = abs(((-2.0) * (w) + (2.0)));
    highp float rp_minus_1 = max(0.0, ((m) * (_precision_) + (-1.0)));
    highp float numer = length(dp) * _precision_ + rp_minus_1 * dw;
    highp float denom = 4.0 * min(w, 1.0);
    return numer / denom;
}
void main() {
    highp mat2 AFFINE_MATRIX = mat2(uaffineMatrix_S0.xy, uaffineMatrix_S0.zw);
    highp vec2 TRANSLATE = utranslate_S0;
    highp float resolveLevel = resolveLevel_and_idx.x;
    highp float idxInResolveLevel = resolveLevel_and_idx.y;
    highp vec2 localcoord;
    if (resolveLevel < 0.0) {
        localcoord = fanPointAttrib;
    } else {
        if (isinf(p23.z)) {
            localcoord = resolveLevel != 0.0 ? p01.zw : (idxInResolveLevel != 0.0 ? p23.xy : p01.xy);
        } else {
            highp vec2 p0 = p01.xy;
            highp vec2 p1 = p01.zw;
            highp vec2 p2 = p23.xy;
            highp vec2 p3 = p23.zw;
            highp float w = -1.0;
            highp float maxResolveLevel;
            if (isinf(p23.w)) {
                w = p3.x;
                highp float _0_n2 = wangs_formula_conic_p2_fff2f2f2f(PRECISION, AFFINE_MATRIX * p0, AFFINE_MATRIX * p1, AFFINE_MATRIX * p2, w);
                maxResolveLevel = ceil(log2(max(_0_n2, 1.0)) * 0.5);
                p1 *= w;
                p3 = p2;
            } else {
                highp float _1_m = wangs_formula_max_fdiff_p2_ff2f2f2f2f22(p0, p1, p2, p3, AFFINE_MATRIX);
                maxResolveLevel = ceil(log2(max(9.0 * _1_m, 1.0)) * 0.25);
            }
            if (resolveLevel > maxResolveLevel) {
                idxInResolveLevel = floor(idxInResolveLevel * exp2(maxResolveLevel - resolveLevel));
                resolveLevel = maxResolveLevel;
            }
            highp float fixedVertexID = floor(0.5 + idxInResolveLevel * exp2(MAX_FIXED_RESOLVE_LEVEL - resolveLevel));
            if (0.0 < fixedVertexID && fixedVertexID < MAX_FIXED_SEGMENTS) {
                highp float T = fixedVertexID * 0.03125;
                highp vec2 ab = mix(p0, p1, T);
                highp vec2 bc = mix(p1, p2, T);
                highp vec2 cd = mix(p2, p3, T);
                highp vec2 abc = mix(ab, bc, T);
                highp vec2 bcd = mix(bc, cd, T);
                highp vec2 abcd = mix(abc, bcd, T);
                highp float u = mix(1.0, w, T);
                highp float v = (w + 1.0) - u;
                highp float uv = mix(u, v, T);
                localcoord = w < 0.0 ? abcd : abc / uv;
            } else {
                localcoord = fixedVertexID == 0.0 ? p0 : p3;
            }
        }
    }
    highp vec2 vertexpos = AFFINE_MATRIX * localcoord + TRANSLATE;
    gl_Position = vec4(vertexpos, 0.0, 1.0);
    gl_Position = vec4(gl_Position.xy * sk_RTAdjust.xz + gl_Position.ww * sk_RTAdjust.yw, 0.0, gl_Position.w);
}

// Fragment GLSL
#version 300 es

#extension GL_NV_shader_noperspective_interpolation : require
precision mediump float;
precision mediump sampler2D;
uniform mediump vec4 ucolor_S0;
void main() {
}


Errors:
link failed but did not provide an info log
[51133:1205/070052.238041:ERROR:shared_context_state.cc(81)] Skia shader compilation error
@thecodrr
Copy link
Contributor

@shenzhui007 thank you for the detailed bug report. Are you running Wayland?

@shenzhui007
Copy link
Author

@thecodrr No, I'm using Xorg.

@thecodrr
Copy link
Contributor

Found this exact issue (and a more "sane" workaround) here: ferdium/ferdium-app#1265

In Notesnook's case, the deletion command would be:

rm -rf ~/.config/Notesnook/GPUCache

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Pending Type: Bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants