mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-09 14:50:11 +01:00
radeonsi: resolve aco scratch addr symbols
Used for scratch buffer operation and reg spill when aco. 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/22573>
This commit is contained in:
parent
7aac3508dc
commit
474ddeffe6
3 changed files with 32 additions and 0 deletions
|
|
@ -967,6 +967,8 @@ static bool upload_binary_raw(struct si_screen *sscreen, struct si_shader *shade
|
|||
|
||||
memcpy(rx_ptr, shader->binary.code_buffer, shader->binary.code_size);
|
||||
|
||||
si_aco_resolve_symbols(shader, rx_ptr, scratch_va);
|
||||
|
||||
sscreen->ws->buffer_unmap(sscreen->ws, shader->bo->buf);
|
||||
shader->gpu_address = shader->bo->gpu_address;
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -135,3 +135,32 @@ si_aco_compile_shader(struct si_shader *shader,
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
si_aco_resolve_symbols(struct si_shader *shader, uint32_t *code, uint64_t scratch_va)
|
||||
{
|
||||
const struct aco_symbol *symbols = (struct aco_symbol *)shader->binary.symbols;
|
||||
|
||||
for (int i = 0; i < shader->binary.num_symbols; i++) {
|
||||
uint32_t value = 0;
|
||||
|
||||
switch (symbols[i].id) {
|
||||
case aco_symbol_scratch_addr_lo:
|
||||
value = scratch_va;
|
||||
break;
|
||||
case aco_symbol_scratch_addr_hi:
|
||||
value = S_008F04_BASE_ADDRESS_HI(scratch_va >> 32);
|
||||
|
||||
if (shader->selector->screen->info.gfx_level >= GFX11)
|
||||
value |= S_008F04_SWIZZLE_ENABLE_GFX11(1);
|
||||
else
|
||||
value |= S_008F04_SWIZZLE_ENABLE_GFX6(1);
|
||||
break;
|
||||
default:
|
||||
unreachable("invalid aco symbol");
|
||||
break;
|
||||
}
|
||||
|
||||
code[symbols[i].offset] = value;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -244,5 +244,6 @@ bool si_aco_compile_shader(struct si_shader *shader,
|
|||
struct si_shader_args *args,
|
||||
struct nir_shader *nir,
|
||||
struct util_debug_callback *debug);
|
||||
void si_aco_resolve_symbols(struct si_shader *shader, uint32_t *code, uint64_t scratch_va);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue