mirror of
https://github.com/lingble/meta-tegra.git
synced 2025-11-01 12:57:53 +00:00
egl-gbm: fix for kms display-only rendering
The tegra-drm + nvidia-drm setup on r36 is tenuous with respect to egl-gbm (and particularly calls to eglGetPlatformDisplayEXT with EGL_PLATFORM_GBM_KHR). It was only working somewhat by chance due to the order that devices are probed and then made available to readdir(). This change adds a patch to egl-gbm to provide a fallback in the case where eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_KHR) might have otherwise failed for no good reason, thus eliminating the need for workarounds to enforce ordering of the modules loading. Signed-off-by: Kurt Kiefer <kekiefer@gmail.com>
This commit is contained in:
committed by
Matt Madison
parent
63ef5b0faf
commit
bbc0362ea3
@@ -0,0 +1,41 @@
|
|||||||
|
From f28f8e7e7013ed151ab69ae6b0f4b52ef617dc89 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kurt Kiefer <kekiefer@gmail.com>
|
||||||
|
Date: Thu, 29 Aug 2024 15:15:33 -0700
|
||||||
|
Subject: [PATCH] gbm-display: handle kms display-only devices in FindGbmDevice
|
||||||
|
|
||||||
|
A display device can be different than its renderer, such as the
|
||||||
|
case of a kms display-only device. Yet, eglGbmGetPlatformDisplay
|
||||||
|
needs to initialize its internal GbmDisplay structure and if they
|
||||||
|
aren't strongly associated (as determined by eglQueryDevices) then
|
||||||
|
display initialization will fail.
|
||||||
|
|
||||||
|
Handle this by providing a fallback to use the first renderer
|
||||||
|
returned by eglQueryDevices in the case where the display device
|
||||||
|
in question can't render on its own or isn't being returned by
|
||||||
|
the egl implementation for any other reason.
|
||||||
|
|
||||||
|
Upstream-status: pending
|
||||||
|
|
||||||
|
Signed-off-by: Kurt Kiefer <kekiefer@gmail.com>
|
||||||
|
---
|
||||||
|
src/gbm-display.c | 7 +++++++
|
||||||
|
1 file changed, 7 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/gbm-display.c b/src/gbm-display.c
|
||||||
|
index 93bceb4..3144017 100644
|
||||||
|
--- a/src/gbm-display.c
|
||||||
|
+++ b/src/gbm-display.c
|
||||||
|
@@ -119,6 +119,13 @@ FindGbmDevice(GbmPlatformData* data, struct gbm_device* gbm)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // If we didn't find a device, don't panic. This can happen if the gbm
|
||||||
|
+ // display device isn't a renderer: a kms display-only device, or a split
|
||||||
|
+ // host1x + drm/kms display such as t234 machines in r36. Use the first
|
||||||
|
+ // found renderer for these.
|
||||||
|
+ if (numDevs > 0)
|
||||||
|
+ dev = devs[0];
|
||||||
|
+
|
||||||
|
done:
|
||||||
|
free(devs);
|
||||||
|
|
||||||
@@ -6,14 +6,13 @@ DEPENDS = "eglexternalplatform libdrm virtual/libgbm"
|
|||||||
|
|
||||||
SRC_REPO = "github.com/NVIDIA/egl-gbm.git;protocol=https"
|
SRC_REPO = "github.com/NVIDIA/egl-gbm.git;protocol=https"
|
||||||
SRCBRANCH = "main"
|
SRCBRANCH = "main"
|
||||||
SRC_URI = "git://${SRC_REPO};branch=${SRCBRANCH}"
|
SRC_URI = "git://${SRC_REPO};branch=${SRCBRANCH} \
|
||||||
|
file://nvidia_gbm.json \
|
||||||
|
file://0001-gbm-display-handle-kms-display-only-devices-in-FindG.patch \
|
||||||
|
"
|
||||||
# 1.1.0 tag
|
# 1.1.0 tag
|
||||||
SRCREV = "39932b2cc4f44cdadd553cc931f3bebd4e348d10"
|
SRCREV = "39932b2cc4f44cdadd553cc931f3bebd4e348d10"
|
||||||
|
|
||||||
SRC_URI += "\
|
|
||||||
file://nvidia_gbm.json \
|
|
||||||
"
|
|
||||||
|
|
||||||
REQUIRED_DISTRO_FEATURES = "opengl"
|
REQUIRED_DISTRO_FEATURES = "opengl"
|
||||||
|
|
||||||
S = "${WORKDIR}/git"
|
S = "${WORKDIR}/git"
|
||||||
|
|||||||
Reference in New Issue
Block a user