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 <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9277>
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2021-02-23 15:02:05 +01:00 committed by Marge Bot
parent 0e97d817f5
commit e5b1e645e7
1 changed files with 12 additions and 11 deletions

View File

@ -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;