[Mesa-dev] Google Earth + glReleaseShaderCompiler problem

Eric Anholt eric at anholt.net
Mon Feb 11 18:19:27 PST 2013


Brian Paul <brianp at vmware.com> writes:

> Google Earth v7 calls glReleaseShaderCompiler() and Mesa's GLSL 
> compiler is crashing.
>
> In particular, it looks like glReleaseShaderCompiler() is getting 
> called between glCompileShader() and glLinkProgram().  The 
> glLinkProgram() call crashes when we try to reference some data 
> structures which were freed by glReleaseShaderCompiler().
>
> Here's an example from valgrind:
>
> ==10049== Invalid read of size 4
> ==10049==    at 0x14FE4B9C: ir_call::ir_call(ir_function_signature*, 
> ir_dereference_variable*, exec_list*) (ir.h:1135)
> ==10049==    by 0x14FEC269: ir_call::clone(void*, hash_table*) const 
> (ir_clone.cpp:181)
> ==10049==    by 0x14FEC97A: ir_function_signature::clone(void*, 
> hash_table*) const (ir_clone.cpp:313)
> ==10049==    by 0x14FEC8A3: ir_function::clone(void*, hash_table*) 
> const (ir_clone.cpp:290)
> ==10049==    by 0x14FECDDA: clone_ir_list(void*, exec_list*, exec_list 
> const*) (ir_clone.cpp:433)
> ==10049==    by 0x14F0750C: link_intrastage_shaders(void*, 
> gl_context*, gl_shader_program*, gl_shader**, unsigned int) 
> (linker.cpp:1062)
> ==10049==    by 0x14F09B5E: link_shaders(gl_context*, 
> gl_shader_program*) (linker.cpp:2471)
> ==10049==    by 0x1500064C: _mesa_glsl_link_shader (ir_to_mesa.cpp:3155)
> ==10049==    by 0x14F96F36: link_program (shaderapi.c:758)
> ==10049==    by 0x14F98165: _mesa_LinkProgram (shaderapi.c:1254)
> ==10049==    by 0x8927796: 
> Gap::Gfx::GL2VertexShader::LinkPixelShader(unsigned int) (in 
> /opt/google/earth/free/libIGGfx.so)
> ==10049==    by 0x893F9B2: 
> Gap::Gfx::GL2VertexShader::bind(Gap::Gfx::igOglVisualContext*) (in 
> /opt/google/earth/free/libIGGfx.so)
> ==10049==  Address 0x8fd6cf0 is 40 bytes inside a block of size 80 free'd
> ==10049==    at 0x402768C: free (in 
> /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
> ==10049==    by 0x14EFB640: unsafe_free (ralloc.c:245)
> ==10049==    by 0x14EFB610: unsafe_free (ralloc.c:238)
> ==10049==    by 0x14EFB610: unsafe_free (ralloc.c:238)
> ==10049==    by 0x14EFB55B: ralloc_free (ralloc.c:208)
> ==10049==    by 0x14F02BB3: _mesa_glsl_release_functions() 
> (builtin_function.cpp:14643)
> ==10049==    by 0x14EE7D95: _mesa_destroy_shader_compiler_caches 
> (glsl_parser_extras.cpp:1101)
> ==10049==    by 0x14F987CC: _mesa_ReleaseShaderCompiler (shaderapi.c:1491)
> ==10049==    by 0x891206C: 
> Gap::Gfx::GL2Shader::CompileShader(Gap::Gfx::igOglVisualContext*, 
> unsigned int, char const*) (in /opt/google/earth/free/libIGGfx.so)
> ==10049==    by 0x89470A5: 
> Gap::Gfx::GL2VertexShader::CreateVertexShader(Gap::Gfx::igOglVisualContext*, 
> char const*, Gap::Gfx::igVertexDataList const*, 
> Gap::Gfx::igGfxShaderConstantList const*) (in 
> /opt/google/earth/free/libIGGfx.so)
> ==10049==    by 0x894EC64: 
> Gap::Gfx::igOglVisualContext::createVertexShader_GL2(char const*, 
> Gap::Gfx::igVertexDataList const*, Gap::Gfx::igGfxShaderConstantList 
> const*) (in /opt/google/earth/free/libIGGfx.so)
> ==10049==    by 0x8916479: 
> Gap::Gfx::igOglVisualContext::createVertexShader_OGL(char const*, 
> Gap::Gfx::IG_GFX_SHADER_LANGUAGE, Gap::Gfx::igVertexDataList const*, 
> Gap::Gfx::igGfxShaderConstantList const*, char const*, char const*, 
> Gap::Gfx::igGfxShaderDefineList const*) (in 
> /opt/google/earth/free/libIGGfx.so)
> ==10049==
>
>
> I've hacked several other Mesa GLSL tests to call 
> glReleaseShaderCompiler() between compile and link and get similar 
> results.
>
> Can someone look into fixing this?

I just noticed this mail still marked todo, and I don't see a fix having
landed.  I wrote up a piglit test that failed to reproduce this.  Can
you write one?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130211/3be1d587/attachment.pgp>


More information about the mesa-dev mailing list