radv: dont store disasm string unless keep_shader_info flag set
This fixes the memory use regression from bug 111107.
Fixes: 726a31df70
("radv: Add the concept of radv shader binaries.")
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111107
This commit is contained in:
@@ -1011,18 +1011,20 @@ radv_shader_variant_create(struct radv_device *device,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *disasm_data;
|
if (device->keep_shader_info) {
|
||||||
size_t disasm_size;
|
const char *disasm_data;
|
||||||
if (!ac_rtld_get_section_by_name(&rtld_binary, ".AMDGPU.disasm", &disasm_data, &disasm_size)) {
|
size_t disasm_size;
|
||||||
radv_shader_variant_destroy(device, variant);
|
if (!ac_rtld_get_section_by_name(&rtld_binary, ".AMDGPU.disasm", &disasm_data, &disasm_size)) {
|
||||||
ac_rtld_close(&rtld_binary);
|
radv_shader_variant_destroy(device, variant);
|
||||||
return NULL;
|
ac_rtld_close(&rtld_binary);
|
||||||
}
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
variant->llvm_ir_string = bin->llvm_ir_size ? strdup((const char*)(bin->data + bin->elf_size)) : NULL;
|
variant->llvm_ir_string = bin->llvm_ir_size ? strdup((const char*)(bin->data + bin->elf_size)) : NULL;
|
||||||
variant->disasm_string = malloc(disasm_size + 1);
|
variant->disasm_string = malloc(disasm_size + 1);
|
||||||
memcpy(variant->disasm_string, disasm_data, disasm_size);
|
memcpy(variant->disasm_string, disasm_data, disasm_size);
|
||||||
variant->disasm_string[disasm_size] = 0;
|
variant->disasm_string[disasm_size] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
ac_rtld_close(&rtld_binary);
|
ac_rtld_close(&rtld_binary);
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user