radeonsi: add vs prolog aco build

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/24713>
This commit is contained in:
Qiang Yu 2023-08-05 16:56:33 +08:00 committed by Marge Bot
parent 8c3b5ce0c4
commit 4247b742ec

View file

@ -304,6 +304,43 @@ si_aco_build_tcs_epilog(struct si_screen *screen,
return true;
}
static bool
si_aco_build_vs_prolog(struct si_screen *screen,
struct aco_compiler_options *options,
struct si_shader_part *result)
{
const union si_shader_part_key *key = &result->key;
struct si_shader_args args;
si_get_vs_prolog_args(screen->info.gfx_level, &args, key);
struct aco_gl_vs_prolog_info pinfo = {
.instance_divisor_is_one = key->vs_prolog.states.instance_divisor_is_one,
.instance_divisor_is_fetched = key->vs_prolog.states.instance_divisor_is_fetched,
.instance_diviser_buf_offset = SI_VS_CONST_INSTANCE_DIVISORS * 16,
.num_inputs = key->vs_prolog.num_inputs,
.as_ls = key->vs_prolog.as_ls,
.internal_bindings = args.internal_bindings,
};
struct aco_shader_info info = {0};
info.workgroup_size = info.wave_size = key->vs_prolog.wave32 ? 32 : 64;
if (key->vs_prolog.as_ngg)
info.hw_stage = AC_HW_NEXT_GEN_GEOMETRY_SHADER;
else if (key->vs_prolog.as_es)
info.hw_stage = options->gfx_level >= GFX9 ? AC_HW_LEGACY_GEOMETRY_SHADER : AC_HW_EXPORT_SHADER;
else if (key->vs_prolog.as_ls)
info.hw_stage = options->gfx_level >= GFX9 ? AC_HW_HULL_SHADER : AC_HW_LOCAL_SHADER;
else
info.hw_stage = AC_HW_VERTEX_SHADER;
aco_compile_gl_vs_prolog(options, &info, &pinfo, &args.ac,
si_aco_build_shader_part_binary, (void **)result);
return true;
}
bool
si_aco_build_shader_part(struct si_screen *screen, gl_shader_stage stage, bool prolog,
struct util_debug_callback *debug, const char *name,
@ -313,6 +350,8 @@ si_aco_build_shader_part(struct si_screen *screen, gl_shader_stage stage, bool p
si_fill_aco_options(screen, stage, &options, debug);
switch (stage) {
case MESA_SHADER_VERTEX:
return si_aco_build_vs_prolog(screen, &options, result);
case MESA_SHADER_TESS_CTRL:
return si_aco_build_tcs_epilog(screen, &options, result);
break;