This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM5728:EGLImage 内存泄漏

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/638328/linux-am5728-eglimage-memory-leak

器件型号:AM5728

工具/软件:Linux

我使用 EGLImage 将 RGBA 纹理读入 GPU、我使用的 PSDK 版本为04.00.00.04、我还尝试了 DDK-um [cf8cd62](um:gles2:在1RGB FBO 完整性检查中修复 PVR_DBG 级别)

当我的应用程序执行以下代码时,它成功运行~1分钟,如果我开始收到重复的控制台消息:

如果使用 CMEM:
eglCreateImageKHR(...) 返回错误0x300C
PVR:(错误):[ 1165->1178]< CreateBuffer():866|error>不能 mmap 缓冲区:不能分配备忘录
Ry [0、]
PVR:(错误):[ 1165->1178]< CreateDrawable():938|错误映射0缓冲区[0、]

如果使用 OMAP:
omapdrm omapdrm.0:无法重映射:-12 (3)
PVR_K:(错误):DmaBufImportAndAcquiredPhysAddr:dma_Buf_map_attachment failed:-885075008
eglCreateImageKHR(...) 返回错误0x300C

以下是我的代码(使用 cmem):  

对于(;)
{
//-->分配 CMEM
CMEM_AllocParams cmemParams ={0、};
cmemParams->type = CMEM_HEAP;
cmemParams->flags = CMEM_cached;
cmemParams->alignment=0;
void* cmem_buf = CMEM_LOCAT2 (2,宽度*高度* 4,(CMEM_AllocParams*)&cmemParams);
//--> GBM 导入
struct GBM_import_FD_DATA GbmImportData;
GbmImportData.fd = CMEM_export_dabuf ( cmem_buf );
GbmImportData.width =宽度;
GbmImportData.Height =高度;
GbmImportData.STRIDE =宽度* 4;
GbmImportData.format = GBM_BO_FORMAT_ARGB8888;
struct GBM_bo* lpGbmBo = GBM_BO_IMPORT (GbmDev、GBM_BO_IMPORT_FD、&GbmImportData、
GBM_BO_USE_Rendering | GBM_BO_USE_SCANOUT );
//-->创建 EGLImage,纹理
EGLImageKHR EglImage = eglCreateImageKHR (EGLDisplay、EGL_NO_Context、EGL_NATE_PIXMAP_KHR、
static_cast (lpGbmBo), NULL );
GLUINT TB;
格网格纹理(1,&TB);
glBindTexture (GL_纹 理_EXTERNAL_OES、TB);
glEGLImageTargetTexture2DOES (GL_Texture_external_OES、EglImage);

//<--销毁 EGLImage、纹理
GlDeleteTextures (1,&TB);
eglDestroyImageKHR( EGLDisplay, EglImage );

//<--销毁 GBM 对象
GBM_BO_Destroy ( lpGbmBO );
//<--销毁 CMEM buf
close( GbmImportData.fd );
CMEM_FREE (cmem_buf,(CMEM_AllocParams*)&cmemParams);
}

没有 eglCreateImageKHR(),GBM-OMAP alloc/dealloc 就没有问题

2.我使用 EGL_Linux_DMA_BUF (YUYV)进行了测试、但没有内存泄漏

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否分享我们最终可以运行并重现问题的独立测试应用程序?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。

    我在这里按照您的请求附上了源文件。

    它来自 kmscube (git://git.ti.com/glsdk/kmscube.git)、您可以使用它轻松构建(只需添加-lticmem 标志)

    e2e.ti.com/.../kmscube.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我无法运行独立应用程序。 我收到以下错误-

    argb8888
    使用 EGL 版本1.4的显示屏0x1
    EGL 版本"1.4 build 1.14@3699939 (main)"
    EGL 供应商"Imagination Technologies"
    EGL 扩展"EGL_IMG_CLIENT_API_OGL EGL_KHR_IMAGE EGL_KHR_IMA_BASE EGL_KHR_IMA_Titecting_2D_image EGL_KHR_gL_torite_ge_pubemap_image EGL_KHR_Render_dmK buffer_image EGL_KHR_vg_parent_g_g_g_gmK EGL_14372_不存在错误:c143710gl 块
    GE EGL_IMG_CL_IMAGE EGL_KHR_FACE_SYNC EGL_IMG_CONTEXT 优先级[1051436.182530] CMEMK 错误:GET_PHYS:无法找到0x0的 PHY 地址
    EGL_IMG_HIBERNATE_PROCESS EGL_IMG_IMAGE_PHICA_ATTRIBS EGL_KHR_SU[1051436.194575] CMEMK 错误:GET_PHYS:GET_USER_PAGES ()失败:-14
    rfacelesse_context EGL_KHR_WAIT_SYNC EGL_KHR_CREATE _Context EGL_W[1051436.206380] CMEMK 错误:GETPHYS:无法将虚拟(空)转换为物理。
    L_bind_wayland_display EGL_EXT_IMAGE_DMA_buf_import"
    CMEM 错误:分配堆:ioctl CMEM_IOCALLOCHEPCACHED 失败:-1
    CMEM 错误:export_dmabuf:无法导出到 dmabuf 0
    PVR:(错误):[ 5204->5204]< GBM_PVR_BO_CREASE_COMMON ():262|ERROR>分配 DBM 缓冲区失败:不允许操作[0、]
    PVR:(错误):[ 5204->5204]< WSEGL_CreatePixmapDrawable():1006|error>条件[ hNativePixmap!= NULL ]失败[0、]
    EGL 错误0x300C
    GL 错误0x0502
    EGL 错误0x300C
    分段故障(转储内核)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可能需要修改 dtsi 文件以分配 cmem 缓冲区。
    我使用 OMAP-DRM 缓冲区而不是 cmem 来重新连接源文件。

    kmscube.c
    omap_drmif.h
    - am57xx-evm-cmem.dtsi (arch/arm/boot/dts/am57xx-evm-cmem.dtsi)

    e2e.ti.com/.../kmscube.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对此有任何输入吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Aupers、

    我能够重复这个问题。 我们仍在调查泄漏。 它们是在 EGL 中发现的一种潜在泄漏、但尚未解决您的样品测试应用中的问题。 本周星期四和星期五是美国的假日。 因此、请期待下周对所取得的进展作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Aupers、

    我已与本地 FAE 共享 SGX UM 二进制文件、并修复了内存泄漏问题。 他会把它传递给你。 请告诉我它是否可以解决您的问题

    我们将在即将推出的 Processor SDK 4.2版本中正式获得该修复程序。

    此致、
    Manisha