- Hardware: NVIDIA Jetson (tested on Orin / Tegra234)
- OS: Linux (L4T-based distribution)
- GPU Driver: NVIDIA proprietary Jetson driver (GBM backend)
- Window system: Wayland (GBM / KMS)
- EGL: NVIDIA EGL
- OpenGL ES: 3.1 (also reproducible with ES 2.0)
- GBM: libgbm
Summary
On NVIDIA Jetson, an EGLImageKHR created from a GBM buffer via EGL_LINUX_DMA_BUF_EXT cannot be used as a renderable OpenGL ES framebuffer attachment.
Although:
-
GBM buffer allocation succeeds
-
dmabuf FD export succeeds
-
eglCreateImageKHR()succeeds -
glEGLImageTargetTexture2DOES()succeeds
attaching the resulting texture to an FBO using glFramebufferTexture2D() fails with:
GL_INVALID_OPERATION
GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
This makes it impossible to implement GBM-based Wayland compositors (e.g. KWin) on Jetson, as rendering directly into dmabuf-backed buffers is required.
Expected Behavior
A GBM buffer exported as a dmabuf and imported via eglCreateImageKHR() should be usable as:
-
a
GL_TEXTURE_2D, and -
a valid color attachment of an OpenGL ES framebuffer
This is the behavior on Mesa drivers (Intel, AMD) and is required for modern Wayland compositors using GBM.
Actual Behavior
-
eglCreateImageKHR()returns a validEGLImageKHR -
glEGLImageTargetTexture2DOES()succeeds -
glFramebufferTexture2D()fails withGL_INVALID_OPERATION -
glCheckFramebufferStatus()returnsGL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
This happens for:
-
XR24(XRGB8888) -
AR24/AB24(ARGB8888) -
implicit modifiers
-
linear and non-linear GBM buffers
Minimal Reproducer
The following standalone program reproduces the issue without any compositor or Wayland code.
Build
egl_gbm_fbo_fail.c.gz (1.2 KB)
gcc egl_gbm_fbo_fail.c -o egl_gbm_fbo_fail \
-lgbm -lEGL -lGLESv2
Run
./egl_gbm_fbo_fail
Output on Jetson
FBO status: 0x8cd6
0x8cd6 = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
Impact
This prevents:
-
GBM-based Wayland compositors (KWin, Weston GBM backend)
-
Direct rendering into scanout-capable dmabuf buffers
-
Zero-copy rendering pipelines
As a result, modern Wayland compositors cannot function correctly on Jetson without EGLStreams-specific code paths.