Skip to content

Commit cd711b4

Browse files
Patrick Lerda1ace
authored andcommitted
glsl/nir: fix gl_nir_cross_validate_outputs_to_inputs() memory leak
For instance, this issue is triggered with vs-to-fs-overlap.shader_test -auto -fbo: Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x7fe64f58e9a7 in calloc (/usr/lib64/libasan.so.6+0xb19a7) android-rpi#1 0x7fe642ca2839 in _mesa_symbol_table_ctor ../src/mesa/program/symbol_table.c:286 android-rpi#2 0x7fe642ff003d in gl_nir_cross_validate_outputs_to_inputs ../src/compiler/glsl/gl_nir_link_varyings.c:728 android-rpi#3 0x7fe642d7c7d8 in gl_nir_link_glsl ../src/compiler/glsl/gl_nir_linker.c:1357 #4 0x7fe642be6931 in st_link_glsl_to_nir ../src/mesa/state_tracker/st_glsl_to_nir.cpp:562 #5 0x7fe642be6931 in st_link_shader ../src/mesa/state_tracker/st_glsl_to_nir.cpp:944 #6 0x7fe642acab55 in link_program ../src/mesa/main/shaderapi.c:1336 #7 0x7fe642acab55 in link_program_error ../src/mesa/main/shaderapi.c:1447 #8 0x7fe6424aa389 in _mesa_unmarshal_LinkProgram src/mapi/glapi/gen/marshal_generated2.c:1911 #9 0x7fe641fd912b in glthread_unmarshal_batch ../src/mesa/main/glthread.c:139 #10 0x7fe641f48d48 in util_queue_thread_func ../src/util/u_queue.c:309 #11 0x7fe641fa442a in impl_thrd_routine ../src/c11/impl/threads_posix.c:67 Fixes: 7d1948e ("glsl: implement cross_validate_outputs_to_inputs() in nir linker") Signed-off-by: Patrick Lerda <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27071> (cherry picked from commit bacace8)
1 parent 3cc0051 commit cd711b4

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

.pick_status.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
"description": "glsl/nir: fix gl_nir_cross_validate_outputs_to_inputs() memory leak",
8585
"nominated": true,
8686
"nomination_type": 1,
87-
"resolution": 0,
87+
"resolution": 1,
8888
"main_sha": null,
8989
"because_sha": "7d1948e9b5d953cf8f5a56c676c935621b8da2bd",
9090
"notes": null

src/compiler/glsl/gl_nir_link_varyings.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ gl_nir_cross_validate_outputs_to_inputs(const struct gl_constants *consts,
746746
if (!validate_explicit_variable_location(consts,
747747
output_explicit_locations,
748748
var, prog, producer)) {
749-
return;
749+
goto out;
750750
}
751751
}
752752
}
@@ -800,15 +800,15 @@ gl_nir_cross_validate_outputs_to_inputs(const struct gl_constants *consts,
800800
if (!validate_explicit_variable_location(consts,
801801
input_explicit_locations,
802802
input, prog, consumer)) {
803-
return;
803+
goto out;
804804
}
805805

806806
while (idx < slot_limit) {
807807
if (idx >= MAX_VARYING) {
808808
linker_error(prog,
809809
"Invalid location %u in %s shader\n", idx,
810810
_mesa_shader_stage_to_string(consumer->Stage));
811-
return;
811+
goto out;
812812
}
813813

814814
output = output_explicit_locations[idx][input->data.location_frac].var;
@@ -871,6 +871,7 @@ gl_nir_cross_validate_outputs_to_inputs(const struct gl_constants *consts,
871871
}
872872
}
873873

874+
out:
874875
_mesa_symbol_table_dtor(table);
875876
}
876877

0 commit comments

Comments
 (0)