{"record":{"id":"20425cb4bb83c42c","repo":"kovidgoyal/kitty","slug":"warning-your-gpu-driver-does-not-support-16bit-te","errorCode":null,"errorMessage":"WARNING: Your GPU driver does not support 16bit textures as framebuffer targets, some colors may be slightly inaccurate.","messagePattern":"WARNING: Your GPU driver does not support 16bit textures as framebuffer targets, some colors may be slightly inaccurate\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"kitty/shaders.c","lineNumber":1076,"sourceCode":"        int fmt;\n    } status = {false, GL_RGBA16};\n    glTexImage2D(GL_TEXTURE_2D, 0, status.fmt, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);\n    bind_framebuffer_for_output(*framebuffer_id);\n    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, *texture_id, 0);\n    if (!status.ok) {\n        if (check_framebuffer_status() == NULL) {\n            status.ok = true;\n        } else {\n            if (status.fmt == GL_RGBA16) {\n                // Driver does not support 16 bit FBO so let it choose the\n                // format. It will probably end up choosing 8 bit but\n                // inaccurate colors are better than completely broken rendering.\n                // See https://github.com/kovidgoyal/kitty/issues/9068\n                status.fmt = GL_RGBA;\n                free_framebuffer(framebuffer_id);\n                free_texture(texture_id);\n                setup_texture_as_render_target(width, height, texture_id, framebuffer_id);\n                log_error(\"WARNING: Your GPU driver does not support 16bit textures as framebuffer targets, some colors may be slightly inaccurate.\");\n            } else {\n                fatal(\"Your GPU driver does not support indirect rendering to a GL_RGBA texture via a framebuffer\");\n            }\n        }\n    }\n}\n\nstatic void\nset_cell_uniforms(bool force) {\n    static bool constants_set = false;\n    if (!constants_set || force) {\n        float text_contrast = 1.0f + OPT(text_contrast) * 0.01f;\n        float text_gamma_adjustment = OPT(text_gamma_adjustment) < 0.01f ? 1.0f : 1.0f / OPT(text_gamma_adjustment);\n        for (int i = GRAPHICS_PROGRAM; i <= GRAPHICS_ALPHA_MASK_PROGRAM; i++) {\n            bind_program(i);\n            glUniform1i(program_uniform_location(i, \"image\"), GRAPHICS_UNIT);\n        }\n        for (int i = CELL_PROGRAM; i < CELL_PROGRAM_SENTINEL; i++) {","sourceCodeStart":1058,"sourceCodeEnd":1094,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/shaders.c#L1058-L1094","documentation":"The GPU rejected a 16-bit texture as a framebuffer target, so kitty retried with an 8-bit GL_RGBA texture; rendering works but colors may be slightly inaccurate (banding). Contrast with the fatal() path when even RGBA fails.","triggerScenarios":"setup_texture_as_render_target gets an incomplete framebuffer for the 16-bit format during offscreen rendering (blur/effects, screenshots, startup rendering).","commonSituations":"Buggy GPU drivers (kitty issue #9068), notably some ANGLE/D3D or older mobile GL stacks.","solutions":["Mostly cosmetic - slight color inaccuracy; safe to ignore","Update GPU drivers","Report the driver/OS combination to kitty upstream if banding is unacceptable","Disable offscreen-heavy effects like background blur"],"exampleFix":"# kitty.conf - before\nbackground_blur 20\n# after\nbackground_blur 0","handlingStrategy":"fallback","validationCode":"glxinfo | grep -i 'framebuffer'  # sanity-check FBO support","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Update GPU drivers","Avoid heavy offscreen effects (blur) on known-buggy drivers","Report driver details to kitty upstream"],"tags":["kitty","opengl","framebuffer","gpu-drivers"],"backgroundTag":"framebuffer-incomplete","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}