2410044_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2410044_zh-CN

2410044_zh-CN

i.MX8MP - 使用 Qt OpenGL / 大型 EGL 渲染目标时,Vivante 6.4.11.p4.x 导致 Weston 崩溃

您好,NXP技术支持,

我们正在调查 i.MX8MP 平台上的一个可重现的图形问题。

工作配置

  • 约克托·斯卡斯盖普
  • 内核版本:6.6.52
  • Vivante 堆栈:6.4.11.p2.x
  • Weston 14.0.2.imx
  • Qt 6.8.3

结果:

  • Qt Quick 工作
  • QOpenGLWindow 工作正常
  • 没有崩溃。

配置失败

  • 约克托·沃诺斯
  • 内核版本:6.18.20
  • Vivante 堆栈:6.4.11.p4.4 和 6.4.11.p4.6
  • Weston 14.0.2.imx
  • Qt 6.8.3 和 6.8.4

结果:

  • QQuickWindow崩溃
  • QOpenGLWindow崩溃
  • 韦斯顿发生 SIGSEGV 故障
  • 我们还观察到了内存损坏的症状:
malloc(): unaligned tcache chunk detected

图形故障后,偶尔还会出现无关进程的崩溃。


Qt 可能不是根本原因

最初,这个问题看起来像是 Qt Quick 的问题。

但是,我们将测试用例简化到了最小:

QOpenGLWindow
 

不使用 QML、场景图、QRhi、纹理或自定义渲染。

故障依然发生。


原生 EGL 测试

一个简单的原生 Wayland/EGL/GLES3 应用程序运行稳定:

wl_egl_window
eglCreateContext
glClear
eglSwapBuffers
 
即使调整到最大尺寸:
 
1920x1080
 

持续了几个小时。


其他原生 EGL 测试

我们使用以下方法创建了一个原生 Wayland/EGL/GLES3 测试:

  • 纹理分配
  • FBO创建
  • 渲染到纹理
  • glFramebufferTexture2D()
  • glBlitFramebuffer()
  • eglSwapBuffers()

以下尺寸通过了验证:

500x500
640x480
800x480
900x540
1024x600
 
当渲染目标较大时,例如:就会出现这个问题。
 
1280x720
1280x800
 

韦斯顿行为

启动 OpenGL 应用程序后,Weston 崩溃了:

weston.service: Main process exited
status=11/SEGV
 
然后,Qt应用程序会报告:
 
The Wayland connection broke.
Did the Wayland compositor die?
 

这表明韦斯顿首先撞车。


Vivante 用户空间差异

以下库在正常运行的系统中与出现故障的系统中有所不同:

libGAL.so
libEGL.so
libGLESv2.so
 
两种方法均可重现此问题:
 
6.4.11.p4.4
6.4.11.p4.6
 

而年长的:

6.4.11.p2.x
 

适用于 6.6 内核。


问题

  1. Vivante 6.4.11.p4.x 版本是否存在与以下方面相关的已知问题:

    • Weston
    • 韦兰-EGL
    • FBO
    • glBlitFramebuffer()
    • 大型渲染目标
  2. p2.x 和 p4.x 之间是否存在已知的回归关系?

  3. 是否有推荐的调试选项?

    • 银河核
    • libGAL
    • libgbm_viv
    • Weston 缓冲区导入路径

任何指导都将不胜感激。

我附上了一个简单的测试应用程序,它可以在内核 6.18.20 和 Vivante 堆栈 6.4.11.p4.4 和 6.4.11.p4.6 上重现崩溃问题。

Re: i.MX8MP - Weston crash with Vivante 6.4.11.p4.x when using Qt OpenGL / large EGL render targets

我进行了进一步调查。

内核 6.6.52 与 Vivante p6.4.11.p4.4 -> 运行正常

内核 6.18.20 与 Vivante p6.4.11.p4.4 -> 崩溃

研究结果显然已经恶化:

直接将图像尺寸从 500x500 调整到 1024x600 就足以导致崩溃。
崩溃发生在 OpenGL 路径中,紧接着交换链大小的变化。
与此同时,systemd-journal 再次发生 SEGV 错误。
这强烈表明 GL/Wayland/Vivante 堆栈中存在内存损坏,而不仅仅是应用程序错误。

该假设的现状

关键的不仅仅是 1280x720 分辨率。
相反,决定性因素是直接跳转到“重新配置”并接着跳转到“呈现”。
顺序的、较小的尺寸调整比直接跳跃要稳健得多。
软件后端保持稳定,证实问题出在硬件-GL路径上。

Re: i.MX8MP - Weston crash with Vivante 6.4.11.p4.x when using Qt OpenGL / large EGL render targets

你好,

与其说是 Qt 问题,不如说是 Vivante/galcore 或缓冲区管理问题,尤其是原生 EGL 测试也会触发该问题,而且 Weston 是第一个崩溃的进程。它从较大的渲染目标开始,并且只在 p4.x 堆栈中发生,这一点尤其有趣。我会比较 p2 和 p4 GAL/GBM 的变化,并启用 galcore/Weston 调试缓冲区分配和导入功能。

タグ(1)
評価なし
バージョン履歴
最終更新日:
水曜日
更新者: