egl: add WLR_EGL_NO_MODIFIERS

Same as WLR_DRM_NO_MODIFIERS but for EGL. For debugging purposes
mostly.

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3451
This commit is contained in:
Simon Ser 2022-10-19 11:22:14 +02:00
parent ccf4e04036
commit 6d90518c97
2 changed files with 15 additions and 4 deletions

View file

@ -12,6 +12,8 @@ wlroots reads these environment variables
renderers: gles2, pixman, vulkan) renderers: gles2, pixman, vulkan)
* *WLR_RENDER_DRM_DEVICE*: specifies the DRM node to use for * *WLR_RENDER_DRM_DEVICE*: specifies the DRM node to use for
hardware-accelerated renderers. hardware-accelerated renderers.
* *WLR_EGL_NO_MODIFIERS*: set to 1 to disable format modifiers in EGL, this can
be used to understand and work around driver bugs.
## DRM backend ## DRM backend

View file

@ -107,6 +107,11 @@ static void log_modifier(uint64_t modifier, bool external_only) {
} }
static void init_dmabuf_formats(struct wlr_egl *egl) { static void init_dmabuf_formats(struct wlr_egl *egl) {
bool no_modifiers = env_parse_bool("WLR_EGL_NO_MODIFIERS");
if (no_modifiers) {
wlr_log(WLR_INFO, "WLR_EGL_NO_MODIFIERS set, disabling modifiers for EGL");
}
int *formats; int *formats;
int formats_len = get_egl_dmabuf_formats(egl, &formats); int formats_len = get_egl_dmabuf_formats(egl, &formats);
if (formats_len < 0) { if (formats_len < 0) {
@ -121,8 +126,10 @@ static void init_dmabuf_formats(struct wlr_egl *egl) {
uint64_t *modifiers; uint64_t *modifiers;
EGLBoolean *external_only; EGLBoolean *external_only;
int modifiers_len = int modifiers_len = 0;
get_egl_dmabuf_modifiers(egl, fmt, &modifiers, &external_only); if (!no_modifiers) {
modifiers_len = get_egl_dmabuf_modifiers(egl, fmt, &modifiers, &external_only);
}
if (modifiers_len < 0) { if (modifiers_len < 0) {
continue; continue;
} }
@ -174,9 +181,11 @@ static void init_dmabuf_formats(struct wlr_egl *egl) {
free(formats); free(formats);
egl->has_modifiers = has_modifiers; egl->has_modifiers = has_modifiers;
if (!no_modifiers) {
wlr_log(WLR_DEBUG, "EGL DMA-BUF format modifiers %s", wlr_log(WLR_DEBUG, "EGL DMA-BUF format modifiers %s",
has_modifiers ? "supported" : "unsupported"); has_modifiers ? "supported" : "unsupported");
} }
}
static struct wlr_egl *egl_create(void) { static struct wlr_egl *egl_create(void) {
const char *client_exts_str = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); const char *client_exts_str = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);