From 96cf96f611f26b80f815c4ef5ebcc24cbd00c937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 30 Apr 2024 12:57:50 -0400 Subject: [PATCH] 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 Part-of: --- src/gallium/drivers/radeonsi/si_state_shaders.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index b9a30ab0ebd..39a651e2364 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -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) {