{"record":{"id":"5dbb5160bc40c8c7","repo":"remotion-dev/remotion","slug":"progressive-pixelate-program-link-failed-log","errorCode":null,"errorMessage":"Progressive pixelate program link failed: ${log ?? '(no log)'}","messagePattern":"Progressive pixelate program link failed: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/effects/src/progressive-pixelate-runtime.ts","lineNumber":159,"sourceCode":"};\n\nconst linkProgram = (\n\tgl: WebGL2RenderingContext,\n\tvs: WebGLShader,\n\tfs: WebGLShader,\n): WebGLProgram => {\n\tconst program = gl.createProgram();\n\tif (!program) {\n\t\tthrow new Error('Failed to create WebGL program');\n\t}\n\n\tgl.attachShader(program, vs);\n\tgl.attachShader(program, fs);\n\tgl.linkProgram(program);\n\tif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n\t\tconst log = gl.getProgramInfoLog(program);\n\t\tgl.deleteProgram(program);\n\t\tthrow new Error(\n\t\t\t`Progressive pixelate program link failed: ${log ?? '(no log)'}`,\n\t\t);\n\t}\n\n\treturn program;\n};\n\nexport const setupProgressivePixelate = (\n\ttarget: HTMLCanvasElement,\n): ProgressivePixelateState => {\n\tconst gl = target.getContext('webgl2', {\n\t\tpremultipliedAlpha: true,\n\t\talpha: true,\n\t\tpreserveDrawingBuffer: true,\n\t});\n\tif (!gl) {\n\t\tthrow createWebGL2ContextError('progressive pixelate effect');\n\t}","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/effects/src/progressive-pixelate-runtime.ts#L141-L177","documentation":"Thrown by linkProgram in progressive-pixelate-runtime.ts when gl.getProgramParameter(program, gl.LINK_STATUS) is false. Both shaders compiled (812 would have fired otherwise), so this is a linker-stage rejection of the progressive-pixelate program on the current driver. The program info log is captured before deletion and embedded in the message.","triggerScenarios":"setupProgressivePixelate: shaders compiled, gl.linkProgram ran, LINK_STATUS is false. The driver's linker info log is in the thrown message.","commonSituations":"Driver linker bug; Chrome for Testing with a stripped GLSL linker; very rarely, a library regression that introduced a varying/uniform mismatch between vertex and fragment shaders.","solutions":["Read the interpolated info log — linker errors cite unmatched varyings, unsupported precision, or uniform count limits.","Reproduce on stable desktop Chrome; success there points to the render environment.","On Lambda use the published Chrome for Testing layer.","Update or roll back the GPU driver on the failing machine.","If the log shows a genuine link error, file a Remotion issue with the log and version."],"exampleFix":"// before\nsetupProgressivePixelate(canvas); // 'Progressive pixelate program link failed: ...'\n\n// after — surface renderer identity alongside the link log\ntry {\n  setupProgressivePixelate(canvas);\n} catch (err) {\n  const gl = canvas.getContext('webgl2');\n  const dbg = gl?.getExtension('WEBGL_debug_renderer_info');\n  console.error((err as Error).message, 'renderer:', dbg && gl?.getParameter(dbg.UNMASKED_RENDERER_WEBGL));\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  setupProgressivePixelate(canvas);\n} catch (err) {\n  const msg = (err as Error).message;\n  if (msg.startsWith('Progressive pixelate program link failed')) {\n    const gl = canvas.getContext('webgl2');\n    const dbg = gl?.getExtension('WEBGL_debug_renderer_info');\n    console.error(msg, 'renderer:', dbg && gl?.getParameter(dbg.UNMASKED_RENDERER_WEBGL));\n  }\n  throw err;\n}","preventionTips":["Capture and read the program info log from the message first.","Reproduce on stable desktop Chrome to isolate environment.","Avoid custom Chromium builds in headless pipelines.","Update or roll back the GPU driver when one machine reproduces.","Report genuine linker mismatches to Remotion with the log and version."],"tags":["webgl","glsl","progressive-pixelate","program","driver","diagnostics"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}