question

muzzinb avatar image
muzzinb asked

GLSL compiler assert

The GLSL compiler on the Fire Stick will assert when using certain a shaders. My guess is that the shader contains "too many" texture samples. We have a shader that does a blur kernel - if the size of the kernel is too large, there is an assert: E/ ( 5239): assertion failed: vendor/broadcom/videocore/vc4/middleware/khronos/glsl/2708/glsl_allocator_4.c:698: get_instr(timestamp)->move_r4 == (OP_T)MOVE_STILL_THERE W/vcos_bt ( 5239): Backtrace of current thread: W/vcos_bt ( 5239): #00 pc 0000325a /system/lib/ libvcos.so (vcos_pthreads_logging_assert+121) W/vcos_bt ( 5239): #01 pc 0004d45e /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #02 pc 0004f3a0 /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #03 pc 0004f3b0 /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #04 pc 00050822 /system/vendor/lib/egl/ libGLES_vc4.so (glsl_allocator_add_input_dependency+101) W/vcos_bt ( 5239): #05 pc 00053132 /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #06 pc 00053020 /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #07 pc 000530dc /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #08 pc 000530dc /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #09 pc 000530dc /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #10 pc 000530dc /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #11 pc 000530dc /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #12 pc 000530dc /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #13 pc 000532b2 /system/vendor/lib/egl/ libGLES_vc4.so (glsl_backend_schedule+269) W/vcos_bt ( 5239): #14 pc 0006f500 /system/vendor/lib/egl/ libGLES_vc4.so (glxx_schedule+63) W/vcos_bt ( 5239): #15 pc 0006fc8e /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #16 pc 00070120 /system/vendor/lib/egl/ libGLES_vc4.so (glxx_hw_emit_fshaders+59) W/vcos_bt ( 5239): #17 pc 00070278 /system/vendor/lib/egl/ libGLES_vc4.so (glxx_hw_emit_shaders+91) W/vcos_bt ( 5239): #18 pc 000483c6 /system/vendor/lib/egl/ libGLES_vc4.so (gl20_get_shaders_and_cache+153) W/vcos_bt ( 5239): #19 pc 0006b140 /system/vendor/lib/egl/ libGLES_vc4.so (glxx_hw_draw_triangles+67) W/vcos_bt ( 5239): #20 pc 00071598 /system/vendor/lib/egl/ libGLES_vc4.so (glintDrawElements_impl+1887) W/vcos_bt ( 5239): #21 pc 000340c6 /system/vendor/lib/egl/ libGLES_vc4.so W/vcos_bt ( 5239): #22 pc 00021672 /system/vendor/lib/egl/ libGLES_vc4.so (glDrawArrays+129) W/vcos_bt ( 5239): #23 pc 00029a54 /system/lib/ libEGL.so The particular shader is: D/libEGL ( 5239): precision mediump float; D/libEGL ( 5239): uniform vec4 fsize; D/libEGL ( 5239): uniform vec4 offset; D/libEGL ( 5239): uniform vec4 scolor; D/libEGL ( 5239): uniform sampler2D srctex; D/libEGL ( 5239): uniform vec4 srctexscale; D/libEGL ( 5239): uniform sampler2D tex; D/libEGL ( 5239): uniform vec4 texscale; D/libEGL ( 5239): varying vec4 fucxadd; D/libEGL ( 5239): varying vec4 fucxmul; D/libEGL ( 5239): varying mediump vec2 tc0; D/libEGL ( 5239): void main() { D/libEGL ( 5239): lowp vec4 fcolor; D/libEGL ( 5239): fcolor = vec4(0.0, 0.0, 0.0, 0.0); D/libEGL ( 5239): vec4 color = vec4(0.0, 0.0, 0.0, 0.0); D/libEGL ( 5239): for (float ix = -0.00000; ix <= 0.00000; ix++) D/libEGL ( 5239): { D/libEGL ( 5239): for (float iy = -12.00000; iy <= 12.00000; iy++) D/libEGL ( 5239): { D/libEGL ( 5239): vec2 i = vec2(ix,iy); D/libEGL ( 5239): color += texture2D(tex, tc0 + (offset.xy + i) * texscale.xy); D/libEGL ( 5239): } D/libEGL ( 5239): } // EndBox2. D/libEGL ( 5239): fcolor = color * fsize.w; D/libEGL ( 5239): lowp vec4 shadowColor = scolor; D/libEGL ( 5239): lowp vec4 shadowColor2 = vec4(0.0,0,0.0,0); D/libEGL ( 5239): fcolor.a = fcolor.a * fsize.z; D/libEGL ( 5239): fcolor.r = 0.0; D/libEGL ( 5239): lowp vec4 base = texture2D(srctex, tc0 * srctexscale.xy); D/libEGL ( 5239): lowp vec4 baseValue = base; D/libEGL ( 5239): vec2 alphas = vec2(shadowColor.a, shadowColor2.a); D/libEGL ( 5239): fcolor.ar = clamp( fcolor.ar, 0.0, 1.0) * alphas; D/libEGL ( 5239): fcolor = (shadowColor * fcolor.a + shadowColor2 * fcolor.r)*(1.0-base.a) + baseValue; D/libEGL ( 5239): } If instead of using -12..12 in the 'iy' loop, -11..11 is used, the shader is executed properly. Is there possibly a workaround, such that an arbitrary number of texture samples can be made, and the assert can be avoided?
fire tv
10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

0 Answers