void
select_vs_prolog(Program* program, const struct aco_vs_prolog_info* pinfo, ac_shader_config* config,
const struct aco_compiler_options* options, const struct aco_shader_info* info,
- const struct ac_shader_args* args, unsigned* num_preserved_sgprs)
+ const struct ac_shader_args* args)
{
assert(pinfo->num_attributes > 0);
/* This should be enough for any shader/stage. */
unsigned max_user_sgprs = options->gfx_level >= GFX9 ? 32 : 16;
- *num_preserved_sgprs = max_user_sgprs + 14;
init_program(program, compute_cs, info, options->gfx_level, options->family, options->wgp_mode,
config);
lgkm_imm.lgkm = 0;
/* choose sgprs */
- PhysReg vertex_buffers(align(*num_preserved_sgprs, 2));
+ PhysReg vertex_buffers(align(max_user_sgprs + 14, 2));
PhysReg prolog_input = vertex_buffers.advance(8);
PhysReg desc(
align((has_nontrivial_divisors ? prolog_input : vertex_buffers).advance(8).reg(), 4));
program->debug.private_data = NULL;
/* create IR */
- unsigned num_preserved_sgprs;
- aco::select_vs_prolog(program.get(), pinfo, &config, options, info, args, &num_preserved_sgprs);
+ aco::select_vs_prolog(program.get(), pinfo, &config, options, info, args);
aco::insert_NOPs(program.get());
if (options->dump_shader)
(*build_prolog)(binary,
config.num_sgprs,
config.num_vgprs,
- num_preserved_sgprs,
code.data(),
code.size(),
disasm.data(),
(*build_epilog)(binary,
config.num_sgprs,
config.num_vgprs,
- 0,
code.data(),
code.size(),
disasm.data(),
typedef void (aco_shader_part_callback)(void **priv_ptr,
uint32_t num_sgprs,
uint32_t num_vgprs,
- uint32_t num_preserved_sgprs,
const uint32_t *code,
uint32_t code_size,
const char *disasm_str,
const struct ac_shader_args* out_args);
void select_vs_prolog(Program* program, const struct aco_vs_prolog_info* pinfo,
ac_shader_config* config, const struct aco_compiler_options* options,
- const struct aco_shader_info* info, const struct ac_shader_args* args,
- unsigned* num_preserved_sgprs);
+ const struct aco_shader_info* info, const struct ac_shader_args* args);
void select_ps_epilog(Program* program, const struct aco_ps_epilog_info* epilog_info,
ac_shader_config* config, const struct aco_compiler_options* options,
shader_part->code_size = code_size;
shader_part->rsrc1 = S_00B848_VGPRS((binary->num_vgprs - 1) / (wave_size == 32 ? 8 : 4)) |
S_00B228_SGPRS((binary->num_sgprs - 1) / 8);
- shader_part->num_preserved_sgprs = binary->num_preserved_sgprs;
shader_part->disasm_string =
binary->disasm_size ? strdup((const char *)(binary->data + binary->code_size)) : NULL;
static void radv_aco_build_shader_part(void **bin,
uint32_t num_sgprs,
uint32_t num_vgprs,
- uint32_t num_preserved_sgprs,
const uint32_t *code,
uint32_t code_size,
const char *disasm_str,
part_binary->num_sgprs = num_sgprs;
part_binary->num_vgprs = num_vgprs;
- part_binary->num_preserved_sgprs = num_preserved_sgprs;
part_binary->code_size = code_size * sizeof(uint32_t);
memcpy(part_binary->data, code, part_binary->code_size);
if (disasm_size) {
struct radv_shader_part_binary {
uint8_t num_sgprs;
uint8_t num_vgprs;
- uint8_t num_preserved_sgprs;
unsigned code_size;
unsigned disasm_size;
uint8_t data[0];
union radv_shader_arena_block *alloc;
uint32_t code_size;
uint32_t rsrc1;
- uint8_t num_preserved_sgprs;
bool nontrivial_divisors;
uint32_t spi_shader_col_format;
uint64_t upload_seq;