Adreno GPU - 片段着色器:函数中的texture2D会导致glLinkProgram崩溃

时间:2012-11-27 09:22:32

标签: opengl-es opengl-es-2.0 glsl samsung-mobile fragment-shader

我们有一个奇怪的问题。 texture2D调用在直接使用时有效,但在具有返回值的函数中使用时则无效。

该设备是三星S3,SPH-L710,Android 4.0.4,Adreno 225。

我们正在使用的代码是Tegra,PowerVR,Mali等。但不是Adrenos。

示例代码:

vec4 myTex2D(sampler2D s, vec2 uv)
{
   return texture2D(s, uv);
}

void ShaderRun()
{
  IShaderNode_SetOutputColor0(myTex2D(s, IShaderNode_GetInputTexcoord0().xy));
}

void main(void)
{
  glFragColor = IShaderNode_GetOutputColor0();
}

这里没什么特别的。 IShaderNode_*函数是基于节点的着色器系统的访问器。这也是我们在函数中调用此函数的原因。

问题是,此代码在Adreno Profiler的着色器分析器中没有显示任何错误,glCompileShader也没有返回任何错误。

但是在使用此着色器时,glLinkProgram发生了崩溃:

11-27 09:10:10.599: I/faktum(24249): Check: Clockspeed: 1512
11-27 09:10:10.599: I/faktum(24249): Check: Manufactor: 0
11-27 09:10:10.599: I/faktum(24249): Check: Sys Code To File: 1512
11-27 09:10:10.599: I/faktum(24249): SV: Save: Calculated CRC: 114273795
11-27 09:10:10.599: I/faktum(24249): SV: Save: Size: 7917
11-27 09:10:10.760: I/DEBUG(24198): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-27 09:10:10.760: I/DEBUG(24198): Build fingerprint: 'samsung/d2spr/d2spr:4.0.4/IMM76D/L710VPALI3:user/release-keys'
11-27 09:10:10.760: I/DEBUG(24198): pid: 24249, tid: 24279 >>> com.vivamedia.cmGGTHD <<<
11-27 09:10:10.760: I/DEBUG(24198): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000018
11-27 09:10:10.760: I/DEBUG(24198): r0 00000000 r1 00000001 r2 00000000 r3 015f39d8
11-27 09:10:10.760: I/DEBUG(24198): r4 015ed4c0 r5 014c6510 r6 60961e50 r7 015f3528
11-27 09:10:10.760: I/DEBUG(24198): r8 0000000a r9 00000000 10 015f3618 fp 60961e54
11-27 09:10:10.760: I/DEBUG(24198): ip 00000004 sp 60961d98 lr 5d148a2b pc 5d14b0a4 cpsr 08000030
11-27 09:10:10.760: I/DEBUG(24198): d0 0084001200000047 d1 0084000000000055
11-27 09:10:10.760: I/DEBUG(24198): d2 0000004700003210 d3 000000550084000e
11-27 09:10:10.760: I/DEBUG(24198): d4 0000321000840012 d5 0000003200000053
11-27 09:10:10.760: I/DEBUG(24198): d6 0000004700000003 d7 0000005500840013
11-27 09:10:10.760: I/DEBUG(24198): d8 0000000000000000 d9 0000000000000000
11-27 09:10:10.760: I/DEBUG(24198): d10 0000000000000000 d11 0000000000000000
11-27 09:10:10.760: I/DEBUG(24198): d12 0000000000000000 d13 0000000000000000
11-27 09:10:10.760: I/DEBUG(24198): d14 0000000000000000 d15 0000000000000000
11-27 09:10:10.760: I/DEBUG(24198): d16 3feffead00000000 d17 3dbebd9ffead0000
11-27 09:10:10.760: I/DEBUG(24198): d18 3fe0000000000000 d19 3fe000000003d7b4
11-27 09:10:10.760: I/DEBUG(24198): d20 3fa55553e1053a42 d21 3f6941845904b7dd
11-27 09:10:10.760: I/DEBUG(24198): d22 3ff0000000000000 d23 3ef99342e0ee5069
11-27 09:10:10.760: I/DEBUG(24198): d24 3ef99342e0ee5069 d25 3fdbeaaaa0000000
11-27 09:10:10.760: I/DEBUG(24198): d26 4068200000000000 d27 3ef99342e0ee5069
11-27 09:10:10.760: I/DEBUG(24198): d28 c00005c02b53cb8a d29 bf66fdec79316df6
11-27 09:10:10.760: I/DEBUG(24198): d30 bc0a42cc192d5632 d31 be23e4f5df600000
11-27 09:10:10.760: I/DEBUG(24198): scr 60000010
11-27 09:10:11.040: I/DEBUG(24198): #00 pc 000690a4 /system/lib/libsc-a2xx.so (_ZN6Symbol7SetILIDEj)
11-27 09:10:11.040: I/DEBUG(24198): #01 pc 00066a26 /system/lib/libsc-a2xx.so (_Z9PatchCodeRSt6vectorIP11ATIFunctionSaIS1_EERKS3_RS_IjSaIjEERS_IiSaIiEESC_SC_S9_iiRSt3mapISsP6SymbolSt4lessISsESaISt4pairIKSsSF_EEERS_I9ConstDeclSaISO_EERS_I8ConstUseSaISS_EE10ShaderTypeb)
11-27 09:10:11.040: I/DEBUG(24198): #02 pc 00067304 /system/lib/libsc-a2xx.so (_ZN10TATILinker17generateFinalCodeERSt6vectorIjSaIjEERKS0_IP11ATIFunctionSaIS5_EEiRS0_IiSaIiEESC_SC_10ShaderTypeS3_S3_RSt3mapISsP6SymbolSt4lessISsESaISt4pairIKSsSG_EEEbSO_SO_RSE_IiSG_SH_IiESaISJ_IKiSG_EEESO_SO_PSN_SG_Pc)
11-27 09:10:11.040: I/DEBUG(24198): #03 pc 00068d8a /system/lib/libsc-a2xx.so (_ZN10TATILinker4linkER7TVectorIP9TCompilerER13LinkerOptions)
11-27 09:10:11.040: I/DEBUG(24198): #04 pc 0008bd02 /system/lib/libsc-a2xx.so (ShLink)
11-27 09:10:11.040: I/DEBUG(24198): #05 pc 0009e7d6 /system/lib/libsc-a2xx.so (_ZN8sclState4linkEPK18sclInputShaderPairRK17sclCompilerParams)
11-27 09:10:11.040: I/DEBUG(24198): #06 pc 0009ecca /system/lib/libsc-a2xx.so (_Z7sclLinkP16sclHandleTypeRecPK18sclInputShaderPairRK17sclCompilerParams)
11-27 09:10:11.040: I/DEBUG(24198): #07 pc 0009d7ce /system/lib/libsc-a2xx.so (__link_shaders)
11-27 09:10:11.040: I/DEBUG(24198): #08 pc 0002dd3a /system/lib/egl/libGLESv2_adreno200.so (qgl2DrvAPI_glLinkProgram)
11-27 09:10:11.040: I/DEBUG(24198): #09 pc 0001cbe6 /system/lib/egl/libGLESv2_adreno200.so (glLinkProgram)
11-27 09:10:11.040: I/DEBUG(24198): code around pc:
11-27 09:10:11.040: I/DEBUG(24198): 5d14b084 4770b280 47706001 28036800 2000bf8c ..pG.`pG.h.(... 
11-27 09:10:11.040: I/DEBUG(24198): 5d14b094 47702001 4770301c 47706b40 47706181 . pG.0pG@kpG.apG
11-27 09:10:11.040: I/DEBUG(24198): 5d14b0a4 47706980 477063c1 47706bc0 0040f890 .ipG.cpG.kpG..@.
11-27 09:10:11.050: I/DEBUG(24198): 5d14b0b4 bf004770 64826441 477064c3 47706441 pG..Ad.d.dpGAdpG
11-27 09:10:11.050: I/DEBUG(24198): 5d14b0c4 47706c40 47706cc0 47706c80 41f0e92d @lpG.lpG.lpG-..A
11-27 09:10:11.050: I/DEBUG(24198): code around lr:
11-27 09:10:11.050: I/DEBUG(24198): 5d148a08 9b35e06a 1164f8d3 00e4f8d3 2021f850 j.5...d.....P.! 
11-27 09:10:11.050: I/DEBUG(24198): 5d148a18 f8d3922f 1c481164 0164f8c3 f002982f /...d.H...d./...
11-27 09:10:11.050: I/DEBUG(24198): 5d148a28 9a0dfb3d 5853991d 4218681b 982fd00c =.....SX.h.B../.
11-27 09:10:11.050: I/DEBUG(24198): 5d148a38 f002930a 990afb33 0c01ea20 f8d09835 ....3... ...5...
11-27 09:10:11.050: I/DEBUG(24198): 5d148a48 f85220f0 932f302c 46594650 fd4cf7ea . R.,0/.PFYF..L.
11-27 09:10:11.050: I/DEBUG(24198): stack:
11-27 09:10:11.050: I/DEBUG(24198): 60961d58 60961f54 
11-27 09:10:11.050: I/DEBUG(24198): 60961d5c 5d132e21 /system/lib/libsc-a2xx.so
11-27 09:10:11.050: I/DEBUG(24198): 60961d60 60961f54 
11-27 09:10:11.050: I/DEBUG(24198): 60961d64 5d147b05 /system/lib/libsc-a2xx.so
11-27 09:10:11.050: I/DEBUG(24198): 60961d68 60961f54 
11-27 09:10:11.050: I/DEBUG(24198): 60961d6c 00000008 
11-27 09:10:11.050: I/DEBUG(24198): 60961d70 60961e6c 
11-27 09:10:11.050: I/DEBUG(24198): 60961d74 015ed480 [heap]
11-27 09:10:11.050: I/DEBUG(24198): 60961d78 014c6510 [heap]
11-27 09:10:11.050: I/DEBUG(24198): 60961d7c 015ed4b4 [heap]
11-27 09:10:11.050: I/DEBUG(24198): 60961d80 015ed4b8 [heap]
11-27 09:10:11.050: I/DEBUG(24198): 60961d84 014c6510 [heap]
11-27 09:10:11.050: I/DEBUG(24198): 60961d88 60961e50

.....等等

现在是奇怪的部分。

以这种方式替换myTex2D时......

vec4 myTex2D(sampler2D s, vec2 uv)
{
  return texture2D(s, uv);
}

void ShaderRun()
{
  IShaderNode_SetOutputColor0(texture2D(s, IShaderNode_GetInputTexcoord0().xy));
}

void main(void)
{
  glFragColor = IShaderNode_GetOutputColor0();
}

...直接致电texture2D。它有效!

有人可以解释一下吗?我们尝试了不同的精度,存储参数等。没有任何帮助。

在Adreno GPU的着色器中使用具有返回值的函数时是否有任何特殊需要考虑?

我们不知道该怎么做。这似乎是一个驱动程序问题。

编辑2012年11月30日:
我们通过对包含texture2D函数的子函数使用define而不是子函数来解决这个问题。

0 个答案:

没有答案