radeonsi: add exec_size to shader binary

Used by aco binary to split exec code and const data when combine
multi part shader binary.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24443>
This commit is contained in:
Qiang Yu 2023-07-20 21:15:57 +08:00
parent 51a8479a51
commit 85c0f31099
3 changed files with 5 additions and 1 deletions

View file

@ -842,6 +842,7 @@ struct si_shader_binary {
/* Depends on binary type, either ELF or raw buffer. */
const char *code_buffer;
size_t code_size;
uint32_t exec_size;
char *uploaded_code;
size_t uploaded_code_size;

View file

@ -110,6 +110,7 @@ si_aco_build_shader_binary(void **data, const struct ac_shader_config *config,
shader->binary.type = SI_SHADER_BINARY_RAW;
shader->binary.code_buffer = buffer;
shader->binary.code_size = code_size;
shader->binary.exec_size = exec_size;
if (disasm_size) {
memcpy(buffer + code_size, disasm_str, disasm_size);

View file

@ -253,7 +253,7 @@ static uint32_t *si_get_shader_binary(struct si_shader *shader)
unsigned size = sizeof(struct si_shader_blob_head) +
align(sizeof(shader->config), 4) +
align(sizeof(shader->info), 4) +
4 + align(shader->binary.code_size, 4) +
4 + 4 + align(shader->binary.code_size, 4) +
4 + shader->binary.num_symbols * 8 +
4 + align(llvm_ir_size, 4);
uint32_t *buffer = (uint32_t*)CALLOC(1, size);
@ -269,6 +269,7 @@ static uint32_t *si_get_shader_binary(struct si_shader *shader)
ptr = write_data(ptr, &shader->config, sizeof(shader->config));
ptr = write_data(ptr, &shader->info, sizeof(shader->info));
ptr = write_data(ptr, &shader->binary.exec_size, 4);
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);
@ -295,6 +296,7 @@ static bool si_load_shader_binary(struct si_shader *shader, void *binary)
shader->binary.type = (enum si_shader_binary_type)head->type;
ptr = read_data(ptr, &shader->config, sizeof(shader->config));
ptr = read_data(ptr, &shader->info, sizeof(shader->info));
ptr = read_data(ptr, &shader->binary.exec_size, 4);
ptr = read_chunk(ptr, (void **)&shader->binary.code_buffer, &code_size);
shader->binary.code_size = code_size;
ptr = read_chunk(ptr, (void **)&shader->binary.symbols, &chunk_size);