From e5b1e645e790fdc26cf63540814375ce24af9cb0 Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Tue, 23 Feb 2021 15:02:05 +0100 Subject: [PATCH] ac/rgp: make the max gap between shader code a warning For radeonsi the shaders don't live in the same BOs, so they're unlikely to be less that 0x1000 bytes apart. So this commit bumps the threshold to 0x10000 and warns once when hitting it. Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/common/ac_rgp_elf_object_pack.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/amd/common/ac_rgp_elf_object_pack.c b/src/amd/common/ac_rgp_elf_object_pack.c index b7575dd..a98f19a 100644 --- a/src/amd/common/ac_rgp_elf_object_pack.c +++ b/src/amd/common/ac_rgp_elf_object_pack.c @@ -222,22 +222,23 @@ ac_rgp_file_write_elf_text(FILE *output, uint32_t *elf_size_calc, struct rgp_shader_data *rgp_shader_data = NULL; struct rgp_shader_data *prev_rgp_shader_data = NULL; uint32_t symbol_offset = 0; - uint32_t code_offset; - uint32_t gap_between_code; uint32_t mask = record->shader_stages_mask; - uint32_t align; + static bool warn_once = true; while(get_lowest_shader(&mask, record, &rgp_shader_data)) { if (prev_rgp_shader_data) { - code_offset = rgp_shader_data->base_address - - prev_rgp_shader_data->base_address; - gap_between_code = code_offset - prev_rgp_shader_data->code_size; + uint32_t code_offset = rgp_shader_data->base_address - + prev_rgp_shader_data->base_address; + uint32_t gap_between_code = code_offset - + prev_rgp_shader_data->code_size; symbol_offset += code_offset; - if (gap_between_code > 0x1000) { - fprintf(stderr, "Error: shader code too far from previous %x\n", - gap_between_code); - return; + if (gap_between_code > 0x10000 && warn_once) { + fprintf(stderr, "Warning: shader code far from previous " + "(%d bytes apart). The rgp capture file " + "might be very large.\n", gap_between_code); + warn_once = false; } + fseek(output, gap_between_code, SEEK_CUR); *elf_size_calc += gap_between_code; } @@ -249,7 +250,7 @@ ac_rgp_file_write_elf_text(FILE *output, uint32_t *elf_size_calc, } symbol_offset += rgp_shader_data->code_size; - align = ALIGN(symbol_offset, 256) - symbol_offset; + uint32_t align = ALIGN(symbol_offset, 256) - symbol_offset; fseek(output, align, SEEK_CUR); *elf_size_calc += align; *text_size = symbol_offset + align; -- 2.7.4