打印
[i.MX]

请教i.MX6Q的GPU问题

[复制链接]
5170|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xghit|  楼主 | 2014-12-20 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
板子是基于SabreSD做的,使用i.MX6Q处理器,系统使用的是官方发布的Android JB4.3_1.1.0(后升级到1.1.1).

在i.MX6Q的GPU中用GLSL语言实现了一些程序(图像变换等),当代码量稍微一多(不到200行),运行程序就会报错,主要现象是此时调用opengl es 2.0的API时,返回glError(0x501, 网上查到代表非法数据)。后来升级到Android JB4.3_1.1.1后,解决了部分问题(有部分原来通不过的代码现在可以了),但程序稍微大一些,仍然不行。

一开始怀疑是GPU程序的代码行数有限制,后来发现,有的程序虽然代码行数较多,但可以运行,代码少的反而不行。有时多载入一个纹理,即使不使用也不行。有时函数定义没问题,可以放在那,不调用就行,一调用就运行不了。

所有这些运行不了的程序,放在周围同事的Android手机上(各种各样的CPU,其中有一款华为的K3V2,使用的是GC4000, 而iMX6使用的GC2000)都可以正常运行。

  • 想知道各位有没有遇到过类似的问题,怎么解决?
  • 飞思卡尔官方有没有类似的问题或资源可以共享?
  • GPU编程有什么限制?
  • JB4.3_1.1.1想对于1.1.0有哪些更新,从而解决了部分问题?

相关下载

相关帖子

沙发
xghit|  楼主 | 2014-12-20 13:06 | 只看该作者
补充一下,运行有问题程序时,偶尔还会现程序崩溃(正常就是GPU渲染不出来,显示黑屏),android dump的tombstone文件如下:

tombstone_09.tar (100 KB)


Build fingerprint: 'Freescale/sabresd_6dq/sabresd_6dq:4.3/1.1.1-rc2/20141017:eng/dev-keys'
Revision: '405522'
pid: 6118, tid: 6131, name: Thread-201  >>> com.ljgabc.clearview <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000014
    r0 0000000d  r1 00000000  r2 647dc490  r3 647e59f0
    r4 647dc4e0  r5 647892c8  r6 647e48c0  r7 00000000
    r8 64798d00  r9 00000000  sl 00000000  fp 00000007
    ip 00000006  sp 698029e0  lr 644828e9  pc 6448360a  cpsr 800f0030
    d0  0000000000000000  d1  0000000000000000
    d2  0000000000000000  d3  0000000000000000
    d4  000000003f800000  d5  3f80000000000000
    d6  0000000400000000  d7  4013333333333333
    d8  0000000000000000  d9  0000000000000000
    d10 0000000000000000  d11 0000000000000000
    d12 0000000000000000  d13 0000000000000000
    d14 0000000000000000  d15 0000000000000000
    d16 00000000005f79e8  d17 0000000000004008
    d18 4010000000000000  d19 4241c37937e08000
    d20 3fc554e7eb0eb47c  d21 bf66c0c55ca9076a
    d22 bfb1be5a93a83e1d  d23 3f50000000000000
    d24 3f62cda65e663694  d25 bf62cda764a98eab
    d26 bfbaf8e8210a415c  d27 4000000000000000
    d28 40008df2d49d41f1  d29 3fb0f4a31edab38b
    d30 3ff0000000000000  d31 3f4de16b9c24a98f
    scr 80000010

