工具/软件: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)进行了测试、但没有内存泄漏