首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nexus10/安卓4.2.2 (Samsung Exynos5 w/ Mali T604)上的glTexSubImage2D性能缓慢

Nexus10/安卓4.2.2 (Samsung Exynos5 w/ Mali T604)上的glTexSubImage2D性能缓慢
EN

Stack Overflow用户
提问于 2013-03-23 06:07:35
回答 3查看 3.6K关注 0票数 6

我有一个安卓应用程序,解码成yuv420p格式的视频,然后使用OpenGLES渲染视频帧。我使用glTexSubImage2D()将y/u/v缓冲区上传到图形处理器,然后使用着色器进行YUV2RGB转换。所有EGL/OpenGL设置/渲染代码都是本机代码。

现在我不是说我的代码没有问题,但考虑到同样的代码在iOS (iPad/iPhone),Nexus7,Kindle HD8.9,Samsung Note 1和其他一些运行安卓4.0/4.1/4.2的廉价中国平板电脑(A31/RockChip 3188)上运行得很好。我会说,我的代码出错的可能性较小。在这些设备上,glTexSubImage2D()上传SD或720P HD纹理所用的时间不到16ms。

然而,在Nexus10上,对于标清或720P高清纹理,glTexSubImage2D()大约需要50~90ms,这对于30fps或60fps的视频来说太慢了。

我想知道

1)如果我应该选择不同的纹理格式(RGBA或BGRA)。有没有办法检测GPU使用的最好的纹理格式?

2)如果有一个功能在所有其他SOC上都是'OFF‘,但在Exynos 5上设置为' on’。例如,自动MIPMAP生成选项。(顺便说一句,我把它关掉了)

3)如果这是Samsung Exynos SOC的已知问题-我找不到Exynos CPU的支持论坛

4)配置EGL表面时有什么需要设置的选项吗?例如,透明度、表面格式等?(我不知道我在说什么)

5)这可能意味着图形处理器正在进行隐式格式转换,但我检查了GL_LUMINANCE总是在使用。同样,它可以在所有其他平台上工作。

6)还有别的吗?

我的EGL配置:

代码语言:javascript
复制
const EGLint attribs[] = {
    EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
    EGL_BLUE_SIZE, 8,
    EGL_GREEN_SIZE, 8,
    EGL_RED_SIZE, 8,
    EGL_NONE
};

初始设置:

代码语言:javascript
复制
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, ctx->frameW, ctx->frameH, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); /* also for U/V  */

后续部分替换:

代码语言:javascript
复制
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ctx->frameW, ctx->frameH, GL_LUMINANCE, GL_UNSIGNED_BYTE, yBuffer); /*also for U/V */

我正在尝试以~30FPS或~60FPS的标清或720P高清分辨率渲染视频。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-23 08:13:28

这是我们已向ARM报告的已知驱动程序问题。将来的更新应该会修复它。

票数 6
EN

Stack Overflow用户

发布于 2013-03-23 08:31:17

编辑状态更新

我们现在已经成功地在公共固件上重现了一个路径的缓慢上传条件,你可能会碰到这个问题,这个问题将在下一个驱动程序版本中得到修复。

如果对要上载到其中的纹理使用双缓冲区纹理ID (例如,frame N= ID X、N+1 = ID Y、N+2 = ID X、N+3 =ID Y等),则有助于避免在当前固件中出现这种情况。

谢谢,Iso

票数 1
EN

Stack Overflow用户

发布于 2013-08-05 15:46:34

我可以确认这个问题已经在Android 4.3中解决了--我看到RGBA格式的性能比Android 4.2.2提高了2-3倍,其他纹理格式的性能提高了10-50倍。这些结果适用于glTexImage2D和glTexSubImage2D。(还不能添加评论,所以我不得不把它放在这里)

编辑:如果你坚持使用4.2.2,你可以尝试使用RGBA纹理,它应该有更好的性能(3-10倍左右,具有更大的2次方纹理尺寸)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15580619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档