backtrace:
    #00  pc 0007d60a  /system/lib/libGAL.so
    #01  pc 0007eccf  /system/lib/libGAL.so
    #02  pc 0007f5ab  /system/lib/libGAL.so
    #03  pc 00079a27  /system/lib/libGAL.so (gcOptimizeShader+94)
    #04  pc 0007587d  /system/lib/libGAL.so (gcLinkShaders+84)
    #05  pc 0000b9cd  /system/lib/egl/libGLESv2_VIVANTE.so
    #06  pc 0001712b  /system/lib/egl/libGLESv2_VIVANTE.so (glLinkProgram+346)
    #07  pc 00006ecb  /data/app-lib/com.ljgabc.clearview-2/libclearview.so (OpenGLClearView::CreateProgram(unsigned int&)+98)
    #08  pc 00007291  /data/app-lib/com.ljgabc.clearview-2/libclearview.so (OpenGLClearView::Create()+88)
    #09  pc 00006a03  /data/app-lib/com.ljgabc.clearview-2/libclearview.so (Java_com_ljgabc_clearview_JNIInterface_setup+42)
    #10  pc 0001dc4c  /system/lib/libdvm.so (dvmPlatformInvoke+112)
    #11  pc 0004decf  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
    #12  pc 000386c9  /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+8)
    #13  pc 0004f8bd  /system/lib/libdvm.so (dvmResolveNativeMethod(unsigned int const*, JValue*, Method const*, Thread*)+184)
    #14  pc 00027060  /system/lib/libdvm.so
    #15  pc 0002b5ec  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
    #16  pc 0005ff21  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+292)
    #17  pc 0005ff4b  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
    #18  pc 00054ccb  /system/lib/libdvm.so
    #19  pc 0000ca78  /system/lib/libc.so (__thread_entry+72)
    #20  pc 0000cbf4  /system/lib/libc.so (pthread_create+208)


通过backtrace查看到代码实在libGAL.so里面挂掉的,
#03 pc 00079a27 /system/lib/libGAL.so (gcOptimizeShader+94)
libGAL里面对shader代码进行优化(gcOptimizeShader),然后不知道调用的什么,就崩溃了。



使用特权

评论回复
板凳
waterblood| | 2014-12-20 17:22 | 只看该作者
你有测试代码么?发一份我们试试

使用特权

评论回复
地板
xghit|  楼主 | 2014-12-21 15:39 | 只看该作者
继续补充.

怀疑有两点:
  • i.MX6的GPU对Shader代码的行数有要求
  • libGAL里面对Shader代码优化的部分有bug(这个怀疑程度最大)

理由如下:

        试验了一份稍长的Shader代码,这份代码在板子上,有时能够运行起来,有时候不行(比较随机)。运行不起来时,报错是glCreateProgram时,报Shader中找不到main函数,而代码中明明是有main函数的,将源码字符串打印出来,也能够看到main函数。
        另一个试验是,将Shader中main函数提到最前面,其他函数在最后面。这样也是有时候能运行,有时候不行。但运行不起来时,不报任何错误。

        所以,怀疑要不是对代码行数有要求,砍去了部分代码;要不然就是libGAL优化时将部分代码优化掉了。

       而如果是代码行数有要求,应该不会出现有时正常,有时不正常的现象。所以,LIBGAL出问题的嫌疑最大。

使用特权

评论回复
5
xghit|  楼主 | 2014-12-22 08:52 | 只看该作者
周一,顶一下

使用特权

评论回复
6
lqland| | 2014-12-22 15:14 | 只看该作者
楼主,能测试到这份上,也算历害了,只是,如何方便的话,提供测试代码与测试步骤最好。
坛里好些人有原厂的板子,我也有一块。

使用特权

评论回复
7
FSL_TICS_Rita| | 2014-12-22 17:56 | 只看该作者
楼主你好,很抱歉现在才上论坛,我帮你看一下哈,明天给你回复~~

使用特权

评论回复
8
mini1986| | 2015-4-20 14:39 | 只看该作者
关注一下......

使用特权

评论回复
9
阿基米东| | 2017-4-10 18:30 | 只看该作者
结果怎么样呢?

使用特权

评论回复
10
xghit|  楼主 | 2017-4-27 18:23 | 只看该作者

驱动的bug,官方更新驱动后解决了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

30

帖子

3

粉丝