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:
Qiang Yu
2023-07-06 10:27:02 +08:00
committed by Marge Bot
parent 21ae5909a4
commit 339ea9e344
2 changed files with 26 additions and 1 deletions
+1
View File
@@ -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);
+25 -1
View File
@@ -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;
}