[i.MX] 请教i.MX6Q的GPU问题

[复制链接]
5638|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, 下载次数: 4)


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

  26. backtrace:
  27.     #00  pc 0007d60a  /system/lib/libGAL.so
  28.     #01  pc 0007eccf  /system/lib/libGAL.so
  29.     #02  pc 0007f5ab  /system/lib/libGAL.so
  30.     #03  pc 00079a27  /system/lib/libGAL.so (gcOptimizeShader+94)
  31.     #04  pc 0007587d  /system/lib/libGAL.so (gcLinkShaders+84)
  32.     #05  pc 0000b9cd  /system/lib/egl/libGLESv2_VIVANTE.so
  33.     #06  pc 0001712b  /system/lib/egl/libGLESv2_VIVANTE.so (glLinkProgram+346)
  34.     #07  pc 00006ecb  /data/app-lib/com.ljgabc.clearview-2/libclearview.so (OpenGLClearView::CreateProgram(unsigned int&)+98)
  35.     #08  pc 00007291  /data/app-lib/com.ljgabc.clearview-2/libclearview.so (OpenGLClearView::Create()+88)
  36.     #09  pc 00006a03  /data/app-lib/com.ljgabc.clearview-2/libclearview.so (Java_com_ljgabc_clearview_JNIInterface_setup+42)
  37.     #10  pc 0001dc4c  /system/lib/libdvm.so (dvmPlatformInvoke+112)
  38.     #11  pc 0004decf  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
  39.     #12  pc 000386c9  /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+8)
  40.     #13  pc 0004f8bd  /system/lib/libdvm.so (dvmResolveNativeMethod(unsigned int const*, JValue*, Method const*, Thread*)+184)
  41.     #14  pc 00027060  /system/lib/libdvm.so
  42.     #15  pc 0002b5ec  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
  43.     #16  pc 0005ff21  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+292)
  44.     #17  pc 0005ff4b  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
  45.     #18  pc 00054ccb  /system/lib/libdvm.so
  46.     #19  pc 0000ca78  /system/lib/libc.so (__thread_entry+72)
  47.     #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出问题的嫌疑最大。

 楼主| xghit 发表于 2014-12-22 08:52 | 显示全部楼层
周一,顶一下
lqland 发表于 2014-12-22 15:14 | 显示全部楼层
楼主,能测试到这份上,也算历害了,只是,如何方便的话,提供测试代码与测试步骤最好。
坛里好些人有原厂的板子,我也有一块。
FSL_TICS_Rita 发表于 2014-12-22 17:56 | 显示全部楼层
楼主你好,很抱歉现在才上论坛,我帮你看一下哈,明天给你回复~~
mini1986 发表于 2015-4-20 14:39 | 显示全部楼层
关注一下......
阿基米东 发表于 2017-4-10 18:30 | 显示全部楼层
结果怎么样呢?
 楼主| xghit 发表于 2017-4-27 18:23 | 显示全部楼层

驱动的bug,官方更新驱动后解决了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

30

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部