kovidgoyal/kitty · warning

WARNING: Your system's OpenGL implementation does not have g

Error message

WARNING: Your system's OpenGL implementation does not have glCopyImageSubData, falling back to a slower implementation

What it means

The OpenGL implementation lacks ARB_copy_image (glCopyImageSubData), so kitty falls back to a slow CPU roundtrip copy when growing sprite (glyph) textures. Warned once per process; rendering is correct, only performance suffers.

Source

Thrown at kitty/shaders.c:162

static void
copy_32bit_texture(GLuint old_texture, GLuint new_texture, GLenum texture_type) {
    // requires new texture to be at least as big as old texture. Assumes textures are 32bits per pixel
    GLint width, height, layers;
    glBindTexture(texture_type, old_texture);
    glGetTexLevelParameteriv(texture_type, 0, GL_TEXTURE_WIDTH, &width);
    glGetTexLevelParameteriv(texture_type, 0, GL_TEXTURE_HEIGHT, &height);
    glGetTexLevelParameteriv(texture_type, 0, GL_TEXTURE_DEPTH, &layers);
    if (GLAD_GL_ARB_copy_image) {
        glCopyImageSubData(old_texture, texture_type, 0, 0, 0, 0, new_texture, texture_type, 0, 0, 0, 0, width, height, layers);
        return;
    }

    static bool copy_image_warned = false;
    // ARB_copy_image not available, do a slow roundtrip copy
    if (!copy_image_warned) {
        copy_image_warned = true;
        log_error("WARNING: Your system's OpenGL implementation does not have glCopyImageSubData, falling back to a slower implementation");
    }

    GLint internal_format;
    glGetTexLevelParameteriv(texture_type, 0, GL_TEXTURE_INTERNAL_FORMAT, &internal_format);
    GLenum format, type;
    switch (internal_format) {
        case GL_R8UI:
        case GL_R8I:
        case GL_R16UI:
        case GL_R16I:
        case GL_R32UI:
        case GL_R32I:
        case GL_RG8UI:
        case GL_RG8I:
        case GL_RG16UI:
        case GL_RG16I:
        case GL_RG32UI:
        case GL_RG32I:

View on GitHub (pinned to 6d5d0c4406)

Solutions

  1. Safe to ignore - performance warning only
  2. Update GPU drivers / Mesa to a version with ARB_copy_image
  3. Verify with: glxinfo | grep ARB_copy_image; prefer real hardware GL
  4. Enable 3D acceleration in VMs
Defensive patterns

Strategy: fallback

Validate before calling

glxinfo | grep GL_ARB_copy_image  # verify driver capability

Prevention

When it happens

Trigger: copy_32bit_texture during sprite texture reallocation on GL stacks without GL_ARB_copy_image - old Mesa drivers, software rasterizers (llvmpipe), some VM GPUs.

Common situations: Running kitty in a VM, over remote GLX, with llvmpipe/swrast, or on older embedded drivers.

Related errors


AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27). Data as JSON: /api/errors/8157e135177bd5bc. Report an issue: GitHub.