radeonsi: aco compile support merged mono shader
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/24204>
This commit is contained in:
@@ -3461,6 +3461,7 @@ nir_shader *si_get_prev_stage_nir_shader(struct si_shader *shader,
|
||||
*/
|
||||
prev_shader->key.ge.opt.kill_outputs = 0;
|
||||
prev_shader->is_monolithic = true;
|
||||
prev_shader->use_aco = shader->use_aco;
|
||||
|
||||
si_init_shader_args(prev_shader, args);
|
||||
|
||||
|
||||
@@ -145,9 +145,33 @@ si_aco_compile_shader(struct si_shader *shader,
|
||||
struct aco_shader_info info = {0};
|
||||
si_fill_aco_shader_info(shader, &info);
|
||||
|
||||
aco_compile_shader(&options, &info, 1, &nir, &args->ac,
|
||||
nir_shader *shaders[2];
|
||||
unsigned num_shaders = 0;
|
||||
|
||||
bool free_nir = false;
|
||||
struct si_shader prev_shader = {};
|
||||
struct si_shader_args prev_args;
|
||||
|
||||
const struct si_shader_selector *sel = shader->selector;
|
||||
|
||||
/* For merged shader stage. */
|
||||
if (shader->is_monolithic && sel->screen->info.gfx_level >= GFX9 &&
|
||||
(sel->stage == MESA_SHADER_TESS_CTRL || sel->stage == MESA_SHADER_GEOMETRY)) {
|
||||
|
||||
shaders[num_shaders++] =
|
||||
si_get_prev_stage_nir_shader(shader, &prev_shader, &prev_args, &free_nir);
|
||||
|
||||
args = &prev_args;
|
||||
}
|
||||
|
||||
shaders[num_shaders++] = nir;
|
||||
|
||||
aco_compile_shader(&options, &info, num_shaders, shaders, &args->ac,
|
||||
si_aco_build_shader_binary, (void **)shader);
|
||||
|
||||
if (free_nir)
|
||||
ralloc_free(shaders[0]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user