Skip to content

r600/sfn: fix memory leaks related to sfn and class Shader

Patrick Lerda requested to merge noblock/mesa:r600sfnfixmemoryleaks into main

For instance, with "piglit/bin/shader_runner tests/spec/arb_shader_atomic_counter_ops/execution/all_touch_test.shader_test -auto":

Direct leak of 128 byte(s) in 1 object(s) allocated from:
    #0 0x7f18df2acf37 in operator new(unsigned long) (/usr/lib64/libasan.so.6+0xb2f37)
    #1 0x7f18d4d98678 in __gnu_cxx::new_allocator<r600_shader_atomic>::allocate(unsigned long, void const*) /usr/include/c++/11.3.0/ext/new_allocator.h:127
    #2 0x7f18d4d98678 in std::allocator_traits<std::allocator<r600_shader_atomic> >::allocate(std::allocator<r600_shader_atomic>&, unsigned long) /usr/include/c++/11.3.0/bits/alloc_traits.h:464
    #3 0x7f18d4d98678 in std::_Vector_base<r600_shader_atomic, std::allocator<r600_shader_atomic> >::_M_allocate(unsigned long) /usr/include/c++/11.3.0/bits/stl_vector.h:346
    #4 0x7f18d4d98678 in void std::vector<r600_shader_atomic, std::allocator<r600_shader_atomic> >::_M_realloc_insert<r600_shader_atomic const&>(__gnu_cxx::__normal_iterator<r600_shader_atomic*, std::vector<r600_shader_atomic, std::allocator<r600_shader_atomic> > >, r600_shader_atomic const&) /usr/include/c++/11.3.0/bits/vector.tcc:440
    #5 0x7f18d4da09f1 in std::vector<r600_shader_atomic, std::allocator<r600_shader_atomic> >::push_back(r600_shader_atomic const&) /usr/include/c++/11.3.0/bits/stl_vector.h:1198
    #6 0x7f18d4da09f1 in std::vector<r600_shader_atomic, std::allocator<r600_shader_atomic> >::push_back(r600_shader_atomic const&) /usr/include/c++/11.3.0/bits/stl_vector.h:1187
    #7 0x7f18d4da09f1 in r600::Shader::scan_uniforms(nir_variable*) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:592
    #8 0x7f18d4da8970 in r600::Shader::process(nir_shader*) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:495
    #9 0x7f18d4da8f07 in r600::Shader::translate_from_nir(nir_shader*, pipe_stream_output_info const*, r600_shader*, r600_shader_key&, r600_chip_class) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:469
    #10 0x7f18d4cdd86f in r600_shader_from_nir ../src/gallium/drivers/r600/sfn/sfn_nir.cpp:978

and "piglit/bin/shader_runner tests/spec/arb_shader_texture_lod/execution/glsl-fs-shadow2DGradARB-01.shader_test -auto -fbo":

Indirect leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x7f7302b4df37 in operator new(unsigned long) (/usr/lib64/libasan.so.6+0xb2f37)
    #1 0x7f72f89439ab in __gnu_cxx::new_allocator<std::_List_node<r600::TexInstr*> >::allocate(unsigned long, void const*) /usr/include/c++/11.3.0/ext/new_allocator.h:127
    #2 0x7f72f89439ab in std::allocator_traits<std::allocator<std::_List_node<r600::TexInstr*> > >::allocate(std::allocator<std::_List_node<r600::TexInstr*> >&, unsigned long) /usr/include/c++/11.3.0/bits/alloc_traits.h:464
    #3 0x7f72f89439ab in std::__cxx11::_List_base<r600::TexInstr*, std::allocator<r600::TexInstr*> >::_M_get_node() /usr/include/c++/11.3.0/bits/stl_list.h:442
    #4 0x7f72f89439ab in std::_List_node<r600::TexInstr*>* std::__cxx11::list<r600::TexInstr*, std::allocator<r600::TexInstr*> >::_M_create_node<r600::TexInstr* const&>(r600::TexInstr* const&) /usr/include/c++/11.3.0/bits/stl_list.h:634
    #5 0x7f72f89439ab in void std::__cxx11::list<r600::TexInstr*, std::allocator<r600::TexInstr*> >::_M_insert<r600::TexInstr* const&>(std::_List_iterator<r600::TexInstr*>, r600::TexInstr* const&) /usr/include/c++/11.3.0/bits/stl_list.h:1911
    #6 0x7f72f89439ab in std::__cxx11::list<r600::TexInstr*, std::allocator<r600::TexInstr*> >::push_back(r600::TexInstr* const&) /usr/include/c++/11.3.0/bits/stl_list.h:1212
    #7 0x7f72f89439ab in r600::TexInstr::add_prepare_instr(r600::TexInstr*) ../src/gallium/drivers/r600/sfn/sfn_instr_tex.h:188
    #8 0x7f72f89439ab in r600::TexInstr::emit_set_gradients(nir_tex_instr*, int, r600::TexInstr::Inputs&, r600::TexInstr*, r600::Shader&) ../src/gallium/drivers/r600/sfn/sfn_instr_tex.cpp:480
    #9 0x7f72f8944aae in r600::TexInstr::emit_lowered_tex(nir_tex_instr*, r600::TexInstr::Inputs&, r600::Shader&) ../src/gallium/drivers/r600/sfn/sfn_instr_tex.cpp:554
    #10 0x7f72f89454f4 in r600::TexInstr::from_nir(nir_tex_instr*, r600::Shader&) ../src/gallium/drivers/r600/sfn/sfn_instr_tex.cpp:379
    #11 0x7f72f868bc2c in r600::Shader::process_instr(nir_instr*) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:817
    #12 0x7f72f868bc2c in r600::Shader::process_block(nir_block*) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:805
    #13 0x7f72f8691682 in r600::Shader::process_cf_node(nir_cf_node*) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:668
    #14 0x7f72f86a5cea in r600::Shader::process(nir_shader*) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:516
    #15 0x7f72f86a6087 in r600::Shader::translate_from_nir(nir_shader*, pipe_stream_output_info const*, r600_shader*, r600_shader_key&, r600_chip_class) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:474
    #16 0x7f72f85da852 in r600_shader_from_nir ../src/gallium/drivers/r600/sfn/sfn_nir.cpp:978

cc: mesa-stable

Signed-off-by: Patrick Lerda patrick9876@free.fr

Merge request reports