kovidgoyal/kitty · warning
WARNING: Your GPU driver does not support 16bit textures as
Error message
WARNING: Your GPU driver does not support 16bit textures as framebuffer targets, some colors may be slightly inaccurate.
What it means
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.
Source
Thrown at kitty/shaders.c:1076
int fmt;
} status = {false, GL_RGBA16};
glTexImage2D(GL_TEXTURE_2D, 0, status.fmt, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
bind_framebuffer_for_output(*framebuffer_id);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, *texture_id, 0);
if (!status.ok) {
if (check_framebuffer_status() == NULL) {
status.ok = true;
} else {
if (status.fmt == GL_RGBA16) {
// Driver does not support 16 bit FBO so let it choose the
// format. It will probably end up choosing 8 bit but
// inaccurate colors are better than completely broken rendering.
// See https://github.com/kovidgoyal/kitty/issues/9068
status.fmt = GL_RGBA;
free_framebuffer(framebuffer_id);
free_texture(texture_id);
setup_texture_as_render_target(width, height, texture_id, framebuffer_id);
log_error("WARNING: Your GPU driver does not support 16bit textures as framebuffer targets, some colors may be slightly inaccurate.");
} else {
fatal("Your GPU driver does not support indirect rendering to a GL_RGBA texture via a framebuffer");
}
}
}
}
static void
set_cell_uniforms(bool force) {
static bool constants_set = false;
if (!constants_set || force) {
float text_contrast = 1.0f + OPT(text_contrast) * 0.01f;
float text_gamma_adjustment = OPT(text_gamma_adjustment) < 0.01f ? 1.0f : 1.0f / OPT(text_gamma_adjustment);
for (int i = GRAPHICS_PROGRAM; i <= GRAPHICS_ALPHA_MASK_PROGRAM; i++) {
bind_program(i);
glUniform1i(program_uniform_location(i, "image"), GRAPHICS_UNIT);
}
for (int i = CELL_PROGRAM; i < CELL_PROGRAM_SENTINEL; i++) {View on GitHub (pinned to 6d5d0c4406)
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
Example fix
# kitty.conf - before background_blur 20 # after background_blur 0
Defensive patterns
Strategy: fallback
Validate before calling
glxinfo | grep -i 'framebuffer' # sanity-check FBO support
Prevention
- Update GPU drivers
- Avoid heavy offscreen effects (blur) on known-buggy drivers
- Report driver details to kitty upstream
When it happens
Trigger: setup_texture_as_render_target gets an incomplete framebuffer for the 16-bit format during offscreen rendering (blur/effects, screenshots, startup rendering).
Common situations: Buggy GPU drivers (kitty issue #9068), notably some ANGLE/D3D or older mobile GL stacks.
Related errors
- [glfw error %d]: %s
- WARNING: Your system's OpenGL implementation does not have g
- This must be run as kitten ask
- This should be run as kitten broadcast
- This must be run as kitten choose-files
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/20425cb4bb83c42c.
Report an issue: GitHub.