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) {