radeonsi: serialize shader disassembly string to fix asm dumps for ACO
Shaders loaded from the shader cache should be printable. Before this, sometimes only "(null)" was printed. Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29053>
This commit is contained in:
@@ -246,7 +246,8 @@ static uint32_t *si_get_shader_binary(struct si_shader *shader)
|
||||
align(sizeof(shader->info), 4) +
|
||||
4 + 4 + align(shader->binary.code_size, 4) +
|
||||
4 + shader->binary.num_symbols * 8 +
|
||||
4 + align(llvm_ir_size, 4);
|
||||
4 + align(llvm_ir_size, 4) +
|
||||
4 + align(shader->binary.disasm_size, 4);
|
||||
uint32_t *buffer = (uint32_t*)CALLOC(1, size);
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
@@ -264,6 +265,7 @@ static uint32_t *si_get_shader_binary(struct si_shader *shader)
|
||||
ptr = write_chunk(ptr, shader->binary.code_buffer, shader->binary.code_size);
|
||||
ptr = write_chunk(ptr, shader->binary.symbols, shader->binary.num_symbols * 8);
|
||||
ptr = write_chunk(ptr, shader->binary.llvm_ir_string, llvm_ir_size);
|
||||
ptr = write_chunk(ptr, shader->binary.disasm_string, shader->binary.disasm_size);
|
||||
assert((char *)ptr - (char *)buffer == (ptrdiff_t)size);
|
||||
|
||||
/* Compute CRC32. */
|
||||
@@ -293,6 +295,8 @@ static bool si_load_shader_binary(struct si_shader *shader, void *binary)
|
||||
ptr = read_chunk(ptr, (void **)&shader->binary.symbols, &chunk_size);
|
||||
shader->binary.num_symbols = chunk_size / 8;
|
||||
ptr = read_chunk(ptr, (void **)&shader->binary.llvm_ir_string, &chunk_size);
|
||||
ptr = read_chunk(ptr, (void **)&shader->binary.disasm_string, &chunk_size);
|
||||
shader->binary.disasm_size = chunk_size;
|
||||
|
||||
if (!shader->is_gs_copy_shader &&
|
||||
shader->selector->stage == MESA_SHADER_GEOMETRY && !shader->key.ge.as_ngg) {
|
||||
|
||||
Reference in New Issue
Block a user