fix(graphics): add EGL_BAD_MATCH fallback for incompatible format modifiers#5288
Open
muracodex wants to merge 1 commit into
Open
fix(graphics): add EGL_BAD_MATCH fallback for incompatible format modifiers#5288muracodex wants to merge 1 commit into
muracodex wants to merge 1 commit into
Conversation
When capturing from displays that report format modifiers incompatible with the GPU's EGL implementation (e.g. USB/DisplayLink monitors), eglCreateImage() fails with EGL_BAD_MATCH (0x3009). This change retries the DMA-BUF import without the format modifier when the initial attempt fails with EGL_BAD_MATCH, falling back to a linear/modifier-less import that is universally supported. Fixes the 'Couldn't import RGB Image: 00003009' error that causes streaming to show only static/interference on affected displays.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Problem
When capturing from displays that report DMA-BUF format modifiers incompatible with the GPU's EGL implementation (e.g. USB/DisplayLink monitors),
eglCreateImage()fails withEGL_BAD_MATCH(0x3009). This causes the error:The result is that streaming shows only static/interference instead of the actual display content.
Root Cause
The
surface_descriptor_to_egl_attribs()function includes the display's DMA-BUF format modifier when creating the EGL image. Some displays (particularly USB-connected ones) report modifiers that the GPU's EGL implementation cannot handle, causingeglCreateImage()to fail.Fix
In
import_source(), when the initialeglCreateImage()fails withEGL_BAD_MATCH, retry the import without the format modifier (DRM_FORMAT_MOD_INVALID). This uses a linear import that is universally supported by EGL implementations.Code Changes
src/platform/linux/graphics.cpp: Modifiedimport_source()to retry DMA-BUF import without modifiers when the initial attempt fails withEGL_BAD_MATCHTesting
Couldn't import RGB Image: 00003009errors, stream shows